Problema con $_SESSION

paolofru

Utente Attivo
28 Ott 2009
37
0
0
Salve Ragazzi, ho un problema noioso con $_SESSION....

In sostanza ho creato una applicazione in flash/php per fare l'upload di dati verso un ftp.
Nella prima pagina lo script si occupa di creare una cartella sul server il cui nome viene inserito nella variabile $cartella, quindi nella pagina "makedir.php" ho inserito:
PHP:
session_start();
//prendo il nome della cartella da creare
$nome_cartella=$HTTP_POST_VARS['azienda'];
$cartella=$nome_cartella;
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");
@ftp_login($conn,$login,$password);
//creo la cartella sull'ftp
$cartella = str_replace(" ", "_", $cartella);
@ftp_mkdir($conn,$cartella);
//mi sposto nella posizione creata
//@ftp_chmod ($conn, 0777, $cartella);
@ftp_chdir($conn,$cartella);
$_SESSION['cartella'] = $cartella;

Quindi in teoria mi sono immagazzinato nella sessione il nome della cartella che è stato inserito dall'utente...

In questa pagina c'è anche un uploader in flash al momento dell'invioche si appoggia alla pagina upload.php in questo modo:
PHP:
<?php
session_start();
$cartella_up = $_SESSION['cartella'];
echo session_id();
if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];                     
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");
@ftp_login($conn,$login,$password);
ftp_put($conn, ("$cartella_up/".$_FILES['Filedata']['name']), $tempFile, FTP_BINARY);   
               
ftp_close($conn);
}
?>

Quindi il lavoro che "dovrebbe" fare è inserire i file in upload dentro la cartella creata.... E INVECE NO! :D
la cosa strana è che se gli specifico io il nome della cartella, funziona perfettamente (es. $cartella_up="cartella_utente") ed inoltre se chiedo alla pagina upload.php di farmi una stampa di $cartella_up mi dice esattamente il nome inserito nel form utente...

avete qualche idea???

Grazie ;)
 
ciao
prova a cambiare $HTTP_POST_VARS['azienda'] che è deprecato
in
$nome_cartella=$_POST['azienda'];
poi a che ti serve il passaggio
$cartella=$nome_cartella;
?
non potresti semplicemente
$cartella=$_POST['azienda'];
?
per il resto non mi sembra di vedere errori, anche se dovrei guardare meglio,quindi la sessione dovrebbe funziare
 
ciao
prova a cambiare $HTTP_POST_VARS['azienda'] che è deprecato
in
$nome_cartella=$_POST['azienda'];
poi a che ti serve il passaggio
$cartella=$nome_cartella;
?
non potresti semplicemente
$cartella=$_POST['azienda'];
?
per il resto non mi sembra di vedere errori, anche se dovrei guardare meglio,quindi la sessione dovrebbe funziare

Si vero, codice inutile....
Mi chiedo (magari stò dicendo stupidaggini), $_SESSION salva una variabile, non un array giusto? Non è che c'è incongruenza tra le variabili che ho specificato io e quella che salva $_SESSION?

Ripeto, se inserisco io il nome della cartella, funziona tutto correttamente, sembra quasi che ci siano problemi tra
PHP:
$cartella_up = $_SESSION['cartella'];
e questo
PHP:
ftp_put($conn, ("$cartella_up/".$_FILES['Filedata']['name']), $tempFile, FTP_BINARY);
 
ciao
no non c'è incongruenza, prova a mettere per verifica

PHP:
<?php
session_start();
var_dump($_SESSION['cartella']);
$cartella_up = $_SESSION['cartella'];

//.......
e posta cosa risulta
 
ciao
quindi è probabile che l'errore sia nella ricezione del post, corregi così e metti il solito var_dump

PHP:
<?php
session_start();
//prendo il nome della cartella da creare
var_dump($_POST['azienda']);
$cartella=$_POST['azienda'];
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");
@ftp_login($conn,$login,$password);
//creo la cartella sull'ftp
$cartella = str_replace(" ", "_", $cartella);
@ftp_mkdir($conn,$cartella);
//mi sposto nella posizione creata
//@ftp_chmod ($conn, 0777, $cartella);
@ftp_chdir($conn,$cartella);
$_SESSION['cartella'] = $cartella; 
?>
e posta il risultato

dimenticavo verifica che l'istruzione session_start(); venga prima di qualsiasi output html (prima riga della pagina)
 
Risultato della pagina string(5) "paolo"

sisi, il session_start(); si trova sempre in testa alle pagine
 
Mi viene un altro dubbio, la pagina upload.php viene richiamata al momento del click sul tasto "carica" di flash, è possibile che sia per questo che non riesca a passargli correttamente il valore?

Però in upload.php ho provato a stampare $_SESSION['cartella'] e mi restituisce "Paolo" (valore inserito nel campo)
 
