Php

التعامل مع الملفات في ال بي أتش بي | php open and upload file

لغة php : التعامل مع الملفات



تعتبر الوظيفة fopen() مسؤولة عن فتح الملفات في لغة PHP .




فتح الملف


تعتبر الوظيفة fopen() مسؤولة عن فتح الملفات في لغة PHP .

يستخدم أول رمز داخل الكود الوظيفي لإدراج اسم الملف المراد فتحه أما في الرمز الثاني سيتم تحديد حالة الملف بعد فتحه :
<html>
	  <body>
	  <?php
	  $file=fopen("welcome.txt","r");
	  ?>

	  </body>
	  </html>



يمكن تحديد حالة الملف من خلال الحالات التالية :


الحالةالشرح
rللقراءة فقط وتبدأ مع بداية فتح الملف .
r+قراءة / كتابة وتبدأ مع بداية فتح الملف .
wكتابة فقط . فتح الملف ومسح محتويات الملف أو إنشاء ملف جديد إن لم يكن موجوداً .
w+كتابة و قراءة . فتح الملف ومسح محتويات الملف أو إنشاء ملف جديد إن لم يكن موجوداً .
aملحق . يفتح و يكتب الملف حتى نهايته أو إنشاء ملف جديد اذا لم يكن موجوداً .
a+ملحق . يقدم محتوى الملف من خلال كتابة الملف من بدايته لنهايته .
xكتابة فقط . إنشاء ملف جديد . يعيد نتيجة خاطئة او خطأ اذا كان الملف موجود بالفعل .
x+كتابة و قراءة . إنشاء ملف جديد . يعيد نتيجة خاطئة او خطأ اذا كان الملف موجود بالفعل .

ملاحظة : اذا كانت الوظيفة fopen() غير قادرة على فتح ملف معين عندها ستعود القيمة 0 .

مثال :

في المثال التالي سيتم اظهار رسالة اذا كانت الوظيفة fopen() غير قادرة على فتح الملف .
<html>
	  <body>
	  <?php
	  $file=fopen("welcome.txt","r") or exit("Unable to open file!");
	  ?>

	  </body>
	  </html>





إغلاق الملف


تستخدم الوظيفة fclose() لإغلاق ملف معين .
<?php
	  $file = fopen("test.txt","r");

	  //some code to be executed
	  fclose($file);

	  ?>






فحص آخر الملف


يفحص الوظيفة feof() نهاية الملف أي في حالة تم قراءة الملف بشكل كامل .

تعتبر الوظيفة feof() مثالية في استخدام الحلقات عبر البيانات الغير معروفة الطول .

ملاحظة : لايمكنك قراءة الملفات المفتوحة من خلال w و a و x .
if (feof($file)) echo "End of file";
	  





قراءة الملف سطر بسطر


تستخدم الوظيفة fgets() لقراءة سطر معين من الملف .

ملاحظة : بعد استخدام هذه الوظيفة سينتقل المؤشر للسطر الثاني .

مثال

في المثال التالي سيتم قراءة سطر واحد من الملف أي حتى نهاية الملف .
<?php
	  $file = fopen("welcome.txt", "r") or exit("Unable to open file!");
	  //Output a line of the file until the end is reached
	  while(!feof($file))
	  {
	  echo fgets($file). "<br />";
	  }
	  fclose($file);

	  ?>






قراءة الملف كلمة بكلمة


تستخدم الوظيفة fgetc() لقراءة كلمة واحدة من الملف .

ملاحظة : بعد استخدام هذه الوظيفة سينتقل المؤشر للكلمة الثاني .

مثال

في المثال التالي سيتم قراءة كلمة واحدة من الملف أي حتى نهاية الملف .
<?php
	  $file=fopen("welcome.txt","r") or exit("Unable to open file!");
	  while (!feof($file))
	  {
	  echo fgetc($file);
	  }
	  fclose($file);

	  ?>






رفع الملفات



من الممكن رفع الملفات الى السيرفر باستخدام لغة PHP .




إنشاء نموذج لرفع الملفات


يمكن إنشاء نموذج يسمج للمستخدم رفع ملفاته بسهولة .

لاحظ نموذج HTML التالي والذي يسمح برفع الملفات :
<html>
	  <body>
	  <form action="upload_file.php" method="post"enctype="multipart/form-data">

	  <label for="file">Filename:</label>
	  <input type="file" name="file" id="file" />

	  <br />

	  <input type="submit" name="submit" value="Submit" />

	  </form>
	  </body>
	  </html>



