مهدی
5 سال پیش توسط مهدی مطرح شد
18 پاسخ

مشکل File exists لاراول

سلام
دوستان این تابع روی سرور ( هاست اشتراکی ) همش false بر میگردونه
به این شکل نوشتم :
@if (File::exists(public_path().'/images/'.$siteinfo[۰]->logo))

ظاهرا مشکل در تابع public_path هستش
چون نتیجه ای که از اکو کردن این تابع میگیرم url درستی نشون نمیده وبه شکل زیر یه آدرس بر میگردونه که طبیعتا چنین مسیری وجود خارجی نداره روی سرور
/home/mydomainName/public_html/local/public

چرا به این شکل بر میگردونه و راهکار چی هست ؟


ثبت پرسش جدید
علیرضا اصلانی
تخصص : Web and Mobile Developer
@aaslani 5 سال پیش آپدیت شد
1

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

    if(file_exists(public_path($filePath))) {
                // your code
            }

مهدی
@mehdi13 5 سال پیش مطرح شد
1

منم همینو دارم استفاده میکنم ولی متاسفانه کار نمیکنه
سرچ کردم گفته بودن که در وضعیت روشن بودن safe_mode این تابع کار نمیکنه
چیکار باید کرد


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
1

دقیقا چیزی که public_path برمیگردنه چیه؟ و ادرس صحیحی که باید برگردونه چی باید باشه؟


مهدی
@mehdi13 5 سال پیش مطرح شد
1

والله من یه فولدری دارم داخل public بنام images که داخل این فولدر هم یه فودری دارم بنام products که میخوام به اونجا اشاره کنه و موجود بودن فایل رو چک کنه


مهدی
@mehdi13 5 سال پیش مطرح شد
1

ظاهرا باید publicPath رو در سیستم لینوکسی که با یک سرور ویندوزی متفاوت است در ENVIRONMENT تعریف گرد.
راهنمایی کنید مممنون میشم


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

@hesami13
فایل public/index.php رو ادیت کنید و کد زیر رو بهش اضافه کنید:


$app->bind('path.public', function() {
    return __DIR__;
});

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

و یا داخل متد register یکی از سرویس پرووایدرها این کارو انجام بدید:

<?php

namespace App\Providers;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider {

    ...

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

}

مهدی
@mehdi13 5 سال پیش آپدیت شد
1

هیچکدوم از روشهایی که فرمودید کار نمیکنه
لازمه که من ساختار پوشه بندی رو روی سرور تشریح کنم
من همه فایل های داخل فولدر public لاراول رو آوردم در روت هاست و بقیه فایل ها و فولدرهارو هم در داخل یه فولدری در روت هاست قرار دادم که نام این فولدر رو هم در داخل فایلindex.php بهش اشاره کردم و ادیت کردم این فایل رو و جالبه که همین روش روی سرور دیگری درست کار میکنه ولی روی این سرور کار نمیکنه
مدیریت هاست هم میگه ربطی به سرور نداره و باید کارزیر رو انجام بدید :
باید publicPath رو در سیستم لینوکسی که با یک سرور ویندوزی متفاوت است در ENVIRONMENT تعریف گرد.

چیزی که تابع public_path بر میگردونه عبارت زیر هست

/home/mydomain/public_html/local

در حالیکه فولدر images من داخل public_html هست نه local


مهدی
@mehdi13 5 سال پیش مطرح شد
1

فعلا یجوری مشکلو حل کردم ولی میدونم که راهش این نیست :
file_exists(str_replace('local','',base_path()).'/images/products/'.$item->sm_pic)


مهدی
@mehdi13 5 سال پیش مطرح شد
1

ممکنه یکی از دوستان راهنمایی که که با این مشکلی که من الان روی این سرور دارم بهترین روش برای اینکه من به مسیر زیر اشاره کنم چیه ؟
public_html/images/products/test.png


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@hesami13

هاستتون احتمالا باید سی پنل باشه ، پروژه رو توی خود Public_html خود هاست در داخل فایل منجر آپلود کنید و همون مقادیر دیفالتی که در توابع بود رو اجرا کنید و مجدد تست بگیرید و خروجی رو بر گردونید
حس میکنم پروژه رو یه دایرکتوری قبل از public_html آپلود کردید


مهدی
@mehdi13 5 سال پیش آپدیت شد
1

اصولا بی دردسرترین روش نصب لاراول روی هاست کدوم هست و پوشه ها و فایل های لاراول روبه چه شکلی روی هاست قرار بدیم که مشکلات این چنینی پیش نیاد
لطفا گفتگو رو خیلی بسط ندید دوستانیکه اطلاعات دقیق و عملی دارن نظر بدن که دیگران هم استفاده کنن


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
1

