سلام و عرض خسته نباشید مهندسین عزیز.
سیستم عامل بنده ابونتو نسخه نهایی هستش
و همچنین روی سیستم عامل apache2, mysql, php8 رو نصب کردم ( تماما اخرین نسخه)
یک پروژه که با زبان php نوشتم و فریمورک laravel7 مشکل اینجاست که با خطایی که درواقع داره به حروف بزرگ و کوچیک اسم یک کلاس گیر میده مواجه میشم. جالبیش اینه که بعد از حل هم دوباره مشکل رو میبینم.
یکم توضیح بیشتر :
بنده در ویندوز به هیچ وجه چنین مشکلی نداشتم و مشکل حتما از سیستم عامل یا apache هستش . راه حل چیه دوستان؟
مشکلی که دارم اینه که در اجرای پروژه به حروف بزرگ و کوچیک حساسه و حتی اگه حروف رو درست کنم. دوباره باز یک روت یا تابع دیگه به مشکل عکس اون برمیخورم(یعنی یک جا میگه فلان کلاسی با این اسم وجود ندارد (حروف کوچک میخاد)و یک جای دیگه باز همون کلاس رو با حروف بزرگ میخاد )( امیدوارم فهمونده باشم مشکل چیه . دقیقا داره به اسم یک کلاس گیر میده)
# version ubuntu
Distributor ID: Ubuntu
Description: Ubuntu 20.10
Release: 20.10
Codename: groovy
# version php
PHP 8.0.0 (cli) (built: Nov 27 2020 12:26:38) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
# version mysql
mysql> SELECT VERSION();
+-------------------------+
| VERSION() |
+-------------------------+
| 8.0.22-0ubuntu0.20.10.2 |
+-------------------------+
1 row in set (0.00 sec)
# version apache
Server version: Apache/2.4.46 (Ubuntu)
Server built: 2020-08-25T12:13:38
مشکل قطعا از php نیست ، چون در php ، کلاس ها به حروف کوچک و بزرگ حساس نیستند
آپاچی هم کلا کاری با کدهای php نداره ،
ولی سرور لینوکسی به نام تمام فایل ها ( مثل عکس ، فایل js ، فایل css ، فایل php و ... )و همچنین url ها حساس هست ( احتمالا نام فایلت مثلا test.php هست و شما توی کدهای داخل این فایل کلاس رو اینجوری تعریف کردی : class Test ، یعنی با حرف بزرگ نوشتی ) حالا یا باید این کارو بکنی و همه رو یکسان کنی ( یعنی نام فایل و کلاس رو ) یا
یک تیکه کد برای آپاچی تو سرور های لینوکسی برات می نویسم ، ببین حالا شاید کارتو راه انداخت
در htaccess بزن
CheckSpelling On
CheckCaseOnly On
@bamdad
سلام دوست عزیز ممنون از جوابت - اره مطالعه کردم حرف شما کاملا درسته و php case-sensitive نیست. اما کلا من از روش تعریف namespace ها که با استفاده از ابزار comoser و استاندارد psr-4 اسامی کلاس ها رو تعریف و وفراخوانی میکنیم ( که البته من اینکارو نمیکنم در واقع خود لاراول این استاندارد و تعریف میکنه و من دارم ازش استفاده میکنم.
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Admin\Traits\Profile\createOrUpdateProfileTrait;
use App\Http\Controllers\Fathers\ProfileControllerFather;
class ProfileController extends ProfileControllerFather
{
use createOrUpdateProfileTrait;
# method index in profileControllerFather
# method create - store and update - store in createOrUpdateProfileTrait
# method notificationGet and notificationPost in profileControllerFather
}
این کلاسیه که تعریف کردم و اینجا میگه کلاس پدرش (ProfileControllerFather) به حرف اولش گیر میده ؟!! اصلا یک چیز عجیب باور کن چون درستش که میکنم توی یک روت دیگه میگه که این حرف باید بزرگ باشه؟!!!
اروری که میده اینه
و اگه مشاهده کنین خود کلاس رو به درستی بالای کلاس use شده.
ببین دوست من اسم فایل باید اینجوری باشه ProfileControllerFather.php
من فکر کنم برای شما اینجوریه profileControllerFather.php
@bamdad
نه دیگه اینطوری که composer نمیشناسه namespace رو و بهم ارور نشون میده اگه اسم ها یکی نباشه. اما به هر حال چک کردم درست بود و اینکه من همیشه با دستور artisan کنترلر هام رو میسازم
# command line
php artisan make:controller Father/ProfileFatherController
و حتما نام کلاس و فایل یکیه. حقیقتا من حدس میزنم مشکل از نرم افزار apache باشه اما نمیدونم چطور حلش کنم ؟!!
ببین توی ویندوز میتونی کلاس myClass رو بنویسی و با اسم MyClass فراخونی بکنی و مشکلی نباشه اما توی لینوکس قطعاً بهت خطا میده و میگه حق نداری بنویسی MyClass و حتماً باید بنویسی myClass
این قضیه برای هر نو نام گذاری باید رعایت بکنی وگرنه خطا میده. اسم فایل، متغیر و ...
@ashkannazari248
سلام ممنون از کمکتون - میشه یک لینک مناسبی که این حرف شمارو تایید کرده باشه برام بفرستین ؟ بعدشم این موارد کلا یکسری فایلهایی هستند که فایل php هستند و apache داره اجراشون میکنه فک نکنم ربطی به لینوکس داشته باشه ؟!
سلام
چندین ساله دارم php کار میکنم اما تا الان به این مشکل برخوردم . خب شما اسم فایل ها و کلاس ها رو به صورت پاسکالکیس که مورد استاندارد psr هست تعریف کنید.
مشکل چیه؟ متوجه نمیشم
شما یه فایل عکس ایجاد کنید و اسمش رو مثلاً بزارید MyPic.png و توی صفحه html به صورت myPic.png صداش بزنید و روی وینوز از پروژه بیلد بگیرید. همه چیز بدونه مشکل انجام میشه. حالا برید سراغ لینوکس. بهتون خطا میده که من فایل myPic.png رو پیدا نکردم!
این هیچ ربطی به apache نداره و مربوط به سیستم عامل هست.
چون به خاطر اشتباه اعضای تیم بیش از 10 بار با این مشکل مواجه شدم میتونید این تست رو به عنوان منبع انجام بدید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