使用变量保存来自 url 的图像
Save images from url with variable
在你的帮助下,许多Whosebug posts,解决方案在这个post的底部作为更新。
我正在尝试使用此代码在 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);
}
}
First question :
$num1
和 $num2
应该从 000 到 999 而不是从 0 到 999。放置更多 $num
变量 ($num3
, $num4
。 ..) 将是一个解决方案,但我认为数字有更好的解决方案。
Second question :
图像未保存。我也试过这个,但没有用:
copy($postURL, '/path/img/'.$num1.'_'.$num2.'.jpg');
Third question :
如何防止像 d-dos 攻击这样的行为?如果我没有时间延迟地加载链接,网站可能会关闭。
更新:
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
}
}
}
当你处理整数时你不能说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 攻击,但如果您只是想让您的站点快速 运行 和 prevent/handle DDOS 攻击,那么将您的 DNS 更改为 cloudflare,这是值得的,并且他们的免费帐户对您来说已经足够了。
在你的帮助下,许多Whosebug posts,解决方案在这个post的底部作为更新。
我正在尝试使用此代码在 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);
}
}
First question :
$num1
和 $num2
应该从 000 到 999 而不是从 0 到 999。放置更多 $num
变量 ($num3
, $num4
。 ..) 将是一个解决方案,但我认为数字有更好的解决方案。
Second question :
图像未保存。我也试过这个,但没有用:
copy($postURL, '/path/img/'.$num1.'_'.$num2.'.jpg');
Third question :
如何防止像 d-dos 攻击这样的行为?如果我没有时间延迟地加载链接,网站可能会关闭。
更新:
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
}
}
}
当你处理整数时你不能说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 攻击,但如果您只是想让您的站点快速 运行 和 prevent/handle DDOS 攻击,那么将您的 DNS 更改为 cloudflare,这是值得的,并且他们的免费帐户对您来说已经足够了。