PDA

View Full Version : سوال: مشکل در اسکریپت upload فایل از طریق url فایل



Jason.Bourne
یک شنبه 05 آبان 1387, 22:15 عصر
با نوشت کد زیر سعی کردم که با دادن url یک فایل به این اسکریپت آن فایل را از سروری به سرور دیگر کپی کنم.


<?php
@ini_set ( 'memory_limit', '128M' );

$readf = fopen($_POST["url"], "r");
$writef = fopen($_POST["path"] . basename($_POST["url"]), "w");
while(!feof($readf)) fwrite($writef, fread($readf, 4096), 4096);

fclose($readf);
fclose($writef);
?>در انجام کار مشکلی وجود دارد. در واقع فایل به درستی کپی می شود اما در نهایت در مرورگر پیام زیر نمایش داده می شود.

http://i33.tinypic.com/121de92.jpg

love4php
چهارشنبه 08 آبان 1387, 01:08 صبح
از curl استفاده کن

Jason.Bourne
پنج شنبه 09 آبان 1387, 17:52 عصر
از curl هم استفاده کردم و همین مشکل را با curl هم داشتم.
کد زیر را ببینید لطفا.


<?php
$ch = curl_init();
$ofh = fopen($outputFile, 'wb');
if (!$ofh) {
fclose($ch);
return 'Unable to open output file in writing mode';
}

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FILE, $ofh);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_exec($ch);

$errorString = curl_error($ch);
$errorNumber = curl_errno($ch);
curl_close($ch);

if ($errorNumber != 0) {
if (!empty($errorString)) {
return $errorString;
} else {
return 'CURL download failed';
}
}
?>متذکر میشم که فایلهایی که حجم کمی دارند (حدودا 10 مگابایت ) به درستی منتقل می شوند و مشکلی وجود ندارد. اما در مورد فایلهایی که حجم بیشتری دارند ( مثلا 15 - 20 مگابایت ) باید بگم که فایل به درستی کپی می شود اما اسکریپت به درستی خاتمه پیدا نمی کند و با اینکه فایل به سرور دوم منتقل شده ، اما بعد از مدتی اون صفحه خطا ظاهر می شود.

ali_sed
شنبه 11 آبان 1387, 13:15 عصر
مدت زمان اجرای یک اسکریپت بصورت پیش فرض 60 ثانیه هست احتمال داره که با گسترش این زمان مشکلت حل بشه.

البته مشکل اول که واضح هست چون شما چیزی برای نمایش به مرورگر ارسال نکردید این پیام نمایش داده می شود. در انتهای برنامه در صورتی که فایل بصورت کامل دانلود شده پیام مناسبی را به مرورگر ارسلا کن.

vahid4134
شنبه 11 آبان 1387, 17:16 عصر
مدت زمان اجرای یک اسکریپت بصورت پیش فرض 60 ثانیه هست احتمال داره که با گسترش این زمان مشکلت حل بشه.

البته مشکل اول که واضح هست چون شما چیزی برای نمایش به مرورگر ارسال نکردید این پیام نمایش داده می شود. در انتهای برنامه در صورتی که فایل بصورت کامل دانلود شده پیام مناسبی را به مرورگر ارسلا کن.
30 ثانیه هست

Jason.Bourne
شنبه 11 آبان 1387, 22:37 عصر
البته مشکل اول که واضح هست چون شما چیزی برای نمایش به مرورگر ارسال نکردید این پیام نمایش داده می شود. در انتهای برنامه در صورتی که فایل بصورت کامل دانلود شده پیام مناسبی را به مرورگر ارسلا کن.

در اسکریپت اصلی بعد از اینکه فایل کاملا دانلود شد، پیامی به کاربر نشان داده می شود. اما باز هم اون پیغان نمایش داده می شود.