Сохранить изображения из URL с переменной

После вашей помощи, много сообщений stackoverflow, решение находится в нижней части этого сообщения как ОБНОВЛЕНИЕ.

Я пытаюсь сохранить некоторые изображения автоматически, используя этот код в 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-dos? Если я загружу ссылки без задержки, возможно, сайт будет закрыт.


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
}
}
}

1

Решение

Когда вы имеете дело с целыми числами, вы не можете сказать 000, так как это равно 0, если вы хотите, чтобы оно написало 000, тогда вы должны использовать вместо этого строку.

В вашем примере вы перебираете числа, поэтому записывать их как строки было бы беспорядочно, если вы не хотите их зацикливать.
Поэтому лучшим решением было бы просто добавить первые 0, это можно сделать так:
sprintf("%03d", $num1);

Это автоматически добавит начальные нули, которые вы хотели.

ОБНОВЛЕНИЕ 1: (забыл ответить на сохраненное изображение)

Для сохранения изображений вы можете сделать это так:
file_put_contents('/path/Apolo/img/filename'.sprintf("%03d", $num1).'_'.sprintf("%03d", $num2).'.jpg', file_get_contents($postURL));

Обновление 2: (пример кода):

for ($num1=100;$num1<999;$num1++)
for ($num2=100;$num2<999;$num2++){
$postURL = 'http://link_00000'.sprintf("%03d", $num1).'_'.sprintf("%03d", $num2).'.jpg';
$path = '/path/Apolo/img/filename'.sprintf("%03d", $num1).'_'.sprintf("%03d", $num2).'.jpg';
file_put_contents($path, file_get_contents($postURL));
}

Вопрос 3:

Существует множество способов предотвратить DDOS-атаки, но если вы просто не хотите, чтобы ваш сайт работал быстро и предотвращал / обрабатывал DDOS-атаки, то измените DNS на cloudflare, это того стоит, и их бесплатной учетной записи более чем достаточно для вас.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]