مشکل با اینکلود کردن فایلها در mvc

i-php-i

Active Member
من از یه معماری سه لایه ای برای نوشتن برنامه استفاده می کنم. فایلی به نام control.php وظیفه کنترل درخواستها رو به عهده داره.

توی تابع مخرب باید فایلهای لایه نمایش رو اینکلود کنم. توی قسمت مخرب، قالب اصلی وب سایت (panel.php)رو اینکلود می کنم. توی این قالب، فایلهای مربوط به محتویات هر صفحه رو اینکلود می کنم. مشکلی که دارم اینه که قالب اصلی اینکلود می شه فایلهای مربوط به محتویات صفحه اینکلود نمی شه.

توی فایل panel.php کدی که برای اینکلود کردن حتویات استفاده می کنم این هست:
PHP:
include_once('./temp/content/content1.php');
ترتیب قرار گیری پوشه ها به این صورت هست:



کد:
/admin
/admin/control.php
/admin/temp 
/admin/temp/panel.php
/admin/temp/content
/admin/temp/content/content1.php
/admin/temp/content/content2.php
/admin/temp/content/content3.php

چطور این مشکل حل می شه؟
 
آخرین ویرایش:

mtchabok

Member
عزیزم آدرس رو بصورت محلی وارد نکنید . زیراکه آدرسهای محلی نسبت به فایلهای درخواست داده شده از سمت کاربر اجرا خواهند شد .
 

i-php-i

Active Member
عزیزم آدرس رو بصورت محلی وارد نکنید . زیراکه آدرسهای محلی نسبت به فایلهای درخواست داده شده از سمت کاربر اجرا خواهند شد .
نمی شه آدرس کامل فایل رو به تابع اینکلود بدم. این کار توی xampp غیر فعال شده.

راه دیگه ای بنظرتون نمی رسه؟
 

mtchabok

Member
خوب میتونید یه مسیر اصلی مدنظرتون باشه و نسبت به اون مسیر اصلی آدرس فایلها رو وارد کنید .
در ضمن در include_path هم اون مسیر اصلی رو اضافه کنید .
 

i-php-i

Active Member
خوب میتونید یه مسیر اصلی مدنظرتون باشه و نسبت به اون مسیر اصلی آدرس فایلها رو وارد کنید .
در ضمن در include_path هم اون مسیر اصلی رو اضافه کنید .
من به پوشه هایی که الان دارم نمی تونم دسترسی حالا اگر یه پوشه دیگه تعیین کنم که مشکل دوتا می شه.
 

farik

Well-Known Member
باسلام..
خوب شما باید تو جایی که هسته سیستم قرار داره آدرسش رو ذخیره کنین و بقیه رو نسیبت به اون اینکلود کنین..در ضمن یادم نمیاد تو زمپ این قابلیت که اینکلود با ادرس کامل باشه بسته شده باشه..ورژن زمپتون چنده؟
 

i-php-i

Active Member
باسلام..
خوب شما باید تو جایی که هسته سیستم قرار داره آدرسش رو ذخیره کنین و بقیه رو نسیبت به اون اینکلود کنین..در ضمن یادم نمیاد تو زمپ این قابلیت که اینکلود با ادرس کامل باشه بسته شده باشه..ورژن زمپتون چنده؟
version 1.7.0

مشکل اینجاست که این روش کار نمی کنه.

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

farik

Well-Known Member
نمیدونم..چون تو سیستم هایی مثل joomla هم از همین روش استفاده کردند..اشکال از منتطثق شماست..:rose:
 

mtchabok

Member
ببنید یه مسیر اصلی برای کلیه فایلهای خودتون در نظر بگیرید .
بعدش این مسیر رو در php.ini توسط تابع set_include_path ست کنید به این صورت :
set_include_path('./'.PATH_SEPARATOR.root_directory.PATH_SEPARATOR);
خوب از این به بعد تمامی آدرسها رو به صورت محلی نسبت به آدرس اصلیتون وارد کنید .
با اینکار دیگه نیاز به متغیر و ثابت ندارید.
یه چیز دیگه اینکه اون '.' نقطه در ابتدای رشته برای آدرسهای محلی نسبت به موقعیت فایل درخواست شده هس ، که شما میتونید این مسیر رو حذف کنید . البته اگه خواستید .
 

i-php-i

Active Member
ببنید یه مسیر اصلی برای کلیه فایلهای خودتون در نظر بگیرید .
بعدش این مسیر رو در php.ini توسط تابع set_include_path ست کنید به این صورت :
Set_include_path('./'.path_separator.root_directory.path_separator);
خوب از این به بعد تمامی آدرسها رو به صورت محلی نسبت به آدرس اصلیتون وارد کنید .
با اینکار دیگه نیاز به متغیر و ثابت ندارید.
یه چیز دیگه اینکه اون '.' نقطه در ابتدای رشته برای آدرسهای محلی نسبت به موقعیت فایل درخواست شده هس ، که شما میتونید این مسیر رو حذف کنید . البته اگه خواستید .
من الان دستور شما رو استفاده کردم و فایلم اینکلود شد.

اما یه مشکل هست و اونم اینکه باید فایلی که می خوام اینکلود کنم رو کنار اسکریپت (منظورم اسکریپتی هست که اون فایل رو اینکلود می کنه) قرار بدم تا بتونم فایل رو اینکلود کنم.

چطور می تونم این محدودیت رو برطرف کنم؟
 
آخرین ویرایش:

mtchabok

Member
عزیزم آدرسهایی رو که در تابعی set_include_path وارد میکنید باید به صورت کامل باشه و به هیچ وجه از آدرسهای محلی استفاده نکنید مگر همون نقطه './'
اگه آدرس کامل وارد بشه دیگه مشکلی ندارید .
در ضمن اکثر سیستمها و فریم ورکها از همین روش برای اینکلود کردن استفاده میکنن . (مثلا کیک php )
 

i-php-i

Active Member
عزیزم آدرسهایی رو که در تابعی set_include_path وارد میکنید باید به صورت کامل باشه و به هیچ وجه از آدرسهای محلی استفاده نکنید مگر همون نقطه './'
اگه آدرس کامل وارد بشه دیگه مشکلی ندارید .
در ضمن اکثر سیستمها و فریم ورکها از همین روش برای اینکلود کردن استفاده میکنن . (مثلا کیک php )
من از XAMPP استفاده می کنم.

وقتی تابع رو به صورت زیر استفاده می کنم. ارور می ده و فایل نمایش داده نمی شه. من فایل testfile.php
توی پوشه info گذاشتم و از طریق فایل manage.php به این صورت include_once('testfilet.php'); اینکلودش می کنم ولی هشدار نمایش داده می شه.

بنظرتون مشکل چیه؟

PHP:
set_include_path('http://localhost/admin/templates/info/');

PHP:
Warning:  include_once() [function.include]: Failed opening 'testfile.php' for inclusion (include_path='http://localhost/admin/templates/info/') in C:\xampp\htdocs\admin\templates\contents\manage.php on line 46
 

جدیدترین ارسال ها

بالا