Как заставить php ждать завершения curl, прежде чем продолжить? - PullRequest
1 голос
/ 06 ноября 2008

Кажется, если я сделаю что-то вроде

$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 все еще загружается, когда делаю fileize ().

Ответы [ 2 ]

2 голосов
/ 11 ноября 2008

Обратите внимание, что функции наподобие filesize () кешируют свои результаты, попробуйте добавить вызов clearstatcache () выше 'print filesize (...);'. Вот пример:

$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 голосов
/ 29 мая 2012

Ну, у меня та же проблема. curl должен быть синхронным, но, в зависимости от того, как вы его используете, он не синхронный.
Если вы позвоните, после скручивания, печати или эха, содержимое теряет силу. Там странная задержка. Но я попробую этот подход -

print_r(curls_getinfo($CR));

Выполнение всего за один шаг может решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...