PDA

View Full Version : خطای Internal Server هنگام استفاده از file_get_contents



sajad dp
یک شنبه 10 خرداد 1394, 18:25 عصر
سلام
یک قطعه کد نوشتم روی لوکال کار میکنه ولی روی هاست که اجرا میکنم خطای Internal Server Error میده ):

این کد هست:

include_once('simple_html_dom.php');
for ($i=1;$i<=500000;$i++){ /*3651800527*/
$url = 'http://mysite.com/post:'.$i;
$file_headers = @get_headers($url);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
if($exists){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
$str = curl_exec($curl);
curl_close($curl);

$txt= str_get_html($str);
foreach($txt->find('div[id=vposttext]') as $article) {
file_put_contents('w/'.$i.'.txt' , $article->plaintext);
break;
}
$txt->clear();
}
}
echo 'Finish!';

همون طور که مشخص هست در کد از یک کلاس استفاده کردم که از این لینک میشه دانلودش کرد: http://sourceforge.net/projects/simplehtmldom/

البته چک کردن کلاس ضروری نیست چون خودم ک کلاس رو چک کردم مشکل از file_get_contents که داخل کلاس استفاده شده!

reza_alie
یک شنبه 10 خرداد 1394, 19:50 عصر
سلام می تونی به سایت ها یک سری بزنی
http://stackoverflow.com/questions/28344220/php-http-1-1-500-internal-server-error-on-file-get-contents

sajad dp
یک شنبه 10 خرداد 1394, 20:12 عصر
ممنون از پاسختون (:
این چند روز در stackoverflow و سایت های مشابه زیاد جستجو کردم در کد هم تغییرات زیادی برحسب لینک ها اعمال کردم ولی متاسفانه تا الان هیچ کدوم جواب نداده ):

Unique
دوشنبه 11 خرداد 1394, 02:35 صبح
شما هیچ حا file_get_contents ندارین که میگین مشکل از اونه ،‌اگه منظورتون file_put_contents هست که احتمالا دارین اشتباه میکنید اما میتونید از fopen و fwrite استفاده کنید و ببینید همون خطا را میگیرین یا نه. اما به نظرم مشکل از اون نیست و باید trace کنین (خط به خط بررسی کنید) کدتون را.

sajad dp
دوشنبه 11 خرداد 1394, 08:16 صبح
ممنون، ممکنه از تنظیمات php سرور باشه؟

sajad dp
دوشنبه 11 خرداد 1394, 15:49 عصر
بخش ذخیره فایل رو با fwrite و fopen نوشتم باز هم خطای قبلی رخ داد.


if($exists){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 100000000000000);
$str = curl_exec($curl);
curl_close($curl);

$txt= str_get_html($str);
foreach($txt->find('div[id=vposttext]') as $article) {
//file_put_contents('w/'.$i.'.txt' , $article->plaintext);
$file = fopen('w/'.$i.'.txt',"w");
echo fwrite($file,$article->plaintext);
fclose($file);
break;
}
$txt->clear();
}

Unique
سه شنبه 12 خرداد 1394, 02:22 صبح
دوست عزیز خطای Internal Server Error خیلی خطای کلی هست و عموما مربوط به وب سرور هستش ،‌شما باید log های وب سرور (برای شما آپاچی احتمالا) را بررسی کنید تا بفهمین دقیقا مشکل چیه یا خط به خط بررسی کنی ببینی کجا خطا میده.

us1234
سه شنبه 12 خرداد 1394, 10:37 صبح
پیشنهاد میکنم برای Trace بخش ذخیره و بخش گرفتن اطلاعات را جدا کنید و اول بخش گرفتن را چک کنید اگر مشکل نداشت بعد ذخیره را بنویسید .

ولی حدسی که خودم میزنم شاید بخاطر « false » بودن مقدار allow_url_fopen باشد . ( البته بازم باید با CURL جواب بده ! )

m.esmaeilzadeh
سه شنبه 12 خرداد 1394, 13:33 عصر
اول یک phpinfo بگیر ببین چه خبره تو تنظیمات , بعد برو سراغ خطا یابی !!!
بعد اینکه فایل داخل پروژه خودت رو میگیری ؟ یا فایل خارجی هستش ؟
بعضی مواقع که سرورهای مقابل agent های غیر کاربر رو بلاک میکنن از این خطاها زیاد میگیری ...

sajad dp
سه شنبه 12 خرداد 1394, 19:22 عصر
دوست عزیز خطای Internal Server Error خیلی خطای کلی هست و عموما مربوط به وب سرور هستش ،‌شما باید log های وب سرور (برای شما آپاچی احتمالا) را بررسی کنید تا بفهمین دقیقا مشکل چیه یا خط به خط بررسی کنی ببینی کجا خطا میده.
ممنون، این بار ک تست گرفتم همزمان لاگ ها رو چک میکنم.

پیشنهاد میکنم برای Trace بخش ذخیره و بخش گرفتن اطلاعات را جدا کنید و اول بخش گرفتن را چک کنید اگر مشکل نداشت بعد ذخیره را بنویسید .

ولی حدسی که خودم میزنم شاید بخاطر « false » بودن مقدار allow_url_fopen باشد . ( البته بازم باید با CURL جواب بده ! )
هر دوتا رو جدا جدا تست گرفتم درست هستن ولی باهم گیر میکنه :دی
allow_url_fopen هم true هست البته همون طور که گفتید باز با curl باید جواب میداد!


اول یک phpinfo بگیر ببین چه خبره تو تنظیمات , بعد برو سراغ خطا یابی !!!
بعد اینکه فایل داخل پروژه خودت رو میگیری ؟ یا فایل خارجی هستش ؟
بعضی مواقع که سرورهای مقابل agent های غیر کاربر رو بلاک میکنن از این خطاها زیاد میگیری ...
فایل خارجی هست، این احتمال میگید باهاتون موافقم اما اگر سرور مقصد بلاک میکنه چرا با رفرش صفحه دوباره عملیات شروع میشه؟

m.esmaeilzadeh
چهارشنبه 13 خرداد 1394, 13:30 عصر
فایل خارجی هست، این احتمال میگید باهاتون موافقم اما اگر سرور مقصد بلاک میکنه چرا با رفرش صفحه دوباره عملیات شروع میشه؟
عملیات چی شروع میشه ؟
شاید چون سرور شما مقدار timeout برای به آخر رسیدن روند اجراش زیاده تا آخر این زمان مدام فکر میکنه !!!
چون وقتی بلاک میکنه سریع برنامه شما به اتمام نمیرسه و مدام فکر میکنه و سرور پردازش داره ....
تو جستجو گرهای خبری و بولتن سازها زیاد سر این موضوع به مشکل خورده بودم که رفع شدن !!!

sajad dp
چهارشنبه 13 خرداد 1394, 13:34 عصر
همین عملیات موجود در کد پست اول!