معمولا نصب پروژه لاراول به این صورت هست که ابتدا باید کل پروژه رو داخل پوشه public_html کپی کنید.
حالا بحثی که به وجود میاد اینه که لاراول توسط فایل های داخل پوشه public موجود در خود پروژه داره اجرا میشه. ۲‌روش برای دسترسی به فایل های داخل پوشه public داریم.
۱: کپی کردن تمام فایل های پوشه public به مسیر اصلی پروژه و تنظیمات مربوط به اون در فایل server.php
۲: یکی هم روش فایل .htaccess هست که من خودم استفاده میکنم. یعنی توسط فایل .htaccess تمام request هارو میبریم داخل پوشه public. اینجوری ساختار اصلی لاراول بهم نمیخوره.

یعنی ما داریم با این ۲ روش نام public رو از url سایت حذف میکنیم.
از :
www.domain-name.ir/public
به :
www.domain-name.ir
اصول اولیه نصب لاراول اینجوری هست.حالا شما چک کنید ببینید کجای کارتون اشتباه بوده که public_path شما داره اشتباه بر میگردونه.


مهدی
@mehdi13 5 سال پیش مطرح شد
1

@dr-code.ir عزیز خیلی ممنون از پاسخ تون
ممکنه همون روشی که شما خودتون برای هر دو فایل استفاده میکنید رو بزارید اینجا
منظورم دستوراتی که در فایل server.php و .htaccess می نویسید
چون من اینکار رو هم انجام دادم ولی جواب نگرفتم
میخوام دقیقا کدهای مدیریت وبسرور برای هندل این فرایند رو که داخل htaccess مینویسید رو بزارید که اونم تست کنم


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
1

اقای صادقیان این چه روش اپلوده!!
یعنی هه پروژه رو تویی پابلیک میذاری حتی فایل env!!!!!

نمونه سایتی دارید که به روشی که گفتی اپلود کرده باشی؟! لینک بدی!

روشی که از این سایت یاد گرفتم اینه که تمام پوشه پابلیک پروژه رو تویی public_html کپی میکنیم و بقیه فایل ها رو میریزیم تویی یک پوشه و اون پوشه رو قبل از پابلیک میذاریم و با تنظیم فایل index.php مسیر لود سایت رو با دونقطه .. و نام اون پوشه ی که قبل از پابلک درست میکنم. همین..


مهدی
@mehdi13 5 سال پیش مطرح شد
1

@juza666 عزیز روشی که شما میگید پیشنهاد شده و من هم اینو قبول دارم من موردی که بهش توجه نمیکردم این فولدری که موارد غیر از public رو داخلش میزاشتم رو در داخل public_html سرور قرار میدادم ولی ظاهرا باید این فولدر در سطح بالاتر از public_html قرار بگیره
فکر کنم مشل با این مورد حل بشه
ممنون که اشاره کردید


مهدی
@mehdi13 5 سال پیش آپدیت شد
1

من الان کل فایلهای پروژه رو غیر از public آوردم یه level بالاتر از public_html سرور و داخل یه فولدری بنام laravel قرار دادم
و محتوای داخل فولدر public لاراول رو هم از فولدرش بیرون آوردم و ریختم داخل public_html سرور و وارد فایل index.php داخل public_html شدم و دستور مربوط به اتولود رو به شکل زیر تغییر دادم :
require dirname(dirname(FILE)).'/laravel/vendor/autoload.php';

تا اینجای کار رو که انجام دادم سایت به درستی بالا اومد ولی همچنان مشکل تابع File::exists رو داره

حالا باید در چه فایلهایی تغییرات مسیر اعمال کنم که تابع file_exists درسته به مسیر زیر اشاره کنه :
"/home/mydomain/public_html"

الان برگشتی تابع public_path بصورت زیر هست :
"/home/mydomain/laravel/public"
در حالیکه باید به مسیر زیر اشاره کنه :
"/home/mydomain/public_html"


مهدی
@mehdi13 5 سال پیش آپدیت شد
1

بالاخره مشکل حل شد
چون الان مشکل فقط این بود که تابع public_path به پوشه public اشاره میکرد برای اینکه به روت هاست اشاره کنه وارد فایل index.php شدم و تابع public_path رو override کردم ، به شکل زیر :


$app->bind('path.public', function() {
return DIR;
});


از همتون ممنونم


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

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