PDA

View Full Version : Catchable fatal error



maysamscript
پنج شنبه 29 فروردین 1387, 14:43 عصر
سلام دوستان این خطا چی میگه
Catchable fatal error: Object of class stdClass could not be converted to string in <filename> on line <line>
درضمن من در لوکال هیچ مشکلی ندارم
ورژن پی اچ پی در لوکال 5.2.4 هست ولی در هاست 5.2.5 هست
حالا من باید چطور مشکلم رو حل کنم
ممنون از شما که جواب منو میدید

امید امرایی
پنج شنبه 29 فروردین 1387, 17:05 عصر
علت های زیادی می تونه وجود داشته باشه . اگه نمونه ای از سورسی که دچار خطا می شه رو قرار بدین شاید بشه مشکل رو حل کرد . (فقط قسمتی که دچار خطا می شه)

maysamscript
پنج شنبه 29 فروردین 1387, 21:01 عصر
مشکلشو فهمیدم
دلیلش اینه که هاست من session ست نمیکنه حالا با این مشکل چکار کنم

امید امرایی
پنج شنبه 29 فروردین 1387, 21:08 عصر
بعید می دونم دوست من

این مشکل در مواقع زیادی به نوع ست کردن session ها بر می گرده اما به شدن یا نشدنش فکر نمی کنم در ارتباط باشه به هر حال اگه سورس رو بزارید مشکل سریع تر حل می شه

maysamscript
پنج شنبه 29 فروردین 1387, 21:42 عصر
دوست عزیز سورسش زیاده و در چند فایل و من هم دقیقاً نمیدونم کجای سورس مشکل داره تا اونو بزارم.
یه چیزی من توی phpnuke دیدم در مورد ورژن php کدش اینه


// Get php version
$phpver = phpversion();

// convert superglobals if php is lower then 4.1.0
if ($phpver < '4.1.0') {
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_SERVER = $HTTP_SERVER_VARS;
$_FILES = $HTTP_POST_FILES;
$_ENV = $HTTP_ENV_VARS;
if($_SERVER['REQUEST_METHOD'] == "POST") {
$_REQUEST = $_POST;
} elseif($_SERVER['REQUEST_METHOD'] == "GET") {
$_REQUEST = $_GET;
}
if(isset($HTTP_COOKIE_VARS)) {
$_COOKIE = $HTTP_COOKIE_VARS;
}
if(isset($HTTP_SESSION_VARS)) {
$_SESSION = $HTTP_SESSION_VARS;
}
}

// override old superglobals if php is higher then 4.1.0
if($phpver >= '4.1.0') {
$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_SERVER_VARS = $_SERVER;
$HTTP_POST_FILES = $_FILES;
$HTTP_ENV_VARS = $_ENV;
$PHP_SELF = $_SERVER['PHP_SELF'];
if(isset($_SESSION)) {
$HTTP_SESSION_VARS = $_SESSION;
}
if(isset($_COOKIE)) {
$HTTP_COOKIE_VARS= $_COOKIE;
}
}

حالا آیا لازمه که من این کد رو در صفحات لازم قرار بدم

امید امرایی
جمعه 30 فروردین 1387, 13:45 عصر
بنده فکر می کنم session.auto_start در سرور مورد نظر شما باید On باشه و در این صورت احتمالا شما اقدام به قرار دادن یک Object در یک session می کنید و این خطا ایجاد می شه چرا که جزئییات کلاس باید قبل از استارت شدن session بار بشن در حالی که نشت هنوز آغاز نشده . در حالی که در سیستم محلی شما Off هستش که این امکان رو به شما می ده تا یک Object رو به session نسبت بدید.

بهتره ابتدا قبل از هز چیز این موضوع رو چک کنید .


phpinfo();


در غیر این صورت اشکالات متعدد دیگه ای هم می تونه وجود داشته باشه که بدون دیدن سورس و یا اشاره به زمان دقیق حادث شدن خطا به دلیل همین تعدد امکان ردگیری و رفعشون وجود نداره

maysamscript
جمعه 30 فروردین 1387, 21:32 عصر
session.auto_start off هست حالا چطور on کنم

musiox
جمعه 30 فروردین 1387, 21:56 عصر
مگه نمیگه چه خطی خطا میده؟

maysamscript
جمعه 30 فروردین 1387, 22:07 عصر
مگه نمیگه چه خطی خطا میده؟
منظورت رو نمی فهمم

musiox
جمعه 30 فروردین 1387, 22:15 عصر
<filename> on line <line>
منظورم همون line دیگه .

maysamscript
جمعه 30 فروردین 1387, 22:47 عصر
چرا اینم خطش

$query="select `$field` from `user` where `username`='$username'";
این خط توی یک متد واقع در یک کلاس قرار گرفته
وقتی متغیر های field و username رو بجاش یه مقداری میزارم دیگه اون خطا رو نمیده ولی وقتی متغیر باشه خطا میده حالا من نمیدونم منشأ اصلی خطا کجا هست.
اگه خواسته باشم session.auto_start رو تو هاست on کنم چکار باید بکنم

