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

مشكلة ظهور خطأ عند إستعمال الدالة file_get_content في PHP

Emad Saif

السؤال

قمت بكتابة كود 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...