روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۱ سیدرضا بازیار
مشکل عجیب نصب شدن دو نسخه php در مک
جامعه پی اچ پی ایجاد شده در ۱۳ آذر ۱۴۰۰

سلام. من وقتی از طریق ترمینال مک یا ترمینال vscode ورژن php رو نگاه میکنم، نسخه ۸ نصب شده. اما در مرورگر روی نسخه 7 اجرا میشه

یعنی در سیستم من ۲ تا php و ۳ تا پایگاه داده مختلف نصب شده که هنگام اجرای کد همیشه به مشکل میخورم! سیستم رو دوبار فرمت کردم و از اول همه چیز رو نصب میکنم طبق آموزش‌های موجود در اینترنت اما باز هم این مشکلات به وجود میاد

سوال رو در stackoverflow هم مطرح کردم و باز هم به نتیجه نرسیدم

بخاطر این مشکل الان تقریبا ۲ سال میشه که نمیتونم دوره php رو پیش برم! یا پایگاه داده از کار می‌افته یا اینکه نتیجه اجرای کد‌ها هر لحظه با هم فرق داره یا ارور‌های بی دلیل برام پیش میاد. هر مشکل هم که برطرف میکنم یه جای دیگه مشکلات عجیب‌تر ایجاد میشه

https://stackoverflow.com/questions/70224240/problem-installed-two-different-php-on-a-mac

مشکل اصلی من اینه:

باید php رو روی سیستم عامل مک نصب کنم. حالا vscode و terminal اگر php روی مک نصب باشه کار میکنند و تابع سیستم عامل مک هستند (فرض کنید php 8 نصب کردم)

از طرفی وقتی XAMPP رو نصب میکنم یه php در مسیر خودش نصب میکنه که کاملا با php سیستم عامل متفاوت هست. مرورگر‌ها مسیر XAMPP رو اجرا میکنند (فرض کنید php 7 نصب میکنه)

حالا وقتی یه کد در vscode مینویسم، کد در مسیر xampp ذخیره میشه و در مرورگر هم کار میکنه. اما نمیتونه پایگاه داده رو اجرا کنه و نمیتونه کد رو دیباگ کنه. در نتیجه به هیچ پایگاه داده ای وصل نمیشه و در حالی که کد کار میکنه، اما خطا میده

سیدرضا بازیار ۱۳ آذر ۱۴۰۰، ۱۶:۵۷

سلام.

علت اینکه چند نسخه از هر کدوم نصب میکنید و بعد نمیتونید مدیریتشون کنید چیه؟

از هر کدوم یک نسخه نصب کنید و در جاهای دیگه از همین یک نسخه مسیردهی بدید.

دلیلی نداره وقتی نمیتونید کانفیگ کنید چند مفسر PHP و چند دیتابیس نصب کنید.

شما وقتی چند دیتابیس نصب میکنید باید بدونید کدوم دیتابیس و با چه پورتی در اون لحظه روی سیستم run هست. port رو باید بدونید چون اگر پورت پیشفرض ران نباشه زمانیکه میخواید از سمت PHP یک سوکت بزنید به دیتابیس باید پورتی که میخواید اتصال بده رو درست وارد کنید.


نهایتا نیازی به چند نسخه از PHP نیست و شما کافیه مسیر مفسر PHP رو مشخص کنید.

محسن موحد ۱۴ آذر ۱۴۰۰، ۱۸:۰۲

در ضمن میتونید پکیج LAMP رو جدا نصب کنید.

به این ترتیب که اول Apache و بعد Mysql و بعد PHP و در آخر PHPMyadmin...

محسن موحد ۱۴ آذر ۱۴۰۰، ۱۸:۰۵

از طریق ترمینال*

محسن موحد ۱۴ آذر ۱۴۰۰، ۱۸:۰۶

سیستم عامل مک به گونه ای طراحی شده که با ویندوز متفاوت هست. در ویندوز وقتی ما زمپ رو نصب میکنیم یه php رو با خودش برامون در مسیر خودش نصب میکنه و به vscode متصل میشه


در سیستم عامل مک وقتی xampp یا mamp یا lamp رو نصب کنیم یه پوشه واسه خودش ایجاد میکنه و توی اون یه php هم واسه خودش نصب میکنه که روی یه پورت یا لینک که مشخص میکنیم در مرورگر اجرا میشه

حالا ترمینال حاضر نیست php موجود در اون مسیر رو دنبال کنه و باید یه php جداگانه روی خودش نصب بشه که vscode و دیباگر هم از اون تبعیت میکنه


حالا در مک به گونه ای هست که وقتی که کد در vscode مینویسیم از طریق زمپ در مرورگر اجرا میشه ولی دیباگر اون از طریق php موجود در مک دیباگ میشه (میتونیم خودمون تعیین کنیم که به صورت موقت از دیتابیس زمپ تبعیت کنه یا دیتابیس موجود روی مک)


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


الان مشکلی که دارم دیباگر رو وقتی روی مک نصب میکنم نمیتونه در vscode دیباگ کنه. چون پورت مک با ویندوز کاملا متفاوت هست! در مرورگر من بدون پورت کد رو اجرا میکنم اما در مک به دیباگر یه پورت تصادفی میده که باعث میشه دیباگر کار نکنه

سیدرضا بازیار ۱۴ آذر ۱۴۰۰، ۱۸:۱۴

