3

ファイルに書き込む前に、ファイルが書き込み可能かどうかをチェックするスクリプトを作成しようとしています。

スクリプトが途中で終了しないことを確認してください。

私はここまで来ました

$meta =stream_get_meta_data($file);
while(!is_writable($meta['uri'])){
  sleep(rand(0,3));
  $meta=stream_get_meta_data($file);
  echo("sleeping\n");
}
$csv = fopen($file, 'a+')or die("can't open file");

$ fileを開いた状態でスクリプトをテストすると、$ fileを閉じた後でも、スリープしている部分でブロックされます。

私はPHPにかなり慣れていないので、私が気付いていない処理パラダイムがあるかもしれません。

どんな助けでも大歓迎です。

編集:これをwhileループに入れた理由は、ファイルが開いているかどうかを継続的にチェックするためです。したがって、ファイルが最終的に書き込み可能になると、whileループを終了する必要があります。

スリープとは、ファイルを開こうとしている人を複製することです。

4

4 に答える 4

3

its is_writable ( string $filename )

$filename = 'test.txt';
if (is_writable($meta['uri']) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}
于 2012-12-18T09:02:14.530 に答える
2
is_writable(<your_file>)

This should do the trick?

http://www.php.net/manual/en/function.is-writable.php

--

Also you can use

@fopen(<your_file>, 'a')

If this returns false, file is not writiable

于 2012-12-18T09:01:54.163 に答える
0

ファイルが書き込み可能かどうかを確認するためだけに while ループを使用するべきではありません。コードを少し変更して、次のようにします。

$meta =stream_get_meta_data($file);

if (is_writable($file)){
  sleep(rand(0,3));
  $meta=stream_get_meta_data($file);
  echo("sleeping\n");
}

$csv = fopen($file, 'a+')or die("can't open file");

ただし、あなたの主な目標が何であるかがわからないため、次のようにすることができます。

$meta =stream_get_meta_data($file);

while(!is_writable($file)){
  sleep(rand(0,3));
  $meta=stream_get_meta_data($file);
  echo("sleeping\n");
}

$csv = fopen($file, 'a+')or die("can't open file");
于 2012-12-18T09:02:49.263 に答える