PDA

View Full Version : سوال: مشکل با تابع dirname



bluetooth153
چهارشنبه 30 بهمن 1392, 15:47 عصر
سلام
من در با تابع dirname() در پی اچ پی مشکل دارم و مشکلم هم اینه که این تابع جداساز های دایرکتوری رو مبتنی بر لینوکس برمیگردونه یعنی به جای / از \ استفاده میکنه
من برای لینک کردن css ها و js های سایتم که با mvc پیاده سازی کردم مجبورم از این تابع استفاده کنم ولی اینطوری فایلهام به درستی لینک نمیشن.
من برای لینک دادن این طوری کار میکنم :


<?php echo dirname(__FILE__);?> /css/css.css

باید از تابع دیگه ای استفاده کنم؟ راستی این مشکل در لینوکس هم میتونه بوجود بیاد؟ ینی اگه من جداساز دایرکتوری هام رو / بگزارم سایتم تو لینوکس به مشکل بر نمیخوره؟ ممنون میشم کمک کنید
خدانگهدار

foreach
چهارشنبه 30 بهمن 1392, 15:52 عصر
سلام
من در با تابع dirname() در پی اچ پی مشکل دارم و مشکلم هم اینه که این تابع جداساز های دایرکتوری رو مبتنی بر لینوکس برمیگردونه یعنی به جای / از \ استفاده میکنه
من برای لینک کردن css ها و js های سایتم که با mvc پیاده سازی کردم مجبورم از این تابع استفاده کنم ولی اینطوری فایلهام به درستی لینک نمیشن.
من برای لینک دادن این طوری کار میکنم :


<?php echo dirname(__FILE__);?> /css/css.css

باید از تابع دیگه ای استفاده کنم؟ راستی این مشکل در لینوکس هم میتونه بوجود بیاد؟ ینی اگه من جداساز دایرکتوری هام رو / بگزارم سایتم تو لینوکس به مشکل بر نمیخوره؟ ممنون میشم کمک کنید
خدانگهدار

با سلام
میتونید به اینصورت استفاده کنید


<?php
echo str_replace('\\','/',dirname(__FILE__));
?>

bluetooth153
چهارشنبه 30 بهمن 1392, 16:08 عصر
با سلام
میتونید به اینصورت استفاده کنید


<?php
echo str_replace('\\','/',dirname(__FILE__));
?>

ممنون
ولی یک مشکل دیگه بوجود اومد . تو لوکال هاست مشکل داره چیزی که با این روش برگشت داده میشه مشابه این آدرس هست :
c:/xampp/htdocs/personal_cms/pannel/files/images/gravatar.jpg
و کلا کار نمیکنه !
من فقط میخوام یک تابع باشه که به دایرکتوری روت به صورت درست اشاره کنه برای مثال وقتی روی لوکال هاست هست به خروجی تابع این باشه :
localhost/personal_cms

foreach
چهارشنبه 30 بهمن 1392, 16:35 عصر
ممنون
ولی یک مشکل دیگه بوجود اومد . تو لوکال هاست مشکل داره چیزی که با این روش برگشت داده میشه مشابه این آدرس هست :
c:/xampp/htdocs/personal_cms/pannel/files/images/gravatar.jpg
و کلا کار نمیکنه !
من فقط میخوام یک تابع باشه که به دایرکتوری روت به صورت درست اشاره کنه برای مثال وقتی روی لوکال هاست هست به خروجی تابع این باشه :
localhost/personal_cms
میشه بگید چرا کار نمیکنه ؟
البته بهتره که در فایل index یه ثابت تعریف کنید و مقدار dirname(__FILE__) رو بهش بدین و در هر جایی خواستید به راحتی ازش استفاده کنید
اما در مورد سوال دوم شما بازم بهتره که در تنظیمات اسکریپتتون یه قسمت رو برای آدرس سایت تعیین کنید
اینکه یه تابع باشه و آدرس روت رو بدست بیاره , تا حالا همچین کاری نکردم ولی یه نمونه میزام (تست نکردم)


<?php
$path = str_replace('\\','/',dirname(__FILE__));

