سلام
دوستان این تابع روی سرور ( هاست اشتراکی ) همش false بر میگردونه
به این شکل نوشتم :
@if (File::exists(public_path().'/images/'.$siteinfo[۰]->logo))
ظاهرا مشکل در تابع public_path هستش
چون نتیجه ای که از اکو کردن این تابع میگیرم url درستی نشون نمیده وبه شکل زیر یه آدرس بر میگردونه که طبیعتا چنین مسیری وجود خارجی نداره روی سرور
/home/mydomainName/public_html/local/public
چرا به این شکل بر میگردونه و راهکار چی هست ؟
سلام من خودم از کد زیر استفاده میکنم رو هاست اشتراکیم هست مشکلی هم نداره شمام تست کنید ببینید باز اشتباه برمیگردونه یا نه
if(file_exists(public_path($filePath))) {
// your code
}
منم همینو دارم استفاده میکنم ولی متاسفانه کار نمیکنه
سرچ کردم گفته بودن که در وضعیت روشن بودن safe_mode این تابع کار نمیکنه
چیکار باید کرد
والله من یه فولدری دارم داخل public بنام images که داخل این فولدر هم یه فودری دارم بنام products که میخوام به اونجا اشاره کنه و موجود بودن فایل رو چک کنه
ظاهرا باید publicPath رو در سیستم لینوکسی که با یک سرور ویندوزی متفاوت است در ENVIRONMENT تعریف گرد.
راهنمایی کنید مممنون میشم
و یا داخل متد 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';
});
}
}
هیچکدوم از روشهایی که فرمودید کار نمیکنه
لازمه که من ساختار پوشه بندی رو روی سرور تشریح کنم
من همه فایل های داخل فولدر public لاراول رو آوردم در روت هاست و بقیه فایل ها و فولدرهارو هم در داخل یه فولدری در روت هاست قرار دادم که نام این فولدر رو هم در داخل فایلindex.php بهش اشاره کردم و ادیت کردم این فایل رو و جالبه که همین روش روی سرور دیگری درست کار میکنه ولی روی این سرور کار نمیکنه
مدیریت هاست هم میگه ربطی به سرور نداره و باید کارزیر رو انجام بدید :
باید publicPath رو در سیستم لینوکسی که با یک سرور ویندوزی متفاوت است در ENVIRONMENT تعریف گرد.
چیزی که تابع public_path بر میگردونه عبارت زیر هست
/home/mydomain/public_html/local
در حالیکه فولدر images من داخل public_html هست نه local
فعلا یجوری مشکلو حل کردم ولی میدونم که راهش این نیست :
file_exists(str_replace('local','',base_path()).'/images/products/'.$item->sm_pic)
ممکنه یکی از دوستان راهنمایی که که با این مشکلی که من الان روی این سرور دارم بهترین روش برای اینکه من به مسیر زیر اشاره کنم چیه ؟
public_html/images/products/test.png
سلام
@hesami13
هاستتون احتمالا باید سی پنل باشه ، پروژه رو توی خود Public_html خود هاست در داخل فایل منجر آپلود کنید و همون مقادیر دیفالتی که در توابع بود رو اجرا کنید و مجدد تست بگیرید و خروجی رو بر گردونید
حس میکنم پروژه رو یه دایرکتوری قبل از public_html آپلود کردید
اصولا بی دردسرترین روش نصب لاراول روی هاست کدوم هست و پوشه ها و فایل های لاراول روبه چه شکلی روی هاست قرار بدیم که مشکلات این چنینی پیش نیاد
لطفا گفتگو رو خیلی بسط ندید دوستانیکه اطلاعات دقیق و عملی دارن نظر بدن که دیگران هم استفاده کنن
معمولا نصب پروژه لاراول به این صورت هست که ابتدا باید کل پروژه رو داخل پوشه public_html کپی کنید.
حالا بحثی که به وجود میاد اینه که لاراول توسط فایل های داخل پوشه public موجود در خود پروژه داره اجرا میشه. ۲روش برای دسترسی به فایل های داخل پوشه public داریم.
۱: کپی کردن تمام فایل های پوشه public به مسیر اصلی پروژه و تنظیمات مربوط به اون در فایل server.php
۲: یکی هم روش فایل .htaccess هست که من خودم استفاده میکنم. یعنی توسط فایل .htaccess تمام request هارو میبریم داخل پوشه public. اینجوری ساختار اصلی لاراول بهم نمیخوره.
یعنی ما داریم با این ۲ روش نام public رو از url سایت حذف میکنیم.
از :
www.domain-name.ir/public
به :
www.domain-name.ir
اصول اولیه نصب لاراول اینجوری هست.حالا شما چک کنید ببینید کجای کارتون اشتباه بوده که public_path شما داره اشتباه بر میگردونه.
@dr-code.ir عزیز خیلی ممنون از پاسخ تون
ممکنه همون روشی که شما خودتون برای هر دو فایل استفاده میکنید رو بزارید اینجا
منظورم دستوراتی که در فایل server.php و .htaccess می نویسید
چون من اینکار رو هم انجام دادم ولی جواب نگرفتم
میخوام دقیقا کدهای مدیریت وبسرور برای هندل این فرایند رو که داخل htaccess مینویسید رو بزارید که اونم تست کنم
اقای صادقیان این چه روش اپلوده!!
یعنی هه پروژه رو تویی پابلیک میذاری حتی فایل env!!!!!
نمونه سایتی دارید که به روشی که گفتی اپلود کرده باشی؟! لینک بدی!
روشی که از این سایت یاد گرفتم اینه که تمام پوشه پابلیک پروژه رو تویی public_html کپی میکنیم و بقیه فایل ها رو میریزیم تویی یک پوشه و اون پوشه رو قبل از پابلیک میذاریم و با تنظیم فایل index.php مسیر لود سایت رو با دونقطه .. و نام اون پوشه ی که قبل از پابلک درست میکنم. همین..
@juza666 عزیز روشی که شما میگید پیشنهاد شده و من هم اینو قبول دارم من موردی که بهش توجه نمیکردم این فولدری که موارد غیر از public رو داخلش میزاشتم رو در داخل public_html سرور قرار میدادم ولی ظاهرا باید این فولدر در سطح بالاتر از public_html قرار بگیره
فکر کنم مشل با این مورد حل بشه
ممنون که اشاره کردید
من الان کل فایلهای پروژه رو غیر از 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"
بالاخره مشکل حل شد
چون الان مشکل فقط این بود که تابع public_path به پوشه public اشاره میکرد برای اینکه به روت هاست اشاره کنه وارد فایل index.php شدم و تابع public_path رو override کردم ، به شکل زیر :
$app->bind('path.public', function() {
return DIR;
});
از همتون ممنونم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