2008-11-06 116 views
1

看来,如果我这样做如何让php等待curl在继续之前完成?

$file = fopen($filepath, "w"); 
$CR = curl_init(); 
curl_setopt($CR, CURLOPT_URL, $source_path); 
curl_setopt($CR, CURLOPT_POST, 1); 
curl_setopt($CR, CURLOPT_FAILONERROR, true); 
curl_setopt($CR, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($CR, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($CR, CURLOPT_FILE, $file); 
$result = curl_exec($CR); 
$error = curl_error($CR); 
print filesize($filepath); 

我得到不同的结果,如果我只是运行

print filesize($filepath); 

第二次。我的猜测是curl仍然在下载文件大小()时进行下载。

回答

2

请注意,像filesize()这样的函数会缓存它们的结果,请尝试向'print filesize(...);'上方的clearstatcache()添加一个调用。这里有一个例子:

$file = '/tmp/test12345'; 
file_put_contents($file, 'hello'); 
echo filesize($file), "\n"; 
file_put_contents($file, 'hello world, this is a test'); 
echo filesize($file), "\n"; 
clearstatcache(); 
echo filesize($file), "\n"; 

见www.php.net/clearstatcache

0

嗯,我有同样的问题。 curl应该是同步的,但是,取决于你如何使用它,它不是同步的。
如果您在卷曲,打印或回声之后调用,则内容将失效。有一个奇怪的延迟。 但我会尝试这种方法 -

print_r(curls_getinfo($CR)); 

这样一个步骤都可以解决这个问题。

相关问题