Autor Zpráva
Kwoky
Profil *
Dobrý den,
mám poměrně hloupý problém. Z historických důvodů běží na našem pracovním serveru Apache 1.3 a PHP 4.0.5. Vytvořil jsem PHP kód, který mi pod PHPTriadem na jiném PC bez potíží funguje. Potíž je v tom, že na pracovním serveru kolabuje session_start. Vypisuje to chybovou hlášku:
Warning: open(/tmp\sess_08d728ec3281be8d0082a65e7d460d78, O_RDWR) failed: m (2) in C:\apache\htdocs\intranet\admin.php on line 2

Kontroloval jsem php_info a session jsou povolené (a adresář /tmp asi nastavený).
Zarazilo mě ale, že adresář /tmp ve složce s Apachem nebyl vůbec vytvořený. Po jeho ručním vytvoření je hláška stále stejná.

Můžete mě prosím nasměrovat, kudy se mám vydat, aby fungovalo vytváření session i v práci? Děkuji za rady.
Majkl578
Profil
V Linuxu musí být použito lomítko /, jiné nebude fungovat.
Adresář /tmp je globální adresář, není třeba ho vytvářet, ani nijak měnit.

Nebo server běží na Windows Server?
Pokud ano, bude třeba změnit session_save_path na platnou cestu systému Windows.
Kwoky
Profil *
Děkuji za radu. Jede to na Windows 2000 server.
Nastavil jsem místo "/tmp" "C:/apache/tmp" a trochu jsem se posunul dál. Chybová hláška se už sice neobjevuje a soubor se session se vytvoří, ale zůstává prázdný - 0 bytů. Na druhém počítači se do něj bez problému ukládají proměnné.
Jaké údaje sem mám dát, aby se z nich dalo přijít na chybu? phpinfo? Všechna nastavení v sekci "session" jsou na obou počítačích stejná.
nightfish
Profil
jsou stejné i verze PHP?
Kwoky
Profil *
Nejsou. Na pracovním serveru je 4.0.5, doma mám 4.1.1.
Teď jsem objevil, že nejde ještě další věc, takže to vypadá na něco hlubšího než jen nastavení jednoho parametru. Zkusím to prozkoumat a dám vědět.
Kwoky
Profil *
Tak chyba je v tom, že nefunguje předávání proměnných a to ani metodou POST ani GET. Dá se to nějak zapnout?

Ještě se mi prosím podívejte na tento kód. Doma jede, na pracovním serveru ne (nepředává proměnnou "$heslo"). To jen pro jistotu, jestli tam nemám nějakou "botu". Díky.
$heslo        =$_POST["heslo"];

if ($heslo=="password")
{$_SESSION["sessislogged"] = 1;}

if ($_SESSION["sessislogged"] != 1){
  echo '<form action="admin.php" method="post">
Zadej heslo: <input type="password" value="" name="heslo">
</form>';
  }
nightfish
Profil
jak je nastavena direktiva register_long_arrays na obou serverech?
EDIT: beru zpět, tato direktiva existuje od 5.0.0
EDIT2: ááha, už to asi mám
na http://www.php.net/manual/en/reserved.variables.post.php se píše:
4.1.0 Introduced $_POST that deprecated $HTTP_POST_VARS.
Neboli česky: ve verzi 4.1.0 bylo zavedeno pole $_POST, v důsledku čehož bylo $HTTP_POST_VARS označeno za zastaralé.

takže buď přepsat $_POST na $HTTP_POST_VARS (a dát si pozor na to, že $HTTP_POST_VARS není superglobální), nebo nacpat na server v práci novější PHP (stačí nějaká ta 4.1)
Kwoky
Profil *
Nakonec jsem použil verzi 4.4.6 a vše se již chová zcela korektně a tak, jak jsem si přál. Děkuji za rady a považuji téma za uzavřené.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0