PHP curl从URL下载空文件

dfuffjeb  于 2024-01-08  发布在  PHP
关注(0)|答案(2)|浏览(215)

有一个下载网页内容的代码示例。
问题:一个零长度的文件总是出现在硬盘上。
我相信这段代码在很多情况下都能工作,但我很想知道如何在我的情况下修复它。

<?php

$url = 'https://wtfismyip.com/text';
$destFile = 'experiment.tmp';

$fp = fopen($destFile, 'w+b');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FILE, $fp); // write curl response to file
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);

字符串
我尝试了不同的网址,但没有运气。另一种方法,通过fopen + fread,工作正常。

  • Windows 7
  • PHP 7.1.0(编译:Dec 2 2016 05:24:57)(ZTS MSVC 14(Visual C++ 2015)x64)
  • php example.php的形式执行
r6hnlfcb

r6hnlfcb1#

你的代码没有任何问题,它在这里工作得很好,但是在任何地方都没有错误检查,你可能会在某个地方得到一些错误。

<?php
declare(strict_types=1);
error_reporting(E_ALL);
ini_set('display_errors','1');
$url = 'https://wtfismyip.com/text';
$destFile = 'experiment.tmp';

$fp =fopen($destFile, 'w+b');
if (false === $fp) {
    throw new RuntimeException ( 'fopen() failed.   last error: ' . return_var_dump ( error_get_last () ) );
}
$ch = curl_init();
if (false === $ch) {
    throw new RuntimeException ( 'curl_init() failed.   last error: ' . return_var_dump ( error_get_last () ) );
}

ecurl_setopt($ch, CURLOPT_URL,$url);
ecurl_setopt($ch, CURLOPT_FILE, $fp); // write curl response to file
ecurl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
ecurl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
ecurl_setopt($ch, CURLOPT_VERBOSE, true);
ecurl_setopt($ch, CURLOPT_STDERR, $fp);
ecurl_exec($ch);
curl_close($ch);
fclose($fp);


function ecurl_setopt ( /*resource*/$ch , int $option , /*mixed*/ $value ):bool{
    $ret=curl_setopt($ch,$option,$value);
    if($ret!==true){
        //option should be obvious by stack trace
        throw new RuntimeException ( 'curl_setopt() failed. curl_errno: ' . return_var_dump ( curl_errno ($ch) ).'. curl_error: '.curl_error($ch) );
    }
    return true;
}
function ecurl_exec ( /*resource*/$ch)/*:mixed depending on CURLOPT_RETURNTRANSFER*/{
    $ret=curl_exec($ch);
    if($ret===false){
        throw new RuntimeException ( 'curl_exec() failed. curl_errno: ' . return_var_dump ( curl_errno ($ch) ).'. curl_error: '.curl_error($ch) );
    }
    return $ret;
}

function return_var_dump(/*...*/){
    $args = func_get_args ();
    ob_start ();
    call_user_func_array ( 'var_dump', $args );
    return ob_get_clean ();
}

字符串

pepwfjgg

pepwfjgg2#

当尝试从HTTPS服务器复制文件时,经常会发生这种情况。尝试跳过证书验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

字符串

相关问题