Ultima modifica:
Altra notizia... ora nella pagina upload.php, dopo aver creato la sessione, mi restituisce string(6) "paolo2" al var_dump... stò cominciando a non capire... :(
 
ciao
se nel file makedir.php crei la sessione, poi che tu carichi o meno flash la sessione rimane, quindi la ritrovi nel upload.php
le sessioni esistono sino a che non esci dal bw o chiudi il sito
 
ciao
se nel file makedir.php crei la sessione, poi che tu carichi o meno flash la sessione rimane, quindi la ritrovi nel upload.php
le sessioni esistono sino a che non esci dal bw o chiudi il sito

Ok, proviamo a raggirare il problema, invece che specificare la cartella di upload nella stringa
PHP:
ftp_put($conn, ("$cartella_up/".$_FILES['Filedata']['name']), $tempFile, FTP_BINARY);

cosa ne dici se la specifichiamo nei parametri di connessione?

PHP:
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");

Però, come lo imposto? :D
 
ho provato a riformulare la cosa in questi termini:
PHP:
<?php
session_start();
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");
@ftp_login($conn,$login,$password);
$cartella_up = $_SESSION['cartella'];
echo $cartella_up;
@ftp_chdir($conn,$cartella_up);
if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];                     

ftp_put($conn, ($_FILES['Filedata']['name']), $tempFile, FTP_BINARY);   
               
ftp_close($conn);
}
?>

mi fa l'upload del file, ma la mette nella cartella root, non si sposta nella cartella richiesta!
 
ciao
non credo che tu possa mettere la cartella in fpt_connet, comunque dai un occio a
http://it.php.net/manual/en/function.ftp-connect.php

comunque elimina il silent (le @) in modo da vedere quali e se ci sono errori (le @ si mettono eventalmente dopo quando tutto funzia)
comunque usa sempre i var_dump per vedere dove si inceppa
PHP:
<?php
session_start();
//prendo il nome della cartella da creare
$nome_cartella=$HTTP_POST_VARS['azienda'];
$cartella=$nome_cartella;
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");
var_dump($conn);// FALSE se non si connette
ftp_login($conn,$login,$password);
var_dump(ftp_login);// FALSE se non si logga anche se php dovrebbe darti un warning
//creo la cartella sull'ftp
$cartella = str_replace(" ", "_", $cartella);
ftp_mkdir($conn,$cartella);
//mi sposto nella posizione creata
//@ftp_chmod ($conn, 0777, $cartella);
ftp_chdir($conn,$cartella);
$_SESSION['cartella'] = $cartella;
?>
 
forse ho trovato il problema, facendo un var_dump sull'istruzione ftp_chdir mi restituisce questo errore:

Warning: ftp_chdir() [function.ftp-chdir]: Can't change directory to test_1: No such file or directory in /web/htdocs/www.fruliopaolo.it/home/upload_clienti_2/upload.php on line 23
bool(false)

come se non riesca a cambiare directory, può essere questo il problema?
 
E' tutto molto strano, ora stò utilizzando questo codice:
PHP:
<?php
session_start();
$login=xyz;
$password=xyz;
$conn = ftp_connect("xx.xx.xx.xx") or die("Could not connect");

ftp_login($conn,$login,$password);
echo "<br/>";
echo $_SESSION['cartella'];
echo "<br/>";
$cartella_up = $_SESSION['cartella'];
echo $cartella_up;
echo "<br/>";
var_dump(ftp_pwd($conn));
echo "<br/>";

var_dump(ftp_chdir($conn,$cartella_up));
echo "<br/>";

var_dump(ftp_pwd($conn));

if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];                    

ftp_put($conn, ($_FILES['Filedata']['name']), $tempFile, FTP_BINARY);  
              
ftp_close($conn);
}
?>

stò facendo il dump su ogni passaggio e funziona tutto correttamente, però quando fà l'upload di un file invece di metterlo nella $cartella_up lo mette nella root...

Per togliermi lo sfizio ho provato anche a fare un upload "manuale" con le istruzioni:
PHP:
$file='readme_test.htm';
$remote_file = 'readme_test.htm';
ftp_put($conn, $remote_file, $file, FTP_ASCII);

e lo inserisce perfettamente nella cartella richiesta, non in root!

Stò cominciando ad esaurire i tentativi...
 
ciao
quindi tutto ok?

Purtroppo no, non capisco perchè ma non riesce in nessun modo a posizionare i file dentro la cartella, li mette in root...
Mi sono tolto un altro scrupolo, ho incluso lo script di upload.php direttamente dentro makedir.php, così evitavo i passaggi di sessione...
A questo punto la variabile $cartella era già lì, nessun passaggio, nessun casino... e invece niente, continua a fare l'upload nella root dell'ftp e non in $cartella!!!

Cmq grazie Borgo Italia, sei l'unico che mi dà risposte! :D
 
Sono arrivato ad una conclusione, non si riesce a passare la variabile...

Se uso
PHP:
ftp_put($conn, ("$cartella/".$_FILES['Filedata']['name']), $tempFile, FTP_BINARY);
non funziona...

se invece lo metto io manualmente
PHP:
ftp_put($conn, ("paolo_2/".$_FILES['Filedata']['name']), $tempFile, FTP_BINARY);

Funziona perfettamente....

Se con un upload semplice del tipo
PHP:
$file='README.htm';
$remote_file = 'readme.htm';
ftp_put($conn, $remote_file, $file, FTP_ASCII);

funziona tutto perfettamente, perchè nell'altro non mi legge la variabile? non capisco cosa non gli piaccia!
 

Discussioni simili