ان المثال السابق هو إنشاء نموذج من خلال لغة HTML :

  • تحدد اللاحقة enctype الموجودة في وسم النموذج <form> نوع المحتوى المستخدم عند الضغط على زر "ارسال" . أما القيمة "multipart/form-data" تستخدم عندما يطلب النموذج بيانات ثنائية مثل محتوى مجلد سيتم رفعه .

  •  تحدد اللاحقة type="file" الموجودة في الوسم <input> حيث يجب أن تكون العملية مجلد أي على سبيل المثال عند الاستعراض على المتصفح سيتواجد بجانب حقل النص زر لرفع الملف .

ملاحظة : تعتبر مخاطرة كبيرة في الحماية عند السماح للمستخدم برفع ملفات على السيرفر لذلك مكنك فقط السماح للمستخدمين الموثوقين برفع الملفات على السيرفر .




إنشاء سكربت لرفع الملفات


يحتوي ملف الرفع upload_file.php على الكود التالي :
<?php
	  if ($_FILES["file"]["error"] > 0)
	  {
	  echo "Error: " . $_FILES["file"]["error"] . "<br />";
	  }
	  else
	  {
	  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
	  echo "Type: " . $_FILES["file"]["type"] . "<br />";
	  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
	  echo "Stored in: " . $_FILES["file"]["tmp_name"];
	  }

	  ?>



باستخدام المصفوفة $_FILES يمكنك رفع الملفات من حاسوب المستخدم الى السيرفر .

ان أول قيمة في حقل النموذج هي الاسم أما الثانية فيمكن أن تكون اما الاسم name أو النوع type أو الحجم size أو tmp_name أو الخطأ error كالتالي :

  • $_FILES["file"]["name"] : اسم الملف المرفوع .

  • $_FILES["file"]["type"] : نوع الملف المرفوع .

  • $_FILES["file"]["size"] : حجم الملف المرفوع

  • $_FILES["file"]["tmp_name"] : اسم النسخة المؤقتة للملف الذي تم تخزينه في السيرفر .

  • $_FILES["file"]["error"] : نتيجة الخطأ اذا كان هناك خطأ في الكود أو الملف المرفوع .

تعتبر هذه الخطوات أسهل طرقة لرفع ملف ولكن اذا أردت حماية الملفات على السيرفر يجب وضع قيود على الرفع .




قيود الرفع


لقد قمنا بإضافة بعض الأكواد لوضع قيود على الرفع أي يمكن فقط للمستخدم رفع ملفات بامتداد .gif أو .jpg و يجب أن يكون الحجم أقل من 20kb :
<?php
	  if ((($_FILES["file"]["type"] == "image/gif")
	  || ($_FILES["file"]["type"] == "image/jpeg")
	  || ($_FILES["file"]["type"] == "image/pjpeg"))
	  && ($_FILES["file"]["size"] < 20000))
	  {
	  if ($_FILES["file"]["error"] > 0)
	  {
	  echo "Error: " . $_FILES["file"]["error"] . "<br />";
	  } else {
	  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
	  echo "Type: " . $_FILES["file"]["type"] . "<br />";
	  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
	  echo "Stored in: " . $_FILES["file"]["tmp_name"];
	  }
	  } else {
	  echo "Invalid file";
	  }

	  ?>






حفظ الملف المرفوع


في المثال السابق تم رفع نسخة مؤقتة للملفات المرفوعة في ملف PHP temp على السيرفر .

تختفي الملفات المؤقتة بعد انتهاء الكود و لحفظ ملفاتك المرفوعة يجب اختيار مكان آخر للملفات على السيرفر :
<?php
	  if ((($_FILES["file"]["type"] == "image/gif")
	  || ($_FILES["file"]["type"] == "image/jpeg")
	  || ($_FILES["file"]["type"] == "image/pjpeg"))
	  && ($_FILES["file"]["size"] < 20000))
	  {
	  if ($_FILES["file"]["error"] > 0)
	  {
	  echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
	  }
	  else
	  {
	  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
	  echo "Type: " . $_FILES["file"]["type"] . "<br />";
	  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
	  echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

	  if (file_exists("upload/" . $_FILES["file"]["name"]))
	  {
	  echo $_FILES["file"]["name"] . " already exists. ";
	  }
	  else
	  {
	  move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
	  echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
	  }
	  }
	  }
	  else
	  {
	  echo "Invalid file";
	  }

	  ?>



يفحص الكود السابق الملف اذا كان موجوداً من قبل واذا لم يكن موجوداً عندها سيتم نسخ الملف الى المجلد المخصص .

ملاحظة : يتم حفظ الملف في المثال السابق في المجلد "upload" .




تعليقات