• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در ساخت phar
#1
سلام
من تازه php رو شروع کرده ام. یک پروژه دارم که میخوام از روی اون یه فایل بصورت phar بسازم. وقتی خود پروژه رو تو xampp اجرا میکنم هیچ مشکلی نیست. ولی وقتی فایل phar رو می سازم، مسیر فایلها رو تشخیص نمیده و پیداشون نمیکنه.
یعنی هرجا که از header یا include استفاده میکنم تو این حالت جدید به خطا میخوره و فایل پیدا نمیشه.

تغییر مسیر فایلها هم خیلی کار مشکلیه چون حدود 70 80 جا رو تو پروژه باید تغییر بدم.
لطفا هرکسی راه حلی داره کمکم کنه. [/size][/font]
  پاسخ
تشکر شده توسط :
#2
phar چیه کلا ؟!
  پاسخ
تشکر شده توسط :
#3
phar یه نسخه zip‌شده از پروژه php‌ هست. یعنی بجای اینکه کل پروژه رو یه جا کپی کنیم و اجراش کنیم میتونیم اینو درست کنیم و ازش استفاده کنیم.
یه چیزی مثل library های java یا c# هست.
مشکل اینه که این نسخه که من الان درست کرده ام، مسیر فایلهای پروژه رو تشخیص نمیده . بنابراین هرجا تو پروژه من از include یا header استفاده کرده ام الان به error‌ میخوره و به فایل مربوطه منتقل نمیشه!
[/size][/font]

[font=Tahoma][size=medium]
  پاسخ
تشکر شده توسط :
#4
یک نمونه از include هایی که استفاده کردی بزار
  پاسخ
تشکر شده توسط :
#5
مثلا این کد که قبلا با فولدر پروژه کار میکرد الان کار نمیکنه و فایل رو پیدا نمیکنه:

include ( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'file.php' );
من چند جا خوندم نوشته وقتی میخوایم از phar‌ استفاده کنیم باید مسیر تمام فایلها به اولشون این کد اضافه بشه:
phar://
ولی تو این پروژه هر فایل به طریقی فراخوانی شده. یکی با مسیری به شکل بالا. یکی با relative path،...
[/align]و حساب کردم کلا تقریبا 100 جا رو باید دستی تغییر بدم که کار کنه!
بعد فقط include‌ ها نیست. header‌ها و require‌ و require_once‌ها هم باید تغییر کنه.
  پاسخ
تشکر شده توسط :
#6
خب دیگه نمی تونید از مسیر خود پروژه استفاده کنید چون مسیر ها فرق می کنه. اگه از autoload استفاده می کردید این مشکل رو به راحتی می تونستید حل کنید.
  پاسخ
تشکر شده توسط :
#7
یعنی از یه function برای فراخوانی استفاده کنم؟
یه چیزی مثل این؟

<?php
function autoloadMyClasses($class_name) {
include $class_name . '.php';
}

$obj = new MyClass1();
$obj2 = new MyClass2();
?>


اینطوری همه جا باید autoloadMyClasses رو صدا بزنم. درسته؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان