无法使用PHP从远程服务器保存图像

时间:2016-04-22 08:08:28

标签: php

好的,......这是参考:Copy Image from Remote Server Over HTTP

这是我的代码:

for ($i = 0; $i < count($json_post['Category']); ++$i )
{
    echo $json_post['Category'][$i]['CategoryID'] . '<br />';
    echo $json_post['Category'][$i]['Name'] . '<br />';
    echo $json_post['Category'][$i]['Image'] . '<br />';
    $image_URL = "https://$_SSActiveWear_BaseURL/" . $json_post['Category'][$i]['Image'];
    echo $image_URL . "<br /><br />";
    copy("https://$_SSActiveWear_BaseURL/$image_URL", $_SERVER['DOCUMENT_ROOT']."/tmp/" . basename($image_URL));
    die;
}

我尝试了同样结果的cURL。

正在发生的是文件正在创建,但文件长度为58k,当我尝试打开一个文件以查看它时,无法打开它。实际上它是我尝试从中保存图像的服务器的索引页面的HTML内容。

修改1 如果我硬编码要保存的图像而不是使用变量,它会保存正确的图像。

2 个答案:

答案 0 :(得分:1)

想出这个。

做了以下更改:

copy($image_URL, $_SERVER['DOCUMENT_ROOT']."/tmp/" . basename($image_URL));

我不明白为什么在使用单个变量时,就像在这种情况下,它可以工作,而不是在我使用复合语句时。

答案 1 :(得分:0)

这是因为您的网址被解释错误。始终在字符串中的变量周围使用{}

copy("https://$_SSActiveWear_BaseURL/$image_URL", $_SERVER['DOCUMENT_ROOT']."/tmp/" . basename($image_URL));

转换为copy("https://SSActiveWear_BaseUrl/_URL", ...)。如您所见,PHP找不到变量$_$image,并为它们应用null

正确的语法:

copy("https://{$_SSActiveWear_BaseURL}/{$image_URL}", "{$_SERVER['DOCUMENT_ROOT']}/tmp/".basename($image_URL));