在写入文件之前检查文件是否可写

时间:2012-12-18 09:00:13

标签: php

我正在尝试创建一个脚本,在写入文件之前检查文件是否可写

确保脚本不会过早退出。

我到目前为止

$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 个答案:

答案 0 :(得分:2)

is_writable(<your_file>)

这应该可以解决问题吗?

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

-

您也可以使用

@fopen(<your_file>, 'a')

如果返回false,则文件不可写

答案 1 :(得分:2)

is_writable ( string $filename )

$filename = 'test.txt';
if (is_writable($meta['uri']) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}

答案 2 :(得分:1)

使用touch()

if (touch($file_name) === FALSE) {
  throw new Exception('File not writable');
}

答案 3 :(得分: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");