2016-06-09 155 views
0

我有一个脚本,在本地工作得很好,但是当我尝试在网络服务器上运行它时,它无法运行并超出了时间限制。CURL - 本地与网络服务器

我有一个数组中的类别列表,其中的键是他们的ID和值是名称。 Foreach类别我称之为curl命令,通过外部API获取所有产品。是卷曲通话的设置如下:

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数据库组织不良,因此没有产品的图像,因此我必须使用另一个url来获取带有正确标识的图像。

图片的URL看起来是这样的:

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

所以我遍历类别中的所有产品,并检查是否有与现有的给定的URL使用此功能

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文件的阵列中。

本地映像检查是instantaneouslly完成的,但是当我在服务器端运行它永远需要,当我有50-60个类别来检查每个类别有几百个产品的情侣时间限制很容易超过,脚本是停止。

有没有解决方案,也许有一些卷曲选项?

P.S.这是信息,我得到当我从curl_info

Failed to connect to web-domain-name.com port 80: Connection timed out<br/> 
+0

尝试添加在循环中:set_time_limit(300); – Mimouni

+0

嵌套循环内? –

+0

尝试之后:foreach($类别为$ key => $ value){set_time_limit(300); ......} – Mimouni

回答

0

答案是在外部服务器IP被禁止从它被调用,因为请求数的脚本呼应错误和数据。解决方案是,在禁令被解雇后,我只用一次curl将所有图像放入一个文件中,然后检查url是否有效,而不是为每个产品调用curl。它更有意义这种方式反正