$parts = explode('/',$path);
echo $_SERVER['HTTP_HOST'].'/'.end($parts);
?>

که البته باز فقط آخرین sub directory رو میتونه بدست بیاره

bluetooth153
چهارشنبه 30 بهمن 1392, 17:08 عصر
میشه بگید چرا کار نمیکنه ؟
البته بهتره که در فایل index یه ثابت تعریف کنید و مقدار dirname(__FILE__) رو بهش بدین و در هر جایی خواستید به راحتی ازش استفاده کنید
اما در مورد سوال دوم شما بازم بهتره که در تنظیمات اسکریپتتون یه قسمت رو برای آدرس سایت تعیین کنید
اینکه یه تابع باشه و آدرس روت رو بدست بیاره , تا حالا همچین کاری نکردم ولی یه نمونه میزام (تست نکردم)


<?php
$path = str_replace('\\','/',dirname(__FILE__));

$parts = explode('/',$path);
echo $_SERVER['HTTP_HOST'].'/'.end($parts);
?>

که البته باز فقط آخرین sub directory رو میتونه بدست بیاره
مشکل من با تابعی که شما گفتید نیست و روشی که شما پیشنهاد دادید به درستی کار میکنه اما مرورگر نمیتونه این آدرسی ها رو پیدا کنه
مثلا یکی از عکسهای من این طور لینک شده :
C:/xampp/htdocs/personal_cms/pannel/assets/images/gravatar.jpg
و این عکس رو از این آدرس نمیتونه پیدا کنه در صورتی که آدرس کاملا درسته و هیچ مشکلی نداره ینی اسم پوشه ها و عکس رو درست وارد کردم .
تو جوملا یک تابعی رو تعریف کرده بودن که به آدرس روت سایت اشاره میکرد و در قالب نویسی کمک زیادی به ما میکرد . همچین تابعی رو میخوام.
من نمیخوام کاربر مجبور باشه آدرس سایت رو وارد کنه چون امکان اشتباه تایپی وجود داره و باعث میشه سایت هر زمان که دامنه اون عوض شد به مشکل بخوره .

bluetooth153
چهارشنبه 30 بهمن 1392, 17:11 عصر
روش اخیری هم که گفتید بعضی جاها به درستی کار نمیکنه مواقعی که سایت در یک ساب دایرکتوری آپلود شده به مشکل بر میخوره
روش دیگه ای به نظرتون میرسه؟

MMSHFE
چهارشنبه 30 بهمن 1392, 17:39 عصر
دوست عزیز، شما ابداً نباید به این روش کار کنید. این روش (آدرس دهی مطلق بصورت مسیر فیزیکی) برای وقتی خوبه که میخواین فایل رو include کنید نه برای وقتی که میخواین توی مرورگر آدرس رو توی سورس کد درج کنید چون اولین قدم مثبت رو برای هکرها برداشتین و مسیر فیزیکی فایلهاتون رو لو دادین. بجای اینجور کارها، توی فایل تنظیمات سه ثابت تعریف کنید:


defined('ADDR') or define('ADDR', 'http://www.mysite.com');
defined('ROOT') or define('ROOT', str_replace('\\', '/', dirname(__FILE__));
defined('DS') or define('DS', DIRECTORY_SEPARATOR);

البته این کد با فرض اینه که فایل تنظیمات توی پوشه ریشه سایتتون هست و اگه توی پوشه فرعی دارین، به تعداد پوشه های فرعی باید dirname اضافه کنید. حالا هرجا میخواین فایلی رو ضمیمه کنید، اینطوری عمل کنید:

require_once ROOT . DS . 'includes' . DS . 'db.php';
و هرجا میخواین مسیری رو توی Browser مشخصه کنید، اینطوری کار کنید:

echo '<img src="' . ADDR . '/images/logo.png" />';
طبیعتاً بجای http://www.mysite.com باید آدرس URL سایت خودتون رو بنویسید.

bluetooth153
چهارشنبه 30 بهمن 1392, 22:57 عصر
ممنون از توضیح کاملتون
همین کار رو انجام دادم