اذهب إلى المحتوى

السؤال

نشر

قمت بكتابة كود PHP التالي للحصول على كود HTML الخاص بالمواقع:

<?php

$page = file_get_contents('http://www.example.com/');
echo $page;

لكن المشكلة هي أن هذا الكود يقوم بإظهار الخطأ التالي إن لم يكن الموقع موجودًا (مثل تجربة رابط لا يعمل):

Warning: file_get_contents(http://www.not-exists-on-web.com): Failed to open stream

كيف أحل هذه المشكلة وأتأكد أنه تم تحميل البيانات بشكل سليم أم لا؟

Recommended Posts

  • 2
نشر

الدالة file_get_contents تقوم بإرجاع false إذا لم تتمكن من الحصول على أي محتوى من الرابط.

ويمكنك إستخدام معامل التحكم بالخطأ @ مع جملة if بالشكل التالي:

<?php

$page = @file_get_contents('http://www.not-exists-on-web.com');

if ($page !== False) {
  // تم تحميل الصفحة بشكل سليم
  echo $page;
} else {
  // فشلت عملية تحميل الصفحة
  echo "NOT loaded";
}

لمزيد من المعلومات عن هذه الدالة، يمكنك زيارة موسوعة حسوب (الدالة file_get_contents()‎ في PHP).

  • 1
نشر

يمكننا التأكد من توفر مسار ملف أو موقع ويب من خلال الدالة file_contents_exist ثم بعد أن تعيد قيمة true يمكننا تطبيق file_get_contents مباشرة

<?php

$file_path = 'https://academy.hsoub.com/';

if(file_contents_exist($file_path))
{
    $file = file_get_contents($file_path);
}

حيث أنه يمكننا برمجتها بالشكل:

<?php

// دالة تقبل عنوان الويب 
// رقم كود الاتصال المرغوب
// 200 يعني نجاح الاتصال

function file_contents_exist($url, $response_code = 200)
{
  // جلب الترويسة
    $headers = get_headers($url);

    if (substr($headers[0], 9, 3) == $response_code) // اقتطاع شيفرة رمز الرد
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

في حالات متقدمة إن أردت معرفة  HTTP response code أي معرفة تفاصيل عن الاتصال يمكننا استعمال الدالة get_http_response_code التي تعيد رمز الكود ثم تعامل معه كما تريد

<?php

// تعريف دالة لقراءة حالى الاتصال
function get_http_response_code($url) {
    $headers = get_headers($url);
  // اقتطاع رقم الحالة
    return substr($headers[0], 9, 3);
}
if(get_http_response_code('https://academy.hsoub.com/questions/') != "200"){
    echo "error";
}else{
    file_get_contents('https://academy.hsoub.com/questions/');
}

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...