PHP Object probléma...

Sziasztok!

Lassan kezdek kissé nagyon ideges lenni!
Érdekes problémába ütköztem, remélem sikerül leírni érthetően elsőre:

Szóval van egy session változóm, ami egy object, az index.php-ben rögtön az oldal betöltésekor használva van, itt nincs is gond. Azonban van egy php file, ami az index.php-ben van beincludolva nagyjából a közepe felé, amikor ebben akarom meghívni (ternészetesen nem mindig, egy feltételtől függ, és az első hívás után van vele gond) az object egy tag függvényét, ezt kapom:

Fatal error: Call to a member function on a non-object in...

Nos, ezután már az index.php-ban is jelzi ugyanezt a hibát (addig nincs vele baja...)
A másik fura dolog, hogy a saját gépemen működik rendesen (EasyPHP alap config), és csak feltöltve csinálja ezt a hülyeséget. Mi lehet a gond?

Minden session_start() után megvizsgálom, hogy be van-e álltíva a változó (isset($_SESSION[...]))...

Nagyon nem tudom, mitől lehet... Ötlet?

Előre is köszi!

És bocsi, hogy ilyen hosszú lett!

Hozzászólások

Szerintem az történik, hogy az első esetben sem használod az osztályt, csak egy változóját kéred le. Az elérhető, a serialize miatt.
Mikor leraksz egy osztályt a session-be, akkor csak a serialized osztály kerül bele adatokkal, a tagfüggvények nem. Azokat neked kell megéleszteni.

Esetleg futtass le egy phpinfo();-t mindkét gépen, lehet, hogy régebbi verzió van az éles szerveren.

Ami elől menekülnek, az után szaladnak.

És az includolt fájból, hogyan éred el az objektumot, lehet, hogy a globális változók le vannak tiltva a másik szerveren. Kódot nem tudnál mutatni?

És azt honnan lehet megtudni, hogy le vannak-e tiltva?

Egyébként a php.net szerint a beincludolt fájlok megkapnak mindent. Gondolom ezt le lehet tiltani....

Forráskód?
Hmm... Igyakszem a lényeget:

index.php

<?php
include("shared/shared.php");
...

switch($module)
{
...
case "send_blog" : include("modules/SendEntry/Send_blog.php");break;
...
case"main":
{
$_SESSION['blog']->GetEntries(0);
$_SESSION['blog']->PrintSummary($_SESSION['user']->user_id,$_SESSION['user']->level);

}break;
...
}

shared.php

if(!isset($_SESSION['blog'])) {$_SESSION['blog']= new CBlog("blog",10);}

send_blog.php

case "update":
{
$_SESSION['blog']->UpdateBlog($_POST['title'],$_POST['sum'],$_POST['blog'],$_POST['id']);
echo "Frissítve!";
PrintBack(2);
}break;

Nagyjából ennyi a lényeg...
Azért nem az egészet, mert gondolom senkinek sincs kedve párszáz sort olvasgatni :)
--------------------
Powered by Ubuntu 5.10

session.auto_start mire van allitva a ket szerveren?

További fejlemények:

a send_blog.php elejére bettettem egy ilyet: if(!isset($_SESSION['blog']) || gettype($_SESION['blog']) != 'object') {echo "Nincs regelve!!!";}

Próba után: amikor először includolom a send_blog.php-t nem ír ki semmit, amikor másodszor, akkor már van gondja, de csak akkor, ha ott van a || gettype(...)

Egyelőre lövésem sincs, mi lehet...
--------------------
Powered by Ubuntu 5.10

A tárhelyszolgáltatóknál már beszívtam egy pár helyen, hogy le volt tiltva a paraméter-átadás. Szerintem vagy bontsad vagy függvényekre vagy esetleg a return-el lehet szórakozni. Amúgy az új PHP-verzión futtatott régi PHP-vel be lehet nézni, mert lefelé nem kompatibilis.

Ez a dolog egyre érdekesebb.

A kód (ez az includolt send_blog.php elején van, na jó van előtte egy if is, és annak az igaz ágában van ez):
echo "user: ".gettype($_SESSION['user'])."
";
echo "blog: ".gettype($_SESSION['blog'])."
";
echo "action: ".$action."
";

switch($action)
{
case "new":
{
$title = "";
$sum = "";
$blog = "";
$id = -1;
}break;

case "edit":
{
$_SESSION['blog']->GetEntry($_GET['id']);
if($_SESSION['blog']->entry['author_id'] != $_SESSION['user']->user_id)
{
die("Hozzáférés megtagadva!");
}
$entry = $_SESSION['blog']->GetOnlyText();
$title = $entry['title'];
$blog = $entry['blog'];
$sum = $entry['summary'];
$action = "update";
}break;

case "update":
{
$_SESSION['blog']->UpdateBlog($_POST['title'],$_POST['sum'],$_POST['blog'],$_POST['id']);
echo "Frissítve!";
PrintBack(2);
}break;
}

echo "user: ".gettype($_SESSION['user'])."
";
echo "blog: ".gettype($_SESSION['blog'])."
";

Az eredmény:

user: object
blog: object
action: new
user: object
blog: string

Na emberek, ez vajon hogy jött össze??? hogy lett hirtelen objectből, string??? A nep kérdése...

--------------------
Powered by Ubuntu 5.10

Hát izé. Első körben én saját session kezelést próbálnék írni és úgy hogy ne kelljen full ojjektumokat a kliensre meg sessionba pakolni. Ezzel együtt az inputok validálását (szépen magyarul...) is valahogy megoldanám, illetve alapvetően nem a meghívott függvényben.

http://www.php.net/manual/en/language.oop.serialization.php

Hmm, miért gond, hogy objektumok vannak a session-ben? Normális esetben így nem kell minden egyes lefutásnál lefoglalni, meg felszabadítani az objektumot... A másik: objektumot a kliensre? Ezt nem értem, hogy gondoltad? És végül: igen, azt inputok validálása nem az igazi, az unalmas részeket szeretem a végére hagyni :-)

--------------------
Powered by Ubuntu 5.10

Nekem nem gond, ha működik jól, úgy hogy nem függ mindenféle izéktől. Így is minden lefutásnál létrejön szerintem. Ha $_SESSION-ban tárolsz ilyeneket, az nem túl nyerő, bár elvileg a sessioncookieba csak a sessionid kerül, viszont ahol a session-öket tárolod, ahhoz minden oldal hozzáfér (mert a PHP-nek hozzá kell férnie).