我已经尝试过搜索这个问题,但无法找出实际上在随机阶段失败的原因。
我有一个包含2列,ID和URL的CSV,有100行。我有以下代码来遍历CSV行,并使用put_file_contents()将URL上的数据下载到名为[ID] .jpg的文件中。
我也在每次循环中向屏幕输出数据并向" log.txt"添加一行。出于某种原因,它只是在随机URL之后停止工作,并且没有在error_log中放置任何内容。
有时它会在17个网址之后,有时是在27之后,有时是在49之后。我对它失败的原因感到茫然。
<?php
set_time_limit(3600);
$data = array_map('str_getcsv', file('IDtoImageURL2.csv'));
$total = 0;
echo "Count total: ".count($data)."<br /><br />";
for($i = 1; $i < count($data); $i++)
{
file_put_contents("log.txt", $data[$i][1]." - ", FILE_APPEND | LOCK_EX);
$total++;
$url = $data[$i][1];
$img = "photos/".$data[$i][0].'.jpg';
$img2 = "photos/named/".$data[$i][0].'.jpg';
echo "<b>Getting ".$data[$i][0].":</b><br />";
echo "URL: ".$data[$i][1]."<br />";
echo "putting $img<br />";
echo "putting $img2<br />";
$imgData = file_get_contents($url);
if($imgData)
{
file_put_contents($img, $imgData);
file_put_contents($img2, $imgData);
echo "<b>Done</b><br /><br />";
file_put_contents("log.txt", "done".PHP_EOL, FILE_APPEND | LOCK_EX);
}
else
{
echo "<b>Failed</b><br /><br />";
file_put_contents("log.txt", "failed".PHP_EOL, FILE_APPEND | LOCK_EX);
}
}
echo "Total: ".$total;
?>
Here is the CSV data that I'm working with.
奇怪的是,有时候它会将一些回声输出发布到屏幕上,有时它只会默默地出现空白的碎片错误。 URL以相同的顺序循环,因此我不理解为什么结果会保持不同。任何意见都将不胜感激。
感谢您的时间