2016-06-09 154 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。它更有意義這種方式反正