نه مواردی که گفتم مربوط به سیستم عامل‌های یونیکسی بود ارتباطی با ویندوز نداره.

بالاخره خود vsCode هم یک مسیر پیشفرض داره واسه خوندن PHP...

شما این مسیر پیشفرض رو تغییر بدید. این لینکو بخونید.

بطور مثال:

{
    "php.validate.executablePath": "C:\\\\wamp64\\\\bin\\\\php\\\\php7.0.4\\\\php.exe",
    "php.executablePath": "C:\\\\wamp64\\\\bin\\\\php\\\\php7.0.4\\\\php.exe"
}
  • یه نکته: اگر کار با سیستم عامل‌های یونیکسی خیلی سخته، چون گفتید 2 ساله یادگیریتون متوقف شده و هنوز هم حل نشده، پیشنهادم اینه شبیه ساز ویندوز روی مک نصب کنید تا بتونید همراه با آموزش‌ها جلوبرید و تایمو از دست ندید.
محسن موحد ۱۴ آذر ۱۴۰۰، ۱۹:۵۴

یه مورد دیگم بگم، تمام نرم افزار هایی که نصب میکنید از روی یک مسیر پیشفرض نیازهاشون رو دسترسی قرار میدن.

مثلا در xamp همین مورد رو داریم. وقتی پکیج‌های Apache و PHP و Mysql رو نصب میکنید این پکیج‌ها در مسیر‌های پیشفرضی نصب میشن و Apache بر اساس مسیر پیشفرض PHP میتونه به این مفسر و ماژول mod_php دسترسی بگیره و ...

تمامی این مسیرهارو میتونید تغییر بدید و هیچ چیزی وجود نداره که نشه تغیرش داد.

بنابراین یا مسیرهای پیشفرض vsCode رو تغییر بدید یا مسیر پیشفرض در وب سرور Apache.

محسن موحد ۱۴ آذر ۱۴۰۰، ۱۹:۵۹

من الان xdebug رو روی مک نصب کردم و فعال هم شده

فقط مشکلی که هست در مسیری اجرا میکنه که ارور میده.

در ترمینال vscode این متن نشون میده که دیباگر نصب هست

php -v                                                   
PHP 8.1.0 (cli) (built: Nov 28 2021 02:36:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.0, Copyright (c) Zend Technologies
    with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
    with Zend OPcache v8.1.0, Copyright (c), by Zend Technologies

حالا وقتی چند نقطه از کد رو انتخاب میکنم و دیباگ رو در vscode میزنم این ارور میاد:

[Tue Dec  7 10:13:14 2021] PHP 8.1.0 Development Server (http://localhost:50274) started
[Tue Dec  7 10:13:15 2021] [::1]:50276 Accepted
[Tue Dec  7 10:13:15 2021] [::1]:50276 [404]: GET / - No such file or directory
[Tue Dec  7 10:13:15 2021] [::1]:50276 Closing
[Tue Dec  7 10:13:15 2021] [::1]:50277 Accepted
[Tue Dec  7 10:13:15 2021] [::1]:50277 [404]: GET /favicon.ico - No such file or directory
[Tue Dec  7 10:13:15 2021] [::1]:50277 Closing

در مرورگر هم که اجرا میکنم این لینک رو باز میکنه و خطای زیر رو نشون میده

Link: http://localhost:50274
Not Found
The requested resource / was not found on this server.
سیدرضا بازیار ۱۶ آذر ۱۴۰۰، ۰۶:۴۸

خب خطا مشخصه، پس شما بیاید مسیر پیشفرض vscode برای تفسیر php رو تغییر بدید تا از php زمپ بگیره.


یکار دیگم میتونید کنید. اصلا زمپو بیخیال شید و حذفش کنید و خودتون پکیج هارو جدا نصب کنید.

Php رو که دارید. میمونه apache و mysql و phpmyadmin.

لینک کمکی...


البته قطعا راه اول ساده تره منتها اگر دنبال راهای دیگه هستین راه دومی هم هست و همینطور راهای دیگه، ولی همشون شبیه به همه و شما باید بتونید کانفیگ کنید تنظیمات این هارو.


بهترین پاسخ
محسن موحد ۱۶ آذر ۱۴۰۰، ۰۹:۲۰

الان مسیر دیباگر رو چطوری تغییر بدم؟

چه چیزی نصب کنم که کد رو توی مرورگر برام اجرا کنه؟

سیدرضا بازیار ۱۶ آذر ۱۴۰۰، ۱۰:۴۱

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

code ~/.bash_profile

اگر از زی شل استفاده میکنی: ~/.zshrc

اینجا میتونی مسیر پیشفرض EVN رو تغییر بدی.(توو ویندوز ما مسیر PATH رو از قسمت Enviroment Variables تغییر میدیم یا اضافه میکنیم تا از طریق cmd بتونیم دسترسی بگیریم.)

اگر مسیر PHP8 قرار داشت، کامنتش کن با علامت # .

مسیر PHP نسخه زمپ رو export کن به این شکل:

export PATH=/path/to/php:$PATH

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

بعد save یبار ترمینالو ببند و دوباره بازش کن و بنویس:

which php

تا ببینیم از کدوم مسیر میگیره.

انجامش دادی، اطلاع بده تا بقیه ی مواردو بررسی کنیم.

محسن موحد ۱۹ آذر ۱۴۰۰، ۰۵:۰۴