PDA

View Full Version : سوال: خواندن یک فایل از وب توسط PHP !



BossMaster
سه شنبه 21 آبان 1387, 15:08 عصر
سلام.

من می خوام در داخل سورس های php ، محتویات یک صفحه از یک سایت دیگه رو لود یا به اصطلاح fetch کنم.

مثلا سایت من mysite.com هست و می خوام در php محتویات ali.com/page1.html رو بدست بیارم و در یک متغیر ذخیره کنم.

من از سروری استفاده می کنم که نمی دونم به چه دلیل ، اما به هر دلیل، دو تابع fopen() , file_get_contents() کار نمی کنند.
احتمالا پورت 80 ممکنه بسته باشه یا فایروال مانع اینکار بشه.


آیا راهی هست که بتونم این مشکل رو برطرف کنم ؟

از طریق ini_set یا htaccess. کاری نمی شه انجام داد ؟

تابع دیگه ای نیست که بشه باهاش محتویات یک صفحه خارج از سایت خودمون رو load کرد ؟

vahid4134
سه شنبه 21 آبان 1387, 15:16 عصر
ببینید curl دارید؟ اگر دارید از curl استفاده کنید اگر نه با سوکت کار کنید
http://ir.php.net/curl
http://ir.php.net/fsockopen

BossMaster
سه شنبه 28 آبان 1387, 20:32 عصر
ممنونم. curl کار می کنه.

امید امرایی
سه شنبه 28 آبان 1387, 23:07 عصر
function GetFileContent($URL){
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/"); // what you want or not
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch); // Getting file contents
curl_close($ch);
return $output;
}

BossMaster
سه شنبه 28 آبان 1387, 23:13 عصر
متشکرم. با راهنمایی دوستمون به جواب رسیدم و کدش رو داشتم.
سوالم اینه که این کتابخانه curl رو چطور میشه روی لوکال نصب کرد ؟
چون رو ی لوکال هایت ندارمش ...

امید امرایی
سه شنبه 28 آبان 1387, 23:15 عصر
اینجا می تونید دانلود کنید
http://curl.haxx.se/download.html

و مستنداتش رو در این آدرس می تونید ببینید
http://ir.php.net/curl

کاملا شرح داده شده

farzad_itc
چهارشنبه 08 اردیبهشت 1389, 20:17 عصر
سلام

بچه ها من بحث رو خوندم و اين كارها رو كرده بودم و نتيجه هم گرفتم.
فقط يه مشكل كوچيك دارم و اونم اينكه من ميخوام كدهاي html داخل اون رو بصورت جدا جدا دريافت كرده و به هر صورتي كه خودم مي خوام با استفاده از foreach يا هر تابعي كه شما مي دونيد نمايش بدم.

ممنون ميشم جواب بديد چون كه خيلي براي من حياتي هستش.

امیـرحسین
جمعه 10 اردیبهشت 1389, 12:05 عصر
خروجی رو می تونید توسط Regular Expression یا اگر استاندارد بود به عنوان XML پردازش کنید.

azade_r
جمعه 10 اردیبهشت 1389, 12:41 عصر
سلام
من کد زیر رو در PHP اجرا می کنم :
$Query5 = "select MAX(id) from users";
$Result5 = mysql_query( $Query5);
$count=$Result;
print ("$count);

اما خروجی من به صورت :
Resource id #3

در صورتی که وقتی همین کوئری رو در mysql اجرا می کنم ، خروجی من درست و به صورت :
3
چاپ می شه .
من در جای دیگه از برنامه ام به این عدد احتیاج دارم به همین دلیل می خوام به صورت درست چاپ بشه.
کسی می دونه دلیلش چیه؟
لطفا اگر جوابمو می دونید بهم بگید ،یعنی کسی جواب سوال منو نمی دونه ، تو سایت برنامه نویس در هر قسمتی که سوال مطرح می کنم کسی جوابمو نمی ده و به جاش یک سوال دیگه مطرح می کنه؟!


:متعجب::افسرده:

امیـرحسین
جمعه 10 اردیبهشت 1389, 12:59 عصر
شما باید از توابع fetch برای خوندن مقادیر Resource استفاده کنید. برنامه های MySQL مثل PhpMyAdmin و غیره این کار رو خودشون انجام میدند.
تابع mysql_fetch_assoc (http://ir.php.net/manual/en/function.mysql-fetch-assoc.php) یکی از توابع است.

azade_r
جمعه 10 اردیبهشت 1389, 13:22 عصر
ممنون از پاسختون
ولی وقتی کد زیر رو اجرا می کنم خروجی ندارم:

$Query3="select * from users where id ='select MAX(id) from users'";
$Result2 = mysql_query( $Query3 );

$User = mysql_fetch_object($Result2);

$count=$User->id;

print ("$User->id");

می خوام اطلاعات کاربری که id اون بزرگتر از همه است رو داشته باشم.
:متفکر:

farzad_itc
شنبه 11 اردیبهشت 1389, 13:59 عصر
آیا از دوستان کسی می تونه یه Regular expression برای بدست آوردن تگ های table ها و tr و td برای من بنویسه بیشتر از چهار روز علاف هستم و نتونستم کاری بکنم.

yasgig
شنبه 11 اردیبهشت 1389, 14:24 عصر
if(preg_match('/<table name="demo">(.*?)<\/table>/si' , $url , $Match ) )
{
echo $Match[0];
}
مثلا در این مثال هرچی بین <table name="demo"> و </table> باشه واست چاپ میکنه.$url هم سورس صفحه ای است که با curl می گیرین.

farzad_itc
شنبه 11 اردیبهشت 1389, 15:32 عصر
دستت درد نکنه
این رو می تونم انجام بدم ولی من می خوام تگ های <td> , <tr> داخل اون رو هم بدست بیارم و توی یه foreach اون هایی رو که نمی خوام حذف کنم و نمایش ندم و اون هایی رو که می خوام نمایش بدم. یعنی در حقیقت یه چیز ترکیبی بنویسم. مثل این

preg_match('/<table[^\>]+><tr[^\>]+>(.*?)<\/tr><\/table>/si' , $file , $Match

وبعدش هم تگ Match[0] رو داشته باشم و هم $Match[1] و بعدش یه سری مقایسه ها انجام بدم.

و اونهایی رو که نمی خوام حذفش کنم.

ممنون می شم راهنماییم کنید.