PHP cURL下载的文件在一个外部链接上为0字节,而在另一个外部链接上工作

wbgh16ku  于 2022-11-13  发布在  PHP
关注(0)|答案(1)|浏览(152)

我尝试从第二台服务器下载一个文件/图像到我的第一台服务器上的一个文件夹中。我有以下代码:

$image = 'http://i1.au.reastatic.net/150x112/73fa6c02a92d60a76320d0e89dfbc1a36a6e46c818f74772dec65bae6959c62f/main.jpg';

$imageName = pathinfo( $image, PATHINFO_BASENAME );

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $image );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

$source = curl_exec( $ch );
curl_close( $ch );

file_put_contents( './content/' . $imageName, $source );

$out = preg_split('/(\r?\n){2}/', $source, 2);
    $headers = $out[0];
    $headersArray = preg_split('/\r?\n/', $headers);
    $headersArray = array_map(function($h) {
        return preg_split('/:\s{1,}/', $h, 2);
    }, $headersArray);

    $tmp = [];
    foreach($headersArray as $h) {
        $tmp[strtolower($h[0])] = isset($h[1]) ? $h[1] : $h[0];
    }
    print_r($tmp);

链接的url不是我的服务器的,但是工作正常,在我的第一个服务器上写了一个文件。但是当我使用我自己的第二个服务器链接时,例如https://example.com/demo1.png,它写了一个0字节的文件。
在注销标头时,不是我的服务器的外部链接会注销一个关于图像的许多项的数组,如“内容类型”和“内容长度”。在注销我的第二个服务器的图像的标头响应时,它会注销一个空数组。
我需要对脚本做什么调整?如果需要的话,我也可以在我的第二台服务器(?)上做一些调整。提前谢谢你。

vsmadaxz

vsmadaxz1#

感谢@RiggsFolly,我发现这个问题与SSL证书有关。这个问题似乎是在我的本地PC服务器上,可能不会在一个在线服务器上持续存在。我很快就会转移到一个在线服务器上,如果问题持续存在,我会根据需要更新这个答案。我会将这个答案标记为最佳答案,也希望让其他人知道这个问题是与SSL有关的,可以通过适当的措施进一步解决。SO也有许多关于提到的SSL问题的有用问题/答案。

相关问题