我正在尝试创建一个脚本,在写入文件之前检查文件是否可写
确保脚本不会过早退出。
我到目前为止
$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循环。
睡眠只是复制试图打开文件的人。
答案 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");