Newsgroup: it.comp.www.php
Titolo: Permessi cartella temporanea

Ciao,
ho dei problemi di permessi alla cartella temporanea di php quando
cercando di uploadare un file.
Per sicurezza, qual è la cartella temporanea di php? Io credo
"uploadtemp".
Quali sono gli utenti che vi possono scrivere? Ho provato anche ad
impostare "everyone" coi permessi in scrittura (senza riavviare il
server), ma niente.
Grazie

 ha detto:

che sistema operativo hai? qual è la cartella temporanea indicata nel
php.ini?
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Staff di E-Xoopport - 
http://www.e-xoopport.it

 che sistema operativo hai? qual è la cartella temporanea indicata nel php.ini?
Dunque:
- s.o.Windows 2003 Web Edition
- php 5.1.5
- upload_tmp_dir: "e:\PHP\uploadtemp"
Ho provato a mettere i permessi in scrittura anche ad "everyone", ma
niente. E' come se in quella cartella i siti dinamici in php non
potessero scriverci.
Ecco l'errore che mi restituisce quando cerco di caricare un'immagine
nella sezione admin del sito (ho mascherato il path del sito con tre
asterischi):
Warning: move_uploaded_file(/200610031105440.Tramonto.jpg)
[function.move-uploaded-file]: failed to open stream: Permission denied
in ***\Classes.php on line 1402
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to
move 'e:\PHP\uploadtemp\phpB.tmp' to '/200610031105440.Tramonto.jpg' in
***\Classes.php on line 1402
Database error: Invalid SQL: INSERT INTO pagine_files (pgf_titolo,
pgf_file, pgf_pagina) VALUES ('dd', NULL, 456)
MySQL Error: 1048 (Column 'pgf_file' cannot be null)
Session halted.
Grazie infinite!

 
Ma in questo modo stai muovendo il file sulla root del disco
(/200610031105440.Tramonto.jpg)
	Francesco

 	Francesco
