الدالة file_get_contents

لسحب محتوى أي صفحة انترنت أو ملف و وضعها في متغير .الدالة تعادل الدالةfile مع فارق أن الثانية تقرأ الملف إلى متسلسلة array أما دالتنا تقرأ المحتوى إلى متغير من نوع نصي  string و حسب وثائق  php  فالدالة file_get_conetnets هي المفضلة لانها تستخدم تقنية تحافظ على الذاكرة .
في الأحوال العادية علينا فقط استدعاء الدالة مع العنوان الذي نريد مثلا
1
$page=file_get_contents('http://thepage.com');
و سيظهر محتوى الصفحة في المتغير page  . حيث عنوان الصفحة هو http://thepage.com  مع مراعاة أن كان عنوان الصفحة يحتوي على فراغات أو اي حروف خاصة يجب استخدام الدالة urlencode على العنوان قبل استخدام الدالة . مثلا :
1
2
$url =urlencode ('http://thepage.com');
$page=file_get_contents($url);

استخلاص النتائج

و الآن بعد ان حصلنا على محتوى الصفحة كاملا قد نريد فقط جزء من الصفحة مثلا الجزء الذي يحتوي على الاخبار أو على الارقام التي أريد .
مثلا لو أننا استخدمنا الدالة السابقة لعرض من يتبع أو ما اتبع على تويتر  ( هناك طرق أفضل للقيام بذلك لكن دعنا نقوم بذلك كمثال).
t01
1
2
3
4
5
// تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة
//$url =urlencode ('http://twitter.com/fatma_qatar');
//استخلاص الصفحة كاملة
$page=file_get_contents($url);
لكننا لا نريد أن نعرض الصفحة كاملة فقط العداد الذي يعرض المتابعين لي و بالتالي نريد دالة تستخلص هذه المنطقة فقط .علينا أولا ان نستعرض شفرة الصفحة على تويتر و قد وجدت أن العداد يعرض بين الوسم
1
2
3
4
5
<div class="stats">
 
و
 
</div>
t02
وجدت خلال بحثي هذه الدالة
1
2
3
4
5
function findit($mytext,$starttag,$endtag) {
 $posLeft  = stripos($mytext,$starttag)+strlen($starttag);
 $posRight = stripos($mytext,$endtag,$posLeft+1);
 return  substr($mytext,$posLeft,$posRight-$posLeft);
}
وهي دالة وجدتها منذ بضع سنوات و اجريت عليها تعديلات طفيفة و أنا استخدمها بنجاح منذ زمن . الدالة تطلب ٣ متغيرات الاول هو النص و هو في حالتنا الصفحة و الثاني الوسم الأول و الاخير الوسم الثاني .

الشفرة النهائية

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// الدالة التي ستظهر ستستخلص لنا الجزء المطلوب
 
function findit($mytext,$starttag,$endtag) {
 $posLeft  = stripos($mytext,$starttag)+strlen($starttag);
 $posRight = stripos($mytext,$endtag,$posLeft+1);
 return  substr($mytext,$posLeft,$posRight-$posLeft);
}
// العنوان
// تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة
//$url =urlencode ('http://twitter.com/fatma_qatar');
//استخلاص الصفحة كاملة
$page=file_get_contents($url);
// استخلاص الجزء المطلوب.
$result= findit($page,'<div>','</div>');
//طباعة النتيجة.
echo $result;
في البداية استخلصنا الصفحة بواسطة file_get_contents  ثم استخدامنا الدالة findit
1
<span>$result= findit($page,'<div>','</div>');
و في النهاية طبعنا النتائج ..