الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم تحميل ملف من على FTP Server

بدأه امجد مختار في 11 أغسطس 2010 · 17 رد · 1,043 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كل عام وأنتم بخير

رجاء كيف يتم عمل تحميل ملف من على FTP Server وهو باسم مستخدم وكلمة مرور انا جربت الكود التالى

$ftp_server = "11.22.33.44";
$conn = ftp_connect($ftp_server,21,15) or die("<center><font color=red><h4><b>Couldn't Connect to Server</b></h4><font></center>"); 
ftp_login($conn,"user","123");
ftp_pasv($conn,TRUE);
ftp_get($conn,$mname,"/$cat/$mname",FTP_ASCII);
ftp_close($conn);

المشكلة أن الملف يتم تحميله فى السيرفر وليس على جهاز العميل كما ان السكريبت لا يخرج نافذة

open - save

ليختار العميل مكان حفظ الملف

شكراً

تم تعديل هذه المشاركة بواسطة امجد مختار في 11 أغسطس 2010 في 23:38

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#2

وعليكم السلام ورحمة الله وبركاته

أخي الكريم

ما هي قيمة المتحول mname في الكود الخاص بك

نافذة Save file تظهر بمساعدة header function

كهذه مثلا :

header("Cache-Control: public");
 	header("Content-Description: File Transfer");
 	header("Content-Disposition: attachment; filename=$file");
 	header("Content-Type: $type");
 	header("Content-Transfer-Encoding: binary");

ولكن لم اجربها مع التحميل بواسطة ftp قبلاً

Everything will be fine when we TALK LESS, DO MORE


#3

قيمة المتغير

$mname = "file.ppt"
$cat = "computer"

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#4

أخي الكود الذي تضعه يقوم بتحميل الملف من المجلد Computer إلى المجلد الموجود فيه صفحة كود التحميل و ليس إلى جهاز العميل

أي حتى يتم التحميل إلى جهاز العميل يجب أن تكون صفحة كود التحميل موجودة على جهاز العميل

لماذا تستخدم توابع الـ FTP للتحميل لما لا تقوم بتحميل الملف بالطريقة العادية

هل المجلد Computer محمي ضد التحميل إلا من خلال الـ FTP

للتحميل المباشر استخدم الكود التالي :


header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: $type");
header("Content-Transfer-Encoding: binary");
readfile($file);

ضع مسار الملف مع اسمه في المتحول file و نوعه في المتحول type

إذا كان المجلد Computer محمي ضد التحميل إلا من خلال الـ FTP

فيمكنك نقل الملف إلى مجلد آخر غير محمي عن طريق كود الـ FTP الذي قمت بوضعه أنت

وبعد أن يتم النقل تضع كود التحميل السابق

أي كالتالي مثلاً :


$ftp_server = "11.22.33.44";
$conn = ftp_connect($ftp_server,21,15) or die("<center><font color=red><h4><b>Couldn't Connect to Server</b></h4><font></center>");
ftp_login($conn,"user","123");
ftp_pasv($conn,TRUE);
if(ftp_get($conn,$mname,"/$cat/$mname",FTP_ASCII)) {
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: $type");
header("Content-Transfer-Encoding: binary");
readfile($file);
}
ftp_close($conn);

طبعا في المتحول file نضع المسار الجديد للملف

بتوفيق الله ..

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 13 أغسطس 2010 في 00:09

Everything will be fine when we TALK LESS, DO MORE


#5

يمكنك أن تضع الرابط مباشرة، مثلا

<a href="ftp://username:password@hostname/file_to_download">download</a>

طبعا استخدم إسم مستخدم لديه حق القراءة فقط

أو يمكنك استخدام الطريقة التالية، مقتبسة من مثال في توثيق ftp_fget

<?php
	header("Content-Type: application/pdf");	//نحدد نوع الملف على أنه pdf
	header("Content-Disposition: attachment; filename=streching.pdf");	//هذا السطر لإجبار المتصفح على إظهار نافذة save as
	$conn = ftp_connect("127.0.0.1", 21);	
	ftp_login($conn, "issam", "4c3der-10");
	$tempHandle = fopen('php://temp', 'r+'); 	ننشئ temporary stream

	ftp_fget($conn, $tempHandle, "streching.pdf", FTP_BINARY, 0);	//نحمل الملف من الخادم ftp ونرسله إلى ال temporary stream
	rewind($tempHandle);	//نعيد ال cursor إلى البداية
	echo stream_get_contents($tempHandle);	//نسترجع محتوى الملف ثم نكتبه
?>
#6

شكرا لكم جميعا

بالنسبة للزميل MoHaMMaD Pro:

أولاً:

انا اقوم بالتحميل من على سيرفر خارجى اى انه ليس على نفس السيرفر الذى عليه صفحة التحميل

ثانياً:

إذا قمت بنقل الملف إلى سيرفر الـ FTP إلى السيرفر الذى عليه صفحة التحميل ثم بعد ذلك اقوم بتحميله للعميل فذلك يقوم باخذ وقت اطول حيث يكون تحميل الملف مرتين وايضا ياخذ مساحة على سيرفر صفحة التحميل التى لست محتاجا الى الملف لدى لوكنى فقط احتاج اتاحة تحميله للعملاء

بالنسبة للزميل herch:

أولاً :

سطر الرابط المباشر يعمل جيدا ولكن يظهر اسم المستخدم للعميل وعدد حروف كلمة السر وبالتالى اصبح لديه معرفة ببيانات الدخول لسيرفر FTP التى من المفترض ان تكون سرية لضمان الحماية والامان للسيرفر

ثانياً:

الطريقة الثانية لا تعمل وتفتح الملف مباشرة وهو تالف

ارجو الافادة

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#7

ممكن تضع الكود الذي استعملته؟

#8
header ("location:ftp:/user:123@11.22.33.44/languages/file.ppt");

أو

$ftp_server = "11.22.33.44";
$conn = ftp_connect($ftp_server,21,15) or die("<center><font color=red><h4><b>Couldn't Connect to Server</b></h4><font></center>"); 
ftp_login($conn,"user","123");
header("Content-Type: application/ppt");
header("Content-Disposition: attachment; filename='file.ppt'");
$tempHandle = fopen('php://temp', 'r+');
ftp_fget($conn, $tempHandle, "file.ppt", FTP_BINARY, 0);
rewind($tempHandle);
echo stream_get_contents($tempHandle);

تم تعديل هذه المشاركة بواسطة امجد مختار في 13 أغسطس 2010 في 16:47

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#9

أولا، ال mime-type الخاص بالملفات ppt هو application/vnd.ms-powerpoint وليس application/ppt. لائحة لبعض ال mimetypes

ثانيا، لا داعي لإضافة ال quotes حول إسم الملف في هذا السطر

header("Content-Disposition: attachment; filename='file.ppt'");

هذا الكود يعمل عندي، حيث يفتح نافذة save as، ويخزن الملف كاملا وليس تالفا

<?php	
	$ftp_server = "127.0.0.1";
	$conn = ftp_connect($ftp_server,21,15) or die("<center><font color=red><h4><b>Couldn't Connect to Server</b></h4><font></center>"); 
	ftp_login($conn,"issam","987132");
	header("Content-Type: application/vnd.ms-powerpoint");
	header("Content-Disposition: attachment; filename=file.ppt");
	$tempHandle = fopen('php://temp', 'r+');
	ftp_fget($conn, $tempHandle, "file.ppt", FTP_BINARY, 0);
	rewind($tempHandle);
	echo stream_get_contents($tempHandle);
?>

تم تعديل هذه المشاركة بواسطة herch في 13 أغسطس 2010 في 22:01

1
#10

للاسف لا يعمل، ولا اعرف السبب

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#11

طيب ما هو المشكل، هل تظهر رسالة خطأ؟ ولو ممكن أرفق الكود

هل أنت متأكد أن الملف موجود في الخادم ftp؟

#12

المشكلة أنه يفتح ملف تالف ولا يظهر نافذة Save As والملف موجود بالخادم FTP بدليل أنه يعمل بطريقة سليمة بواسطة هذا السطر

header ("location:ftp:/user:123@11.22.33.44/languages/file.ppt");

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#13

أرفق الكود!!!

جربت الكود الموجود في ردي السابق في جهازين مختلفين، مع خادمين مختلفين، وهو يعمل بشكل جيد في الجهازين.

1
#14
material.php

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#15

آسف، لا أدري ما المشكل.

الكود الذي أرفقته يعمل بشكل جيد، على الأقل الجزء الموجود في الدالة makedownload

#16

يمكن لا يعمل لانه لا يوجد لدى مجلد بهذا الاسم

php://temp

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#17

php://temp ليست مسار مجلد ما، لكن يمكن اعتبارها مؤشرا ل stream خاص بالنسبة للبيانات المؤقتة. ألق نظرة على هذا الرابط لشرح أكثر

ما هي نسخة php التي تستعمل؟؟

تم تعديل هذه المشاركة بواسطة herch في 19 أغسطس 2010 في 23:04

#18

The AppServ Open Project - 2.5.10 for Windows

Apache Web Server Version 2.2.8

PHP Script Language Version 5.2.6

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…