musiox
شنبه 31 فروردین 1387, 08:23 صبح
برو بگرد دنبال جایی که اون دوتا متغیرت مقدار دهی میشن . اشکال اونجاست. می تونی از var_dump هم برای دیدن مقدار و نوعشون استفاده کنی.

maysamscript
شنبه 31 فروردین 1387, 08:28 صبح
username از طریق سشن مقدار دهی میشه . غلط نکنم هاست من با سشن مشکل داره چون تو لوکال هیچ مشکلی ندارم

امید امرایی
شنبه 31 فروردین 1387, 20:34 عصر
$query="select `$field` from `user` where `username`='$username'";رو به

$query="SELECT ".$field." FROM user WHERE username='$username'";تغییر بدید انشاالله که درست می شه .
اگه خطا واقعا توی همین خط ایجاد می شه

maysamscript
شنبه 31 فروردین 1387, 23:29 عصر
تغییر بدید انشاالله که درست می شه .
قبلاً این کار رو کردم درست نمیشه

اگه خطا واقعا توی همین خط ایجاد می شه
علت اینکه من خطی که خطا در اون اتفاق می افتاد رو در اول نمیگذاشتم به خاطر گمراه کنندگی اون خط بود. من مطمئنم خطا در این خط تولید نمیشه. علت اصلی اون سشنه ولی نمیدونم سشن در هاست من چه مشکلی داره.
من سشن رو در متدهای یک کلاس استفاده کردم وقتی جلوی ایجاد آبجکتی از اون کلاس رو میگیرم دیگه اون ارور ظاهر نمیشه . من php ورژن 5.2.5 رو ندارم اگه شما دارید این رو تست کنید ببینید آیا مجاز به استفاده از سشن در کلاس هستید یا نه. بعد از ساخت آبجکتی از کلاس این کد رو هم اضافه کنید (لطفاً)

echo $_SESSION['user'];

musiox
یک شنبه 01 اردیبهشت 1387, 10:11 صبح
والا ما هم وسعمون نمی کشه ! ولی مشکل جای دیگس . شما وقتی مقدار به سشن نمی دی معلومه که ارور نمی ده . چون توی این خط میاد یه کلاس رو به رشته تبدیل کنه که نمی تونه و این خطا رو می ده دیگه .

maysamscript
یک شنبه 01 اردیبهشت 1387, 10:33 صبح
ممنون از اینکه وقت گذاشتید. فکر کنم باید هاستم رو عوض کنم چون تو لوکال هیچ اروری نمیده و برنامه درست عمل میکنه. نظر شما چیه؟ یا اگر از پشتیبانی هاست درخواست کنم که ورژن php رو به 5.2.4 کاهش بده به نظر شما درست میشه یا اصلاً چنین درخواستی امکانپدر هست یا نه.
بازم ممنون.

امید امرایی
یک شنبه 01 اردیبهشت 1387, 13:34 عصر
من سشن رو در متدهای یک کلاس استفاده کردم وقتی جلوی ایجاد آبجکتی از اون کلاس رو میگیرم دیگه اون ارور ظاهر نمیشه . من php ورژن 5.2.5 رو ندارم اگه شما دارید این رو تست کنید ببینید آیا مجاز به استفاده از سشن در کلاس هستید یا نه. بعد از ساخت آبجکتی از کلاس این کد رو هم اضافه کنید (لطفاً)

echo $_SESSION['user'];

در این مورد بنده در همون ایتدا بهتون گفتم که ممکنه توی Object باشه و برای حل این مشکل باید session autostart در حالت On باشه که بعید می دونم تکنیکال شما حاضر به انجام همچین کاری بشه .

maysamscript
یک شنبه 01 اردیبهشت 1387, 14:23 عصر
برای حل این مشکل باید session autostart در حالت On
یعنی مشکل اصلی همین جاست.

oxygenws
یک شنبه 01 اردیبهشت 1387, 14:31 عصر
var_dump مربوط به field و username رو قبل از خطی که خطا می‌ده رو به دست بیار و بنویس.

maysamscript
یک شنبه 01 اردیبهشت 1387, 18:28 عصر
متغیری که توی var_dump گذاشتم همون نام کاربری هست که مسیر زیر رو طی میکنه:
اول مقدار اون توسط آرایه post دریافت میشه بعد وجود داشتن چنین کاربری ودرست بودن پسورد چک میشه. البته این متغیر یه سری هم به تابع mysql_escape_string میزنه وقتی که به سلامت از این تابع بیرون اومد و معتبر بودن اون نیز تأیید شد میره توی سشن. بعد مقدار اون توسط یک متد که میخواد اطلاعاتی راجع به اون کاربر بده از سشن درخواست میشه ولی سشن نامرد این جواب رو میده..

