سلام
من فایل پیوست مربوط به دوره رو دانلود کردم و در زمپ قرار دادم. وقتی کد رو اجرا میکنم به این خطا میخوره: «خطا در آپلود فایل !!!» روی همه فرمت های تعریف شده هم تست کردم و باز هم خطا داد
وقتی این کد رو اجرا میکنم:
var_dump($_FILES['uploadedFile']);
نتیجه کد این میشه:
array(5) { ["name"]=> string(9) "image.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(25) "/opt/lampp/temp/phpKtHI99" ["error"]=> int(0) ["size"]=> int(814804) } /opt/lampp/temp/phpKtHI99
حالا میریم سراغ مشکلی که وجود داره!
مشکل از این شرط هست:
if(move_uploaded_file($fileTmpPath, $destPath)){
$msg = 'فایل شما با موفقیت آپلود گردید';
}else{
$msg = 'خطا در آپلود فایل !!!';
}
این شرط همیشه غلط false رو برمیگردونه! (نتیجه دو متغیر که چاپ میکنم به شکل پایین هست)
$fileTmpPath -----> /opt/lampp/temp/phpPcWioD
$destPath -----> upload/6a9a7d42f8463aac545e04213b31ae34.png
راه حل این خطا چیه؟
سلام.
این موضوع مربوط میشه به permission های سیستم عامل های یونیکسی که برای تمام PHP کار ها مهمه که در موردش اطلاعات کافی داشته باشن. چون PHP کارها عمدتا از هاست یا سرور های لینوکسی استفاده میکنن که این لینوکس هم ازین قاعده پیروی میکنه. در این زمینه مک یا لینوکس باهم تفاوتی ندارن.
شما میتونین یا دستی یا از طریق ترمینال بصورت تکی یا گروهی مجوزهای(همچنین owner ها) فایل ها و فولدرهارو تغییر بدید. یکی از موضوعات بسیار مهم و امنیتی در مبحث برنامه نویسی سایت هست که باید در موردش مطالعه کنید. شما حتی ممکنه روزی یک سرور مجازی یا اختصاصی تهیه کنید که با نرم افزاری مثله putty از طریق ssh تونسته باشین به ترمینال سیستم عامل دسترسی بگیرید، اونجا نیاز به دسترسی ها و مجوزهای فایل میشه که باید دستورات chmod و chown رو در موردش باید مطالعه کنید.
مباحث امنیت آپلود فایل کمی مطالبش وقت بیشتری میبره ولی بصورت کلی برای حل این مشکل و فقط روی سیستمتون که بتونید تست بگیرید میتونید دستور پایینو بنویسید:
chmod 777 /var/www/html/mysite/upload
یا میتونید تمام فولدرها و فایل های داخل دایرکتوری mysite رو مجوز 777 بدید با دستوری پایین:
chmod -R 777 /var/www/html/mysite
در ضمن اگر فایلی رو توسط PHP ایجاد یا آپلود کردید، میتونید با دستورات خود PHP هم مجوزهاشو تغییر بدید.
در PHP تابع chmod برای این کار وجود دارد.
البته این نکته هم بگم. مسیر زیر در دو کد دومی و چهارمی که بالا گذاشتم یکی هست!
مثلا این شکلی هست:
opt/lampp/temp/phpKtHI99
اما با هر بار رفرش صفحه، مقدار آخر تغییر میکنه
سلام و احترام
متد move_uploaded_file ( string $from , string $to ) : bool
یه to میگیره و from شما سعی کنید که مسیر کامل رو به to بدید ن یه مسیر نسبی
مشکل اینه که هر پوشه ای ایجاد میشه read only میشه. سیستم امنیتی مک این کار رو میکنه و باید پوشه ها رو دونه دونه از این حالت در بیارم
وقتی به صورت دستی پوشه رو درست کردم مشکل حل شد
حالا چیکار کنم که پوشه های ایجاد شده در htdocs به صورت پیشفرض قابل نوشتن هم باشه؟
سلام و احترام
یه سری آموزشی هم به شما معرفی میکنم که برای مک هستش اگه دوست داشتید ببینید فکر کنم به کارتون بیاد
https://laracasts.com/series/setup-a-mac-for-development-from-scratch