💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Sadra Soltani
خطای No such file or directory
جامعه پی اچ پی ایجاد شده در ۲۸ فروردین ۱۳۹۹

سلام استاد وقت بخیر /

یه مشکلی برام پیش اومده و اینکه مشکل نصب pear برای wamp دارم.

با اجرای برنامه هام به اررو  (

    
Warning: include(../lib/helper.php): failed to open stream: No such file or directory in D:\developer\php\first_project\bootstrap\config.php on line ۳

Warning: include(): Failed opening '../lib/helper.php' for inclusion (include_path='.;C:\php\pear') in D:\developer\php\first_project\bootstrap\config.php on line ۳
your connected in database... :)

 

) بر میخورم.

به همین دلیل نمیتونم لینک‌ها رو به درستی include کنم. 

 

تو استک اور فلو نحوه رفعش ر دیدم ولی وقتی میخوام رفعش کنم ، در cmd مشکل دارم.

و اونجا هم به اروری که تصویرش پیوست شد میخورم.

 

فایل go-pear.phar ر در دایرکتوری مسیر نصب php اضافه میکنم، اونرو میشناسه ولی نصب نمیکنه.

بعد از زدم اینتر هیچ اتفاق خاصی نمیوفته.

هرچند که مسیر php.exe ر هم بهش دادم .

 

ممنون میشم راهنمایییم کنید.

سلام.

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

این خطا ربطی به pear نداره، شما به این قسمت خطا توجه کنید:

include(../lib/helper.php): failed to open stream: No such file or directory

در این مسیری که دادید helper.php رو پیدا نکرده و با خطا مواجه شده.

 

* اما واسه اطلاعتون این مطلب رو هم اضافه کنم که اون خطی که pear نوشته منظورش چیه:

include_path='.;C:\php\pear'

داخل php ما include_path داریم که با ست کردن دایرکتوری‌های مختلف میتونیم مشخص کنیم ک برای مثال دستوراتی مثل requireincludefopen()file()readfile() و file_get_contents() فایل‌های مورد نظرو از داخل دایرکتوری هایی که ست کردیم، دنبالشون بگرده و اگر پیدا نشد با خطا مواجه میشه.

مثلا خودمون ست میکنیم: (راهی مناسب برای جلوگیری از خطای آدرس دهی و همچنین استفاده کنار در autoloading)

set_include_path(get_include_path() . PATH_SEPARATOR . 'core/lib');
set_include_path(get_include_path() . PATH_SEPARATOR . 'core/view');

در دستورات بالای برای مثال تمام دایرکتوری هایی که کلاس‌ها و فایل‌های PHP داخلشون قرار داره رو مشخص کردیم. حالا اگر مثلا فایل helper.php در مسیر core/lib باشه، کافیه فقط نام فایلو include کنم:

include 'helper.php';

چون با توجه به مسیرهایی که در include_path ست کردیم، از داخل اون دایرکتوری‌ها دنبال فایلی به اسم helper.php میگرده.

اما اگر مقداری ست نکنیم، مقدار include_path بصورت پیشفرض در تنظیمات PHP در قسمت اولش، به نقطه یعنی current directory و در قسمت دوم، به مسیر C:\php\pear اشاره میکنه.(مسیرها با ; از هم جدا شدن) این مسیر C:\php\pear اصلا در درایو C وجود نداره. و خطا هم ربطی به این مسیر نداره.

(البته برای تمرین و اینکه با نحوه ی کار include_path آشنا بشید، میتونید برید داخل درایو C و دایرکتوری php رو ایجاد کنید و داخلش دایرکتوری pear رو بسازید و داخل این دایرکتوری مثلا فایل test.php رو ایجاد کنید و بعد در یک پروژه ای که در دایرکتوری www دارید(مربوط به ومپ سرور)، بنویسید inlclude 'test.php' و نتیجه ی اونو ببینید. میبینید که فایل test.php که در مسیر C:\php\pear ایجاد کردید، اجرا میشه.)

 

اما در مورد سؤالتون، خطا مربوط به قسمت اول مسیر یعنی نقطه (.) منظور current directory هست. یعنی از محل current directory، آدرس بندی رو در include درست مشخص نکردید و با توجه به سؤالتون، در مسیر ../lib/helper.php، فایل مورد نظرو پیدا نکرده.

محسن موحد ۲۹ فروردین ۱۳۹۹، ۰۵:۵۰

سلام جناب موحد.

