代码之家  ›  专栏  ›  技术社区  ›  Steven Noble

如何让php等待curl完成后再继续?

  •  1
  • Steven Noble  · 技术社区  · 16 年前

    如果我做类似的事情

    $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 回复  |  直到 16 年前
        1
  •  2
  •   too much php    16 年前

    请注意,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/clearstatacache

        2
  •  0
  •   S.L. Barth is on codidact.com Monika Restecka    12 年前

    嗯,我也有同样的问题。curl应该是同步的,但根据您的使用方式,它不是同步的。
    如果在curl、print或echo之后调用,则内容无效。有一个奇怪的延迟。 但我会尝试这种方法-

    print_r(curls_getinfo($CR));
    

    一步到位可能会解决问题。

    推荐文章