durur komut yürütme kıvırmak

5 Cevap php

my script uses curl to upload images to smugsmug site via smugsmug api. i loop through a folder and upload every image in there. but after 3-4 uploads, curl_exec would fail, stopped everything and prevent other images from uploading.

$upload_array = array(
    "method" => "smugmug.images.upload",
    "SessionID" => $session_id,
    "AlbumID" => $alb_id,
    "FileName" => zerofill($n, 3) . ".jpg",
    "Data" => base64_encode($data),
    "ByteCount" => strlen($data),
    "MD5Sum" => $data_md5);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $upload_array);
curl_setopt(
    $ch, CURLOPT_URL, 
    "https://upload.smugmug.com/services/api/rest/1.2.2/");
$upload_result = curl_exec($ch); //fails here
curl_close($ch);

updated: so i added logging into my script. when it does fail, the logging stops after fwrite($fh, "begin curl\n");

fwrite($fh, "begin curl\n");
$upload_result = curl_exec($ch);
fwrite($fh, "curl executed\n");
fwrite($fh, "curl info: ".print_r(curl_getinfo($ch,true))."\n");
fwrite($fh, "xml dump: $upload_result \n");
fwrite($fh, "curl error: ".curl_error($ch)."\n");

Ayrıca

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60*60);

5 Cevap

Sorun ne olduğundan emin değil ... başarısız yanıt nedir? Sistemi ve apache günlükleri ne diyorsun?

Şimdi ben size olsaydı ben döngüsünde curl_init() ve curl_close() kullanmak olmaz. yerine i döngü önce init olur ve yakın döngü sonra - o döngü içinde itsef i curl_set_opt url seti ve farklı parametreler ve sadece curl_exec() aramak için kullanabilirsiniz. Hatta sistemi limiti falan çeşit aşan tüm bu kolları onun meselesi olabilir. Eğer ihtiyacınız varsa / size curl_multi kullanmak veya birden kolları yönetmek için bazı yönetim fonksiyonları / sınıf yazabilirsiniz birden çok bağlantı kullanmak istiyorum.

Biz yardım etmeden önce daha fazla bilgiye ihtiyacınız olabilir, ama bu bir zaman aşımı sorunu olabilir gibi geliyor.

Hata raporlama açmak ya da bir şey yükseltilmiş olup olmadığını görmek için hata günlüklerini denetleyin.

CURLOPT_TIMEOUT ile uzun bir cURL zaman aşımı ayarını deneyin

Ayrıca komut dosyası zaman aşımı yeterli olduğunu kontrol veya set_time_limit() ile artış

CURL biri (örneğin görüntüleri yüklemek gibi) birden fazla yüksek gecikme istekleri ile uğraşırken zaman için 'çoklu' (çoklu-kaynaklar için) seçenekleri içerir.

See: http://www.php.net/manual/en/function.curl-multi-exec.php and the entire library of 'multi' functions described here: http://php.net/manual/en/book.curl.php

For a complete example of the multiple resource section of the library, see: http://www.developertutorials.com/blog/php/parallel-web-scraping-in-php-curl-multi-functions-375/

1 - Kuvvet Curl size ne yaptığını hakkında biraz daha fazla anlatmak için

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADER, true);

2 - Eğer güvenli modda değilseniz, emin PHP senaryonun başında bu koyarak hataları görüntüler olun:

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);

3 - Ayrıca CLI modunda komut çalıştırmayı deneyebilirsiniz.

4 - Eğer güvenli modda değilse Son olarak, yine de, siz) doğrudan kıvrılma ikili kullanarak exec (çalıştırmayı deneyebilirsiniz.

<?php

$curl_str = "curl -k -o /my/path/curl_output.log -d 'var1=".$value1."&var2=".$value2."& etc...' https://upload.smugmug.com/services/api/rest/1.2.2/";
$r = exec($curl_str);