//var_dump result
object(user)#3 (9) { ["name"]=> NULL ["lastname"]=> NULL ["username"]=> NULL ["pass"]=> NULL ["dcoad"]=> NULL ["email"]=> NULL ["tel"]=> NULL ["sql"]=> object(sql)#4 (4) { ["host"]=> string(9) "localhost" ["username"]=> string(13) "dbuser" ["pass"]=> string(11) "dbpass" ["dbname"]=> string(12) "dbname" } } یعنی دوتا کلاس رفتن تو سشن. مگه سشن مدرسه است!!!!

oxygenws
یک شنبه 01 اردیبهشت 1387, 18:36 عصر
اگر واقعا همینی باشه که گفتی، بهتره نسخه کلاینتت رو به‌روز کنی، چون این برنامه اصولا نباید تو کلاینت هم کار کنه!! :)

musiox
یک شنبه 01 اردیبهشت 1387, 18:43 عصر
من که از همون اول بهت گفتم که چکار کن . شما دوباره روند برنامتو چک کن چون طبیعتا نباید توی کلاینتت هم جواب بده .

oxygenws
یک شنبه 01 اردیبهشت 1387, 18:46 عصر
من باز هم راهنمای پی‌اچ‌پی رو چک کردم و تغییر مستندی تو این دو نسخه که گفتی ایجاد نشده:
http://www.php.net/manual/en/language.types.string.php#language.types.string.ca sting

maysamscript
یک شنبه 01 اردیبهشت 1387, 19:08 عصر
مشکل از هاست نیست؟ اگه یه هاست مجانی خوب سراغ داریند بگید تا تو اون تست کنم.

امید امرایی
یک شنبه 01 اردیبهشت 1387, 20:54 عصر
http://www.phpbuilder.com/board/showthread.php?threadid=10333397

maysamscript
یک شنبه 01 اردیبهشت 1387, 21:14 عصر
ممنون از لینکی که دادی

If you do turn on session.auto_start then you cannot put objects into your sessions since the class definition has to be loaded before starting the session in order to recreate the objects in your session. »
آیا واقعاً همین جوریه که میگه؟
تا اونجایی که من میدونم اول سشن رو استارت کردم بعد آبجکت ها رو ایجاد کردم

امید امرایی
یک شنبه 01 اردیبهشت 1387, 21:18 عصر
بله دقیقا به همین شکله

صحبت این نیست که شما کی استارت کردین چون به هر حال Object زودتر از نشست load و استارت می شه .
دقت کنید که : class definition has to be loaded before starting the session

maysamscript
یک شنبه 01 اردیبهشت 1387, 21:23 عصر
حالا چه کار کنم؟
از پشتیبانی هاست بخوام که session.auto_start رو on کنه. تو کلاینت که خاموشه

امید امرایی
یک شنبه 01 اردیبهشت 1387, 21:25 عصر
قطعا همچین کاری رو انجام نمی دن چون مطمئنا گارانتی سرو هاشون از بین می ره . ولی بهتر اینه که ابتدا این موضوع و دقیق تر روی سرور محلی خودتون تست کنید با On و Off کردن session.auto-start

musiox
یک شنبه 01 اردیبهشت 1387, 22:48 عصر
تو کلاینت که خاموشه
خب این بنده خدا که می گه تو لوکال خاموشه که .
در ضمن , شما اگه دقت کنی می بینی که

یعنی دوتا کلاس رفتن تو سشن.
یعنی مقدار توی سشن ذخیره شده و بعد زمان استفاده از اون خطا میده . اگه قرار به خطا بود که باید همون اول خطا میداد .
یه چیز دیگه . این آقا اصلا انتظار کلاس نداره . بلکه انتظار یه رشته داره .
حالا نتیجه اخلاقی چی میشه؟!

maysamscript
یک شنبه 01 اردیبهشت 1387, 22:56 عصر
البته یکی از کلاس ها به عنوان عضوی از کلاس اولیه

maysamscript
دوشنبه 02 اردیبهشت 1387, 21:51 عصر
از کلیه دوستانی که در این تاپیک جواب دادن ممنونم.
من مشکلم حل نشد و تصمیم گرفتم که کلاً سیستم سشن رو در دیتابیس قرار بدم تا هم امنیت بره بالاتر و هم از دست اون ارور راحت بشم. ولی من اصول قرار دادن سشن ها رو در دیتابیس نمیدونم. در این زمینه اگر مقاله یا لینکی دارید بدید (حتی الامکان فارسی باشه)
در غیر اینصورت تاپیکی با موضوع شبیه سازی سشن در دیتابیس ایجاد می کنم
چطوره؟

maysamscript
چهارشنبه 04 اردیبهشت 1387, 12:23 عصر
آقا مشکلش حل شد.[FONT=Tahoma]register_globals روی on بود و این باعث میشد که کلاس user بره توی $session['user'] قرار بگیره.

باز هم از تمام کسانی که قصد کمک داشتند ممنونم