سؤال

أنا أعمل على برنامج PHP النصي الذي يقوم باستدعاء API لموقع خارجي.ومع ذلك، إذا لم يكن هذا الموقع متاحًا أو انتهت مهلة الطلب، أود أن تُرجع وظيفتي خطأ.

لقد وجدت ما يلي، لكنني لست متأكدًا من كيفية تنفيذه على البرنامج النصي الخاص بي، حيث أنني أستخدم "file_get_contents" لاسترداد محتوى استدعاء الملف الخارجي.

تحديد وقت تنفيذ وظيفة أو أمر PHP

   $fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo 'Connection timed out!';
    } else {
        echo $res;
    }

}

(من: http://php.net/manual/en/function.stream-set-timeout.php)

كيف يمكنك معالجة مثل هذه القضية؟شكرًا!

هل كانت مفيدة؟

المحلول

<?php
$fp = fsockopen("www.example.com", 80);

if (!$fp) {
    echo "Unable to open\n";
} else {
    stream_set_timeout($fp, 2); // STREAM RESOURCE, NUMBER OF SECONDS TILL TIMEOUT
    // GET YOUR FILE CONTENTS
}
?>

نصائح أخرى

أوصي باستخدام لفة عائلة وظائف PHP.يمكنك بعد ذلك ضبط المهلة باستخدام curl_setopt():

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2); // two second timeout

سيؤدي هذا إلى curl_exec() دالة لإرجاع FALSE بعد انتهاء المهلة.

بشكل عام، يعد استخدام cURL أفضل من أي من وظائف قراءة الملفات؛فهو أكثر موثوقية، ولديه المزيد من الخيارات ولا يعتبر تهديدًا أمنيًا.يقوم العديد من مسؤولي النظام بتعطيل قراءة الملفات عن بعد، لذا فإن استخدام cURL سيجعل التعليمات البرمجية الخاصة بك أكثر سهولة في النقل وأكثر أمانًا.

من دليل PHP لـ File_Get_Contents (تعليقات):

<?php 
$ctx = stream_context_create(array( 
    'http' => array( 
        'timeout' => 1 
        ) 
    ) 
); 
file_get_contents("http://example.com/", 0, $ctx); 
?>
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 4);
if ($fp) {
    stream_set_timeout($fp, 2);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top