ممنون از پاسخگوییتون.

 

ولی من درقسمت لینک دادنم مشکل دارم /

 

اینکه:

سه فایل php در مسیر‌های :

 

first_project\index.php   ----> file asli

first_project\bootstrap\config.php  -----> kanfige database

first_project\lib\func.php   ------> tavabe

 

حالا لینک‌های زیر رو در فایل‌ها میذارم:

 

config.php:

include "lib/func.php";

 

 

index.php:

//include "lib/func.php";
include "tpl/tpl-index.php";  //site template
include "bootstrap/config.php";

 

با اجرای این کد و رفرش index اروری در این صفحه دریافت نمیکنم، ولی در صفحه config  به اروری که گفته شد میخورم .

 

 

حالا اگه شیوه آدرس دهی ر عوض کنم :

 

config.php:

include "../lib/func.php";

 

یه دایرکتوری به عقب بره بعد آدرس رو بره

 

 

index.php:

<?php
//include "lib/func.php";
include "tpl/tpl-index.php";
include "bootstrap/config.php";

 

حالا در index ارور دارم ولی در صفحه config به ارور نمیخورم.

 

یعنی با عوض کردن نوع لینک دادن همون ارور منتها در صفحات مقابل هم رو دارم.

 

 

طبیعتا میتونم با برداشتن لینک func..php ارور ر از بین ببرم .

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

چون با سرچ کردن ارور چیزی که فهمیدم این بود که احتمالا مربوط به pear باشه که فرمودید نیست.

 

امیدوارم منظورم ر متوجه شده باشی 

تشکر از وقتی که میذارید

Sadra Soltani ۲۹ فروردین ۱۳۹۹، ۲۲:۲۷

سلام

یه مورد کوچیک رو هم چک کن صدرا جان.

اسم پوشه توی پروژه libs بوده و تو توی کدهات lib نوشتی. ببین اشکال از این نیست....

لقمان آوند ۲۹ فروردین ۱۳۹۹، ۲۲:۳۱

نه استاد از این بابت نیستش

Sadra Soltani ۲۹ فروردین ۱۳۹۹، ۲۲:۳۴

فایل helper.php رو داخل پوشه lib نداری که ...

اونو بساز اونجا.

چیزی که مشخصه خطا داره میگه این فایل وجود نداره.

لقمان آوند ۲۹ فروردین ۱۳۹۹، ۲۲:۳۷

سلام.

با توجه به کدهاتون، علت خطاهایی که دریافت میکنید اینه که شما index.php که داخل root پروژه هست رو باز میکنید که داخل اون فایل config.php اینکلود شده بعد شما داخل فایل config.php فایل func.php رو نسبت به مسیر فایل config.php آدرس دهی کردید که این اشتباهه. چون فایل اجرایی شما index.php هست.

این کد شماست: config.php

include "../lib/func.php";

زمانی این مسیر دهی درسته که شما فایل config.php رو در مرورگر باز کنید. برای مثال:

http://localhost/7todo/bootstrap/config.php

اما وقتی index.php رو باز میکنید مسیر دهی‌ها نسبت به فایل index.php باید در نظر گرفته بشه.

یعنی اگر index.php رو بخواید باز کنید، فایل config.php به این شکل باید نوشته بشه:

include "lib/func.php";

این توضیحاتو گفتم که علت خطارو متوجه بشید.

اما در کل این نوع include کردن‌ها درست نیست.(منظورم اینکلود‌های تو در تو درست نیست.)

همونطور که استاد آوند توو پروژه توضیح دادن، هر فایلی مخصوص کاری ایجاد شده.

config وظیفش کانفیگ هست و db وظیفش مدیریت دیتابیس و ...

برای include کردن‌ها هم باید یک صفحه در نظر گرفته بشه و تمام include‌ها در اونجا انجام بشه تا مثل الان موقعیت و آدرس بندی فایل‌ها نسبت به موقعیت فایل اجرایی تغییر نکنه.(اینکه در هر صفحه یک include انجام بشه اولا یک بی نظمی ایجاد میکنه و مهمتر از اون همین خطایی که شما برخوردید. نسبت به هر فایلی که در مرورگر باز میکنید، مسیر دهی فرق خواهد کرد. وقتی index.php رو باز میکنید، آدرس‌ها نسبت به محل index.php در نظر گرفته میشه.)

محسن موحد ۲۹ فروردین ۱۳۹۹، ۲۳:۲۹