1

在您的帮助下,许多 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 攻击这样的行为?如果我没有延迟加载链接,网站可能会关闭。


升级版:

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

1 回答 1

2

当你处理整数时,你不能说 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,这是值得的,而且他们的免费帐户对您来说已经足够了。

于 2015-12-04T10:13:56.287 回答