CURL - 本地vs网络服务器

时间:2016-06-09 09:52:12

标签: php curl

我有一个在本地运行良好的脚本,但是当我尝试在网络服务器上运行它时,它无法运行并且超出了时间限制。

我有一个数组中的类别列表,其键是其ID,值是名称。 Foreach类别我调用curl命令通过外部api获取所有产品。该CURL调用的设置如下:

foreach ($categories as $key => $value) {

        $url_get_products = "http://luceed.euromdenis.hr:8081/datasnap/rest/artikli/GrupaArtikla/".$key;
        $cp = curl_init();
        curl_setopt($cp, CURLOPT_URL, $url_get_products);
        curl_setopt($cp, CURLOPT_CONNECTTIMEOUT, 15);
        curl_setopt($cp, CURLOPT_TIMEOUT, 20);
        curl_setopt($cp, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($cp, CURLOPT_VERBOSE, TRUE);
        curl_setopt($cp, CURLOPT_ENCODING, '');
        curl_setopt($cp, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($cp, CURLOPT_USERPWD, $username . ':' . $password);
        curl_setopt($cp, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($cp, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($cp, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_error($cp);

        $product_result = curl_exec($cp);
        curl_close($cp);

        $data = json_decode($product_result, TRUE);

从那里使用$ data变量

所需的部分初始化数组
$arr_temp = $data['result'][0]['artikli'];

然后输入一个循环,我检查每个产品

for ($i = 0; $i < count($arr_temp); $i++) {

由于api数据库组织不良,因此没有产品图像,因此我必须使用其他网址来获取具有正确ID的图像。

图片网址看起来像这样:

random_url.com/slike/'.$product_id.'.jpg

所以我遍历该类别中的所有产品,并使用此功能检查给定网址是否存在图像

function isUrlExist($url) {
    $ch = curl_init($url);    
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($code == 200){
       $status = true;
    }else{
      $status = false;
    }
    curl_close($ch);
    return $status;
}

如果有图像,则将产品添加到稍后从中生成csv文件的阵列中。

本地图像检查是即时完成的,但当我在服务器端运行它需要永远,当我有50-60个类别来检查每个类别有几百个产品的位置时,很容易超出时间限制并且脚本停止

是否有任何解决方案,可能有一些卷曲选项?

P.S。这是我在回复curl_info

中的错误和数据时得到的信息
Failed to connect to web-domain-name.com port 80: Connection timed out<br/>

1 个答案:

答案 0 :(得分:0)

答案是外部服务器因为请求数量而禁止从中调用脚本的ip。解决方案是禁用后被解雇我只使用卷曲一次将所有图像放入文件中,然后检查网址是否有效而不是为每个产品调用curl。无论如何,它更有意义