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!
- 1840 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
É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?
- A hozzászóláshoz be kell jelentkezni
É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
- A hozzászóláshoz be kell jelentkezni
session.auto_start mire van allitva a ket szerveren?
- A hozzászóláshoz be kell jelentkezni
Ugyan lemaradt, de a shared.php-ben van session_start()...
A másik gond: az "éles" szerver egy ingyenes tárhelyszolgáltató...
szerk: megnéztem, nálam:
session.auto_start = 0
--------------------
Powered by Ubuntu 5.10
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Hogy mi volt letiltva? Nem a register globals -ra gondolsz?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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).
- A hozzászóláshoz be kell jelentkezni
NNNEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!
Kicseréltem a $blog-ot $text-re és most jó! Hmm... Ez most hogy van? Én még ilyet nem láttam... Teljesen paff vagyok... Ez hogy kavarhatott be???
--------------------
Powered by Ubuntu 5.10
- A hozzászóláshoz be kell jelentkezni