💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ سیدرضا بازیار
اجرا نشدن کد‌های پروژه روی مک
محسن موحد حل شده توسط محسن موحد

سلام

من فایل پیوست مربوط به دوره رو دانلود کردم و در زمپ قرار دادم. وقتی کد رو اجرا میکنم به این خطا میخوره: «خطا در آپلود فایل !!!» روی همه فرمت‌های تعریف شده هم تست کردم و باز هم خطا داد

 

وقتی این کد رو اجرا میکنم:

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

راه حل این خطا چیه؟

البته این نکته هم بگم. مسیر زیر در دو کد دومی و چهارمی که بالا گذاشتم یکی هست!

مثلا این شکلی هست:

opt/lampp/temp/phpKtHI99

اما با هر بار رفرش صفحه، مقدار آخر تغییر میکنه

سیدرضا بازیار ۱۷ بهمن ۱۳۹۹، ۱۸:۴۹

سلام و احترام

متد move_uploaded_file ( string $from , string $to ) : bool 

یه to میگیره و from شما سعی کنید که مسیر کامل رو به to بدید ن یه مسیر نسبی 

امیر صالحی ۱۹ بهمن ۱۳۹۹، ۰۹:۰۱

مشکل اینه که هر پوشه ای ایجاد میشه read only میشه. سیستم امنیتی مک این کار رو میکنه و باید پوشه‌ها رو دونه دونه از این حالت در بیارم

وقتی به صورت دستی پوشه رو درست کردم مشکل حل شد

 

حالا چیکار کنم که پوشه‌های ایجاد شده در htdocs به صورت پیشفرض قابل نوشتن هم باشه؟ 

سیدرضا بازیار ۱۹ بهمن ۱۳۹۹، ۱۲:۵۴

سلام.

این موضوع مربوط میشه به 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 برای این کار وجود دارد.

بهترین پاسخ
محسن موحد ۲۲ بهمن ۱۳۹۹، ۰۴:۳۵

سلام و احترام

یه سری آموزشی هم به شما معرفی میکنم که برای مک هستش اگه دوست داشتید ببینید فکر کنم به کارتون بیاد

https://laracasts.com/series/setup-a-mac-for-development-from-scratch

امیر صالحی ۲۲ بهمن ۱۳۹۹، ۰۷:۱۴