PHP文件获取内容并卷曲引发http错误500内部服务器

PHP文件获取内容并卷曲引发http错误500内部服务器,php,curl,file-get-contents,Php,Curl,File Get Contents,我正在使用PHP类中的一个函数从URL数组中读取图像并将其写入本地计算机 如下所示: function ImageUpload($urls) { $image_urls = explode(',', $urls); foreach ($image_urls as $url) { $url = trim($url); $img_name = //something $source = file_get_contents($url); $handle

我正在使用PHP类中的一个函数从URL数组中读取图像并将其写入本地计算机

如下所示:

function ImageUpload($urls)
{
  $image_urls = explode(',', $urls);  
  foreach ($image_urls as $url)
  {
    $url = trim($url);
    $img_name = //something
    $source = file_get_contents($url);
    $handle = fopen($img_name, "w");
    fwrite($handle, $source);  
    fclose($handle);
  }
}
它成功地读取和写入了1或2个图像,但为读取第2或第3个图像而提升了
500个内部服务器。
Apache日志文件中没有任何重要内容。另外,我用下面的cURL语句替换
file\u get\u contents
命令,但结果是相同的(似乎
cURL
file\u get\u contents
多读取一个图像)


此外,问题仅限于从http URL读取,如果我在本地某处有图像,则读取和写入它们没有问题。

我对您的代码做了一些更改,希望有帮助:)

$opts=数组(
“http'=>数组(
'方法'=>“获取”,
“标题”=>“内容类型:文本/html;字符集=utf-8”
) 
);
$context=stream\u context\u create($opts);
$image_url=explode(“,”,$url);
foreach($image\u url作为$url){
$result=文件内容(trim($url),TRUE,$context);
如果($result==FALSE){
打印“此URL错误:.$URL.
”; 继续; } $handle=fopen($img_name,“a+”); fwrite($handle,$result); fclose($handle); }
我在循环中没有看到任何用于读取的处理程序,您的
$handle=fopen($img_name,“w”)
只用于书写,您还需要
$handle=fopen($img_name,“r”)用于阅读!因为您无法读取
fopen($img_name,“w”)的句柄(
fread()

补充答复:

您是否可以修改为(并查看是否有效):


500不是来自您试图读取的服务器吗?如果是这样,那么错误信息应该在该服务器的日志中,而不是在您的日志中。我没有访问目标服务器的权限。如果我一个接一个地阅读图像并在屏幕上回音,就不会有问题。但是当我尝试在一个循环中阅读所有答案时,会产生错误。我已经删除了这个问题的答案,因为我看到你已经发布了答案,然后删除了它。请取消删除答案,因为这是本资料的归属。谢谢(标记以便跟进)。你能给我一些URL让我试试吗?不,它不起作用。。。我可以一个接一个地读取文件,但问题出在一个循环中。@阿米尔:我已经更改了fopen($img_name,“w”);fopen($img_名称,“a+”);请再试一次,我已经修复了一个错误:)同时使用
w
r
读取二进制数据会损坏某些操作系统(著名的Windows)中的数据,为了Windows支持和提高可移植性,请添加
b
,如
wb
rb
$ch=curl_init();        
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,500);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
$source = curl_exec($ch);
curl_close($ch);
unset($ch);
$opts = array( 
        'http' => array( 
            'method'=>"GET", 
            'header'=>"Content-Type: text/html; charset=utf-8" 
        ) 
    );

$context = stream_context_create($opts); 
$image_urls = explode(',', $urls);  
foreach ($image_urls as $url) {
    $result = file_get_contents(trim($url),TRUE,$context);
    if($result === FALSE) {
        print "Error with this URL : " . $url . "<br />";
        continue; 
    }
    $handle = fopen($img_name, "a+");
    fwrite($handle, $result);  
    fclose($handle);
}
.........
$img_name = //something
$context = stream_context_create($image_urls );
$source= file_get_contents(  $url ,false,$context);
.....
.....