После вашей помощи, много сообщений stackoverflow, решение находится внизу этого сообщения как ОБНОВЛЕНИЕ.Сохранить изображения с URL-адреса с переменной
Я пытаюсь сохранить некоторые изображения автоматически с помощью этого кода в PHP файле:
for ($num1=100;$num1<999;$num1++)
{
for ($num2=100;$num2<999;$num2++)
{
$postURL = "http://link_00000'.$num1.'_'.$num2.'.jpg";
$ch = curl_init('http://link_00000'.$num1.'_'.$num2.'.jpg');
$fp = fopen($postURL, '/path/Apolo/img/'.$num1.'_'.$num2.'.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
}
Первый вопрос:
$num1
и $num2
должна начинаться от 000 до 999, а не от 0 до 999. Помещение большего числа $num
переменных ($num3
, $num4
...) было бы решением, но я полагаю, что для ди мерзавцы.
Второй вопрос:
Изображения не сохраняются. Я попробовал этот, как хорошо, но это не сработало:
copy($postURL, '/path/img/'.$num1.'_'.$num2.'.jpg');
Третий вопрос:
Как я могу предотвратить действие, как d-дос атаки? Если я загружу ссылки без задержки, возможно, веб-сайт будет недоступен.
UPD:
for ($num1=000;$num1<999;$num1++)
{
for ($num2=000;$num2<999;$num2++)
{
$url = 'http://link.com/00000'.sprintf("%03d", $num1).'_'.sprintf("%03d", $num2).'.jpg';
echo ''.$num1.'_'.$num2.'';
echo "\n";
if (@getimagesize($url)) \\ checks if url-image exists
{
echo $url;
$ch = curl_init($url);
$fp = fopen('/path/Apolo/00000'.sprintf("%03d", $num1).'_'.sprintf("%03d", $num2).'.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
sleep(1); //1 second delay to avoid d-dos
}
}
}
Посмотрите на примеры того, как обращаться с циклом for: http://php.net/manual/en/control-structures.for.php – swidmann
Вы ошибочно связываете переменные в значении '$ postURL' , Попробуйте использовать одиночные кавычки как разделители строк, а не двойные. – D4V1D
Почему вы в конечном итоге использовали решение с большим количеством циклов и nums вместо того, чтобы просто использовать 'sprintf («% 03d », $ num1)', который автоматически добавляет ваши ведущие нули. – uruloke