اذهب إلى المحتوى

السؤال

نشر

أحاول الحصول على اسم الملف من المسار الخاص به بالشكل التالي:

<?php

$file_path = "/path/to/image.png";
$file_name = end(explode('/', $file_path));
echo $file_name;

لكن يظهر الخطأ التالي:

Notice: Only variables should be passed by reference in /home/user/scripts/code.php on line 4
image.png

ما سبب هذا الخطأ؟ وكيف أقوم بإصلاح هذه المشكلة؟

Recommended Posts

  • 1
نشر

هذا ليس خطأ، فهو إشعار. 

ويتم اخراج هذا الإشعار لأن الوظيفة end () تتوقع مرجعًا reference لشيء تريد تغييره والذي يتوقع ان يكون متغيرا، في حين انك تقوم بإسناد التعريف مباشرة. أي انه لن يمكنك تمرير نتيجة explode مباشرة اليها دون حفظها في متغير اولا واستدعاءها بمرجعية هذا المتغير. ففي المثال الذي لديك هي متواجدة في الذاكرة ولا يشير اليها أي متغير وبطبيعة الحال فإنه لن يمكنك انشاء اشارة اليها. 

ولذلك فإن الحل الأول هو انشاء مرجع، او بمعنى آخر تخزين الخرج في متغير وتمريره كمعامل للوظيفة end. 

كحل آخر، يمكنك تجاهل هذا الإشعار والتغاضي عما يخرجه مباشرة ويكون ذلك عن طريق استخدام عامل التجاهل:

$file_name = @end(explode('/', $file_path));

 

  • 1
نشر

 سبب الخطأ: لو لاحظ رسالة الخطأ فهي أنه يجب تمرير المتغيرات فقط من خلال المرجع , وبناء على ذلك يمكنك اسناد قيمة explode الى متغير ليكن اسمه 

$tmp=explode('/', $file_path)

ثم تمرير المتغير الى end كالتالي

$file_name = end($tmp);

النتيجة

image.png

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...