Newsgroup: it.comp.www.php
Titolo: Upgrade alla 4.4.4 = non va più lo script

Il mio provider ha aggiornato il server php dalla 3 alla 4.4.4 senza
preoccuparsi delle innumerevoli conseguenze tra cui uno script che feci
fare su misura e che ora non va più.
Cosa fa lo script:
il form che fa partire lo script mi permette di UPLOADare un file e
scegliere da un menù a tendina come chiamarlo.
L'amministratore di rete, paranoico sulla sicurezz e che ammette di non
conoscere il PHP, mi dice che questo script accede direttamente alle
variabili che gli vengono passate dalla form. Cosa che non e' piu'
consentita nelle ultime versioni di PHP perche' e' un enorme buco di
sicurezza.
Suggerisce di cambiarle con un accesso come si deve; esempio:
$settore deve diventare $_REQUEST["settore"], idem per $MyFile, che
dovrebbe diverntare $_REQUEST["MyFile"].
Lo script è composto da poche righe che sono le seguenti:
<?
        If($MyFile != "none") {
copy($MyFile,"/usr/local/local/www/DOMINIO/www/admin/tmp");
                 unlink($MyFile);
	 echo"Hai appena uploadato:  $MyFile_name\n";
         echo"Di dimensioni:  $MyFile_size\n";
         if (!copy("tmp","../set0$settore.html")) {
	 echo "Copia non riuscita! "; }
	 $exec=exec("rm -r  tmp");
	 $url_success ="../set0$settore.html";
	 echo("<meta http-equiv = refresh content=2;url=".$url_success.">");
	 }
         else {
                 echo"Non hai uploadato nessun file !!";
         }
         ?>
Lo script modificato è:
<?
        If($_REQUEST["MyFile"] != "none") {
copy($_REQUEST["MyFile"],"/usr/local/local/www/DOMINIO/www/admin/tmp");
                 unlink($_REQUEST["MyFile"]);
	 echo"Hai appena uploadato:  $MyFile_name\n";
         echo"DI dimensioni:  $MyFile_size\n";
         if (!copy("tmp","../set0$_REQUEST["settore"].html")) {
	 echo "Copia non riuscita! "; }
	 $exec=exec("rm -r  tmp");
	 $url_success ="../set0$_REQUEST["settore"].html";
	 echo("<meta http-equiv = refresh content=2;url=".$url_success.">");
	 }
         else {
                 echo"Non hai uploadato nessun file !!";
         }
         ?>
Lanciandolo mi da una pagina bianca.
Qualcuno che mastica PHP mi sa suggerire qualcosa per farlo tornare a
funzionare ?
Mille grazie
Mag.

 funzionare ?
http://it2.php.net/manual/en/migration4.php
http://it2.php.net/manual/en/features.file-upload.php
Bye.

 
Magillina??
benvenuta figlia mia!
-- 
doh!

 Il Wed, 17 Jan 2007 06:31:42 -0800, Magillina ha scritto:
ti ringrazio per i suggerimenti , ora va parzialmente nel senso che il
file sembra che lo uploadi ma sul server non è presente e
l'amministratore mi dice che dal LOG di apache risulta questo errore:
[Thu Jan 18 07:47:23 2007] [error] [client ***.***.***.***] PHP
Warning:
  copy(tmp) [<a href='function.copy'>function.copy</a>]: failed to open
stream: No such file or directory in
/usr/local/local/www/DOMINIO/www/admin/trasferisci.php on
line 7, referer: 
http://www.DOMINIO/admin/
Ora il file è questo.
<?php
        If($_REQUEST["MyFile"] != "none") {
copy($_FILES["MyFile"],"/usr/local/local/www/DOMINIO/www/admin/tmp");
			    unlink($_REQUEST["MyFile"]);
	 echo"Hai appena uploadato:  $MyFile_name\n";
         echo"di dimensioni:  $MyFile_size\n";
         if (!copy("tmp","../set0".$_REQUEST["settore"].".html")) {
	 echo "Copia non riuscita! "; }
	 $exec=exec("rm -r  tmp");
     $url_success ="../set0".$_REQUEST["settore"].".html";
	 echo("<meta http-equiv = refresh content=2;url=".$url_success.">");
	 }
         else {
                 echo"Non hai uploadato nessun file !!";
         }
         ?>
un ultimo aiutino, please
grazie, grazie ancora per i preziosi suggerimenti
Mag.

 	 $exec=exec("rm -r  tmp");
E qui usa unlink()
O meglio, sposta il file direttamente dove dovrebbe andare, senza fare
doppio passaggio che impegna l'hard disk tre volte invece di quasi nessuna
(la move_uploaded_file sposta il file solo se fisicamente si trova su due
partizioni diverse, altrimenti si limita a rinominarlo, quindi e` molto
piu` efficiente)
Ci sarebbero altre considerazioni di sicurezza, per le quali ti consiglio
di studiare meglio PHP. Praticamente andrebbe riscritta gran parte
dell'applicazione.
Giusto per dirne una: non dovresti usare parametri passati dall'utente nel
nome del file (la $_REQUEST["settore"]), ma dovresti generarlo tu sul
server.
Bye.

 Hai scritto due volte "local"
Mi dice l'admin che è corretto così e che ci vuole.
In seguito ad alcuni tuoi consigli ora l'ho sistemato meglio ed è
così:
<?php
        If($_REQUEST["MyFile"] != "none")
		{
move_uploaded_file($_FILES["MyFile"],"/usr/local/local/www/DOMINIO/www/admin/tmp");
        echo"Hai appena uploadato il file";
        if (!copy("tmp","../set0".$_REQUEST["settore"].".html")) {
         echo "Copia non riuscita! "; }
         $exec=exec("rm -r  tmp");
         $url_success ="../set0".$_REQUEST["settore"].".html";
         echo("<meta http-equiv = refresh
content=2;url=".$url_success.">");
         }
      else {
            echo"Non hai uploadato nessun file !!";
         }
         ?>
Così com'è nel LOG di Apache dice:
[Fri Jan 19 15:25:22 2007] [error] [client ***.***.***.***]  PHP
Warning:
  copy(tmp) [<a href='function.copy'>function.copy</a>]: failed to open
stream: No such file or directory in
/usr/local/local/www/DOMINIO/www/admin/trasferisci.php on
line 11, referer: 
http://DOMINIO/admin/
Il file non viene uploadato.
Cosa devo farci ? Non riesco più a venirne fuori. :-(
Dai manuali che mi hai linkato non ho trovato la mia soluzione,
Alessandro Please, so che sicuramente per te è una cavolata, aiuto.
Mag.

 
Non ho letto tutto il thread, quindi mi scuso per eventuali 
errori/imprecisioni  ma perchč non fai direttamente il 
move_uploaded_file sul file "buono", ovvero senza fare move, copy e del?
Inoltre il file uploadato č $_FILES["MyFile"]['tmp_name'], quindi 
dovresti fare un:
$nomefile = "/usr/local/local/www/DOMINIO/www/set0". 
$_REQUEST["settore"]. ".html";
move_uploaded_file($_FILES["MyFile"]['tmp_name'], $nomefile);
Fai un print_r($_FILES) e vedi cosa ti arriva.
Non usare $_REQUEST ma $_POST/$_GET
	Francesco