جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
یوسف جعفری
2 سال پیش توسط یوسف جعفری مطرح شد
7 پاسخ

storage در لاراول

سلام رفقا، مشکلم شاید خیلی ساده باشه ولی شدیدا به کمک نیاز دارم
من یه پروژه لاراولی 9 رو توی هاست لینوکسی آپلود کردم و برای ذخیره عکس ها دارم از storage استفاده میکنم و مشکلم اینه که عکس ها توی فایل storage اضافه و حذف میشن ولی توی پوشه public_html/storage هیچ تغییری نمیاد؛ پروژه کامل کار میکنه روی هاست فقط عکس هایی که تو استورج هستند کار نمیکنن و قابلیت ترمینال هم نداریم متاسفانه

ممنون میشم دستی برسونید


ثبت پرسش جدید
علی مهدوی
تخصص : طراح و توسعه دهنده وب
@mahdavi 2 سال پیش مطرح شد
1

سلام
بله متاسفانه سرویس دهنده های هاست اشتراکی به دلایل امنیتی تمام فانکشن های مرتبط با استفاده از قابلیت های ترمینالی لینوکسی رو بستن
برای مثال symlink, exec, cp و ...

عملا لاراول خودش راه حلی برای این موضوع ارائه نمیده چون عملا سرویس های اشتراکی صرفا دسترسی ssh ندارند و نمیشه منابع رو کنترل کرد و در کشورهای دیگه هیچ دستوری رو محدود نمیکنن و اگرم بکنن با پشتیبانی میشه به صورت موردی بازشون کرد که متاسفانه در ایران نمیشه

راه حل دم دستی تا اینکه برید روی یه هاست بهتر یا سرور ابری یا سرور مجازی اینه که در تنظیمات config/filesystems.php برید و مسیر ذخیره root رو در درایور public رو به مسیر public_html و پوشه دلخواهتون تغییر بدید یعنی از مسیر storage خارج بشید

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
        ],

برای استفاده از فایل هایی که در پوشه storage ذخیره میشن هم که visible نیستن میشه از Storage::disk()->download() استفاده کرد


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 2 سال پیش مطرح شد
0

سلام
زمانی که شما پروژه رو روی لوکال دارید اون پوشه storage داخل public_html یه shortcut هست به storage /app و وقتی که پروژه رو منتقل میکنید روی سرور دیگه اون shortcut تبدیل به پوشه میشه و از مسیر بودن درمیاد که شما باید یه shortcut روی سرور بسازید تا عمل کنه.
برای اینکار یه روش ساده میگم که میتونی باهاش اون shortcut رو بسازی
اول یه route موفق میسازی که بعدا بتونی غیرفعالش کنی حالا با هر اسمی
توی اون route یه تابع بی نام بنویس و کد زیر رو توش بذار و تغییراتت رو بر اساس مسیرهای سرورت تنظیم کن و route رو اجرا کن

$targetFolder = '/_PATH_/storage/app/public';
$linkFolder = '/_PATH_/public_html/amin/storage';
dd(symlink($targetFolder,$linkFolder));

خب متغیر targetFolder مسیر storage اصلی هست که با مقدار الانش باید جایگزین کنی
متغیر linkFolder هم جایی هست که باید برای storage بیای shortcut بسازی
مسیرهارو هم باید به نسبت پنلی که داری مسیریابی کنی که مثلا مسیرهای پنل هایی مثل دایرکت ادمین و سی پنل و ... باهم فرق دارن.
تابع symlink هم میاد بر اساس مقادیری که بهشون میدی کار رو انجام میده. داخل dd هم گذاشتم که بتونی نتیجه بازگشتی رو ببینی.


یوسف جعفری
@titan.2018.yj 2 سال پیش آپدیت شد
0

@amin.webdesign
سلام رفیق، ممنون از زحمتت برای جواب ولی متاسفانه من این روش رو استفاده کرده بودم ولی بازم اومدم از کدت استفاده کردم و بازم کار نکرد، ظاهرا هاست من به دلایل امنیتی اجازه این کار رو نمیده و ارور زیر رو میده
Call to undefined function symlink()
تو اینجور هاست ها باید چیکار کنیم، لاراول که فریم ورک کاملی هست باید یه راه حل باشه


علی مهدوی
تخصص : طراح و توسعه دهنده وب
@mahdavi 2 سال پیش مطرح شد
1

سلام
بله متاسفانه سرویس دهنده های هاست اشتراکی به دلایل امنیتی تمام فانکشن های مرتبط با استفاده از قابلیت های ترمینالی لینوکسی رو بستن
برای مثال symlink, exec, cp و ...

عملا لاراول خودش راه حلی برای این موضوع ارائه نمیده چون عملا سرویس های اشتراکی صرفا دسترسی ssh ندارند و نمیشه منابع رو کنترل کرد و در کشورهای دیگه هیچ دستوری رو محدود نمیکنن و اگرم بکنن با پشتیبانی میشه به صورت موردی بازشون کرد که متاسفانه در ایران نمیشه

راه حل دم دستی تا اینکه برید روی یه هاست بهتر یا سرور ابری یا سرور مجازی اینه که در تنظیمات config/filesystems.php برید و مسیر ذخیره root رو در درایور public رو به مسیر public_html و پوشه دلخواهتون تغییر بدید یعنی از مسیر storage خارج بشید

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
        ],

برای استفاده از فایل هایی که در پوشه storage ذخیره میشن هم که visible نیستن میشه از Storage::disk()->download() استفاده کرد


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 2 سال پیش مطرح شد
0

سلام
بحث لاراول نیست. متاسفانه خیلی از شرکتهای هاستینگ یه سری موارد رو برای پاک کردن صورت مسئله های امنیتی غیرفعال میکنن.
برای اینکار یا باید هاست مخصوص لاراول بگیری یا حداقل از سرورهای مجازی استفاده کنی. من خودم روی هاست های ویژه شرکت irpower همین کار رو انجام دادم و مشکلی نبوده. میتونی اون شرکت هم یه بررسی کنی.
یا اینکه این کد رو هم یه تست بکن به جای کدی که دادم بهت

Artisan::call('storage:link');

یوسف جعفری
@titan.2018.yj 2 سال پیش مطرح شد
0

ممنون از کمکتون،
@mahdavi
@amin.webdesign
من از راه حل هاتون استفاده کردم ولی متاسفانه جوابی نگرفتم، با هاست هم در میون گذاشتم ولی این اجازه رو به من ندادن، بنابر این فکر کنم تنها راهی که دارم اینکه که عکس ها رو مستقیما توی مسیر public_html ذخیره کنم و تمام فایل های پروژه که تو storage ذخیره میکنه رو حذف کنم؟ یعنی راه دیگه ای نیست؟


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 2 سال پیش مطرح شد
0

اگه فایل خصوصی ندارید بهتره توی همون public_html مسیردهی کنید


علی مهدوی
تخصص : طراح و توسعه دهنده وب
@mahdavi 2 سال پیش مطرح شد
0

@titan.2018.yj نه متاسفانه در مطلبی هم که اشاره کردم راه حلی روی هاست های اشتراکی محدود شده به غیر اینکه فایل هارو داخل public_html ذخیره کنید وجود نداره

البته اگه فایلی دارید که نمیخواید برای همه قابل دسترس باشه مثل گذشته در درایور private ذخیره کنید و از قابلیت Storage خود لاراول براساس اینکه کاربر اجازه دسترسی دارد یا نه این فایل رو فراخوانی کنید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام