لم أهتم كثيرًا بتحميل الملفات من قبل، لقد قمت بالأمس بإجراء بسيط ولكن وجدت أن هناك عددًا لا بأس به من المشكلات.
رمز البرنامج في البداية هو كما يلي:
تحميلimg.php
<?php
// تحديد ما إذا كانت واجهة تحميل أم واجهة تنفيذ. إذا كانت واجهة تحميل، فاعرض صفحة HTML التالية
إذا(!$_POST['UploadAction']):
?>
<html>
<الرأس>
<العنوان></العنوان>
</الرأس>
<الجسم><الجدول><المركز>
<form enctype = "multipart/form-data" name = "SubmitForm" action = "" أسلوب = "post">
<نوع الإدخال = "مخفي" اسم = "قيمة UploadAction" = "1">
<tr><td><input name="UploadFile" type="file" size="30"></td></tr>
<tr><td><input type="submit" name="submit" value="Upload"></td>
<td><input type="reset" name="reset" value="Reset"></td></tr>
</النموذج>
</center></table></body>
</html>
<?php
// إذا كانت صفحة تنفيذ، فاعرض صفحة HTML التالية وقم بتنشيط برنامج PHP النصي
آخر:
?>
<html>
<الرأس>
<العنوان></العنوان>
</الرأس>
<body>
<?php
//www.knowsky.com يقوم بتهيئة حالة UploadAction
$UploadAction=0;
$UploadFile=$_POST['UploadFile']
;
{
$UploadPath=$_SERVER['DOCUMENT_ROOT']."\";
if (!is_writeable($UploadPath))
{
echo "دليل UploadPath غير قابل للكتابة!";
}
آخر
{
echo "دليل $UploadPath قابل للكتابة!";
}
$FileName=$UploadFile_name
if($UploadFile_size<1024)
{
$FileSize=(string)$UploadFile_size."byte";
}
elseif($UploadFile_size<(1024*1024))
{
$FileSize=number_format((double)($UploadFile_size/1024),1)."KB";
}
آخر
{
$FileSize=number_format((double)($UploadFile_size/(1024*1024))),1)."KB";
}
إذا (!file_exists($UploadPath.$FileName))
{
إذا (move_uploaded_file($UploadFile,$UploadPath.$FileName))
{
echo "تم تحميل الملف $UploadFile_name ($FileSize) بنجاح!";
}
آخر
{
صدى "فشل تحميل الملف $UploadFile_name ($FileSize)!";
}
unlink($UploadPath.$FileName);
}
آخر
{
echo "الملف $UploadFile_name موجود بالفعل!";
}
}
آخر
{
echo "لم تقم بتحديد أي ملف للتحميل، أو أن الملف الذي تم تحميله يتجاوز $MAX_FILE_SIZE!";
}
?>
<br><a href="uploadimg.php">إرجاع</a>
</الجسم>
</html>
<?php
endif
?>
بعد تشغيله، وجدت أن التحميل لم يكن له أي تأثير على الإطلاق، ولم أتمكن حتى من الدخول إلى صفحة التنفيذ. وبعد البحث والسؤال، علمت أن $_FILES مطلوب للحصول على الملف الذي تم تحميله،
لذلك قمت بإجراء بعض التغييرات:
$UploadFile=$_FILES['UploadFile']['tmp_name'];
$UploadFile_size=$_FILES['UploadFile']['size'];
$UploadFile_name=$_FILES['UploadFile']['name'];
$FileName=strtolower($UploadFile_name);
اعتقدت أنه سيتم الانتهاء من ذلك الآن، ولكن ظهرت رسالة خطأ:
تحذير: move_uploaded_file(F:Serverwww): فشل في فتح الدفق: تم رفض الإذن في F:Serverwwweooolfinishuploadimg.php على السطر 76
تحذير: move_uploaded_file(): غير قادر على نقل 'E:WINDOWSTEMPphp34.tmp' إلى 'F:\Server\www' في F:Serverwwweooolfinishuploadimg.php على السطر 76
فشل تحميل الملف ****(****بايت)!
وكنت أقوم بتصحيح الأخطاء في نظام WIN، لذلك لا ينبغي أن تكون هناك مشكلة في إذن الملف، لقد بحثت وبحثت وفكرت في الأمر، لكنني ما زلت لا أستطيع اكتشاف ذلك، لقد قمت بنشر رسائل على Lao Lao وJoy للحصول على المساعدة. لكنني لم أحصل على الإجابة الصحيحة. لقد استغرق تحميل ملف بسيط أكثر من يوم ولم أتمكن من إنجازه، الأمر الذي جعلني أشعر بالإحباط الشديد لأنني لم أتمكن من العثور على أخطاء مشابهة لأخطاءي على الإنترنت.
في النهاية، لم يكن لدي أي خيار سوى التفكير في سبب نجاحي في تحميل المرفقات عند تصحيح الأخطاء باستخدام sablog؟ لذلك نظرت بعناية في الكود الأصلي لتحميل المرفق إلى sablog، وقمت بإجراء التغييرات التالية بناءً على الكود:
وظيفة الحصول على الامتداد(اسم الملف$) {
return substr(strrchr($filename, "."), 1);
}
$extension=getextension($FileName);
if(move_uploaded_file($UploadFile,$UploadPath."temp.".$extension))
//unlink($UploadFile);
unlink($UploadPath."temp.".$extension);
تم استلام النتائج على الفور وتم التحميل بنجاح!
أستخدم unlink($UploadPath."temp.".$extension هنا لحذف الملفات التي تم تحميلها على المساحة على الفور وتوفير المساحة.