تغییر مسیر پوشه public لاراول به public_html و دسته بندی و جمع کردن سایر فایل ها و پوشه ها در یک فولدر

در این آموزش برسی میکنیم چطور پوشه public لاراول رو به public_html یا هر نام دیگه ای تغییر بدیم و سپس بقیه فایل ها رو درون یک فولدر بریزیم و با نامی مجزا در کنار public_html داشته باشیم (برای عدم دستری از روت سایت به فایل ها و پوشه های لاراول)

فرض کنین میخوام برای پروژم فقط دو فولدر public_html و laravel داشته باشم که بجز public_html همه فایل ها و فولدر های قدیم داخل laravel باشند:

۱. ابتدا فایل index.php از فولدر public رو ادیت میکنیم

//دو خط زیر رو تغییر مسیر بدید به آدرس جدیدتون
require __DIR__.'/../laravel/vendor/autoload.php';
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';

۲. فایل AppServiceProvider.php که در مسیر app/Providers هست رو ویرایش میکنیم و کد زیر رو به متد register اضافه و آدرس دهی مناسب میکنیم.

$this->app->bind('path.public', function() {
    return realpath(base_path().'/../public_html');
});

۳. فایل server.php از روت پروژه رو ویرایش میکنیم و در ۲ قسمت باید آدرس جدیمون رو قرار بدیم.

if ($uri !== '/' && file_exists(__DIR__.'/../public_html'.$uri)) {
    return false;
}

require_once __DIR__.'/../public_html/index.php';

 

موفق باشید

خطای file_put_contents storage\framework/sessions failed to open stream: No such file or directory

این خطا وقتی برای من رخ داد که از اوبونتو به ویندوز مهاجرت کردم. فولدر های اصلی پروژم رو دراپباکس بود بقیه رو با کومپوزر نصب کردم. فولدر های (tests vendor storage bootstrap) رو کپی نکرم. تصور بر این بود که توسط composer نصب بشن. تا یه حدی هم نصب شدن و من دائم خطای خطای file_put_contents storage\framework/sessions failed to open stream: No such file or directory رو میگرفتم. با جستجو هایی که انجام دادم اکثرا نوشته بودن با clear cache کارت درست میشه ولی مشکل من حل نشد. بعد کلی کلنجار رفتن دستور زیر رو تایپ کردم (در ویندوز)

php artisan | findstr clear

 

این دستور همه دستورات مربوط به پاک کردن کش رو میاره که میشه این:

clear-compiled Remove the compiled class file
auth:clear-resets Flush expired password reset tokens
cache:clear Flush the application cache
config:clear Remove the configuration cache file
route:clear Remove the route cache file
view:clear Clear all compiled view files

 

تک به تک همه کش ها رو پاک کردم تا رسیدم به آخری که خطای laravel RuntimeException : View path not found مواجه شدم و با یه جستجوی ساده و سریع به جواب درست رسیدم.

فولدر storage باید زیر مجموعه های app framework و logs رو داشته باشه که برای من فقط logs وجود داشت. چون فولدر storage فقط اطلاعات کش رو ذخیره میکنه و فایل خاصی توش نیست یه لاراول جدید تعریف کردم و فولدر های اونو کپی کردم اینجا و مشکل حل شد.

تو جستجو ها به یه حقه(تریک) باحال برخوردم که کار پاک کردن کش ها رو راحت میکنه. تو رَوت وبتون اینو اضافه کنین:

Route::get('/clear-cache', function() {
    Artisan::call('clear-compiled');
    Artisan::call('auth:clear-resets');
    Artisan::call('config:clear');
    Artisan::call('route:clear');
    Artisan::call('view:clear');
    Artisan::call('cache:clear');
    Artisan::call('config:cache');
    return 'DONE';
});