Quindi è l'istruzione che è sbagliata, cioè non viene messo nella
cartella di upload temporanea, ma nella root?? Quindi è nel file php
del sito (e non nel php.ini) che devo far variare il puntamento?

 
Per fare l'upload che istruzioni esegui? Inoltre come ti hanno suggerito 
su php.ini (ovvero phpinfo(); che dir temporanea hai?
	Francesco

 Per fare l'upload che istruzioni esegui? Inoltre come ti hanno suggerito su php.ini (ovvero phpinfo(); che dir temporanea hai?
Dal php.ini la cartella temporanea mi risulta:
upload_tmp_dir: "e:\PHP\uploadtemp"
Non sono molto esperto di Php, come vedi, ed è il mio cliente ad aver
caricato il sito. Dovrei chiedere a lui. Quindi secondo te è
sufficiente modificare il caricamento, quindi i file del sito del
cliente, non quelli di php. Pensavo che il codice del sito si riferisse
ai parametri passatigli da php.ini.

 
Al momento che fai l'upload di un file, php lo mette temporaneamente 
nella dir temp specificata in php.ini. Poi, normalmente, con 
l'istruzione move-uploaded-file si sposta il file dalla dir temporanea 
alla dir utilizzata (anche questa deve avere il permesso di scrittura 
per il server web). Il tuo programma si blocca proprio durante lo 
spostamento dalla dir temporanea alla dir di destinazione:
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to
move 'e:\PHP\uploadtemp\phpB.tmp' to '/200610031105440.Tramonto.jpg' in
Dir temporanea: e:\PHP\uploadtemp\
Nome file temporaneo di upload: phpB.tmp
Dir destinazione: /
Prova a cercare nel codice l'istruzione move_uploaded_file e vedi che 
parametri ha.
	Francesco

 Prova a cercare nel codice l'istruzione move_uploaded_file e vedi che parametri ha.
Sei gentilissimo.
Vorrei specificare una cosa, mi scuso per non averlo fatto prima: il
sito prima girava su un altro mio server (versione + vecchia di php, so
Windows 2000 Server) e il codice non  è stato cambiato.
Trovo citato move_uploaded_file in tre file: classes.php, connector.php
e files.php.
classes.php
=========
        if( move_uploaded_file($_FILES[$FileControl]["tmp_name"],
$this->TemporaryFolder . $ActualFileName) ) {
          $this->Value = $ActualFileName;
          $this->Text = $ActualFileName;
          if(strlen($this->State[0])) {
            if(file_exists($this->TemporaryFolder . $this->State[0])) {
              $this->CCSEventResult = CCGetEvent($this->CCSEvents,
"BeforeDeleteFile", $this);
              unlink($this->TemporaryFolder . $this->State[0]);
              $this->CCSEventResult = CCGetEvent($this->CCSEvents,
"AfterDeleteFile", $this);
              $this->State[0] = $ActualFileName;
            } else {
              if(!is_dir($this->TemporaryFolder . $this->State[1]) &&
file_exists($this->TemporaryFolder . $this->State[1])) {
                $this->CCSEventResult = CCGetEvent($this->CCSEvents,
"BeforeDeleteFile", $this);
                unlink($this->TemporaryFolder . $this->State[1]);
                $this->CCSEventResult = CCGetEvent($this->CCSEvents,
"AfterDeleteFile", $this);
              }
              $this->State[1] = $ActualFileName;
            }
          } else {
            $this->State[0] = $ActualFileName;
          }
        } else {
$this->Errors->addError($CCSLocales->GetText('CCS_TempInsufficientPermissions',
$this->Caption));
        }
      }
    } else {
      $this->SetValue(strlen($this->State[1]) ? $this->State[1] :
$this->State[0]);
connector.php:
===========
if (move_uploaded_file($_FILES['NewFile']['tmp_name'],$uniqueName) )
			{
				// name  not changed
				if($name == $uniqueName)
					$result = 0;
				else
				// name changed
					$result = "201,'$uniqueName'";
			}
			else
files.php:
=======
function uploadFile($Path, $File) {
	global $MY_ALLOW_UPLOAD_FILE, $MY_MESSAGES, $MY_DOCUMENT_ROOT,
$clear_upload;
	global $MY_ALLOW_EXTENSIONS, $MY_DENY_EXTENSIONS, $MY_MAX_FILE_SIZE ;
	if (!$MY_ALLOW_UPLOAD_FILE) return ($MY_MESSAGES['nopermtoupload']);
	if (!(is_dir($MY_DOCUMENT_ROOT.$Path))) return
($MY_MESSAGES['pathnotfound']);
	$newFile = $MY_DOCUMENT_ROOT.$Path.$File['name'];
	$parts = explode('.', $File['name']);
	$ext = strtolower($parts[count($parts)-1]);
	if (is_array($MY_DENY_EXTENSIONS )) {
		if (in_array($ext, $MY_DENY_EXTENSIONS)) return
($MY_MESSAGES['extnotallowed']);
	}
	if (is_array($MY_ALLOW_EXTENSIONS )) {
		if (!in_array($ext, $MY_ALLOW_EXTENSIONS)) return
($MY_MESSAGES['extnotallowed']);
	}
	if ($MY_MAX_FILE_SIZE) {
		if ($File['size'] > $MY_MAX_FILE_SIZE) return
($MY_MESSAGES['filesizeexceedlimit']);
	}
	if (!is_file($File['tmp_name']))  return
($MY_MESSAGES['filenotuploaded']);
	move_uploaded_file($File['tmp_name'], $newFile);
	chmod($newFile, 0666);
	$clear_upload = true;
	return false;
}

 $this->TemporaryFolder . $ActualFileName) ) {
Prova a fare un dump di $this e vedere cosa contiente TemporaryFolder
	Francesco


Ehm... e come si fa? :-)
A mio avviso non c'arriva proprio a scrivere in e:\php\uploadtemp,
perchè credo dovrei trovare qualche file temporaneo...

 
Allora prima del move fai un print_r($_FILE) e vedi le info del file 
uploadatato.
Poi aggiungi l'esempio suggeriti in 
http://it.php.net/manual/en/function.is-uploaded-file.php
 per vedere se 
il file è stato caricato
Per fare il dump di $this fai print_r($this)
	Francesco

 Per fare il dump di $this fai print_r($this)
Ahi! Non saprei proprio dove muovermi!


Ma non hai postato prima il codice?
Allora cerchi move_uploaded_file, prima di chiamare la funzione ci metti 
  (dovrebbe essere Classes.php on line 1402)
echo "<pre>";
echo "Variabiale FILE\n";
print_r($_FILE);
echo "Variabiale THIS\n";
print_r($this);
echo "Test UPLOAD\n";
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n";
    echo "Displaying contents\n";
    readfile($_FILES['userfile']['tmp_name']);
} else {
    echo "Possible file upload attack: ";
    echo "filename '". $_FILES['userfile']['tmp_name'] . "'.";
}
echo "Termine del debug\n";
die();
E vedi cosa ti mostra a video...
	Francesco