Logiciel écrit pour PHP4 ne tourne pas sous PHP5

Petit nouveau ! | 5 Messages

02 nov. 2007, 11:28

Bonjour à tous.

Je suis novice en php, j'aurais besoin d'aide pour débugger un logiciel qui tourne parfaitement sous php4 mais pas sous php5.
Il s'agit d'un gestionnaire de documents, qui permet de mettre un ligne une documenthèque. Je n'ai pas écrit le code, mais il semble ne plus y avoir de support sur ce projet open source.
Il est installé sous Apache 2.2.6 + php 5.2.4 + MySql 5.0.45
La fonction d'upload ne fonctionne pas, la voici:
function uploadFile($dir, $file, $fileComment)
	{
		$fileName = strtolower($file["name"]);
		$fileTmpName = $file["tmp_name"];
		$fileSize = $file["size"];
		$folderPath = $this->folderPath($dir);
		$fileName = $this->secureFile($fileName);

		if (file_exists($this->root . "files" . $folderPath . SEP . $fileName))
		{
			$this->error = 5;
			return false;
		}

		if (move_uploaded_file($fileTmpName, $this->root . "files" . $folderPath . SEP . $fileName))
		{
			$q = "INSERT INTO " . TABLE_PREFIX . "files (id_folder, id_user, file_name, file_size, file_mtime, file_comment) VALUES ('" . $dir ."', '" . $_SESSION["Sid_user"] . "', '" . quote($fileName) . "', '" . $fileSize . "', NOW(), '" . quote($fileComment) . "')";
			query($q);

			$this->updateFolderSize($dir, $fileSize, "+");
			$this->updateFolderTime($dir);
			return true;
		}

		return false;
	}
A la mumière de mes faibles connaisances, il semblerait que le souci vienne de move_upload_file qui renvoie FALSE.
lorsque j'éxécute la fonction d'upload, il n'y a pas d'erreur mais le fichier n'est pas uploadé, ça me renvoie juste "OK" sachant que:
{
	var $errors = array (
				0  => "OK",
	);
Merci pour vos éclairages :wink:
Modifié en dernier par guyanel le 04 nov. 2007, 11:34, modifié 1 fois.

Invité
Invité n'ayant pas de compte PHPfrance

02 nov. 2007, 12:11

Bonjour,

ton bout de code est effectivement clean et ne devrait pas poser de probleme meme si quelques securisations des parametres s'imposent mais sont peut etre effectués en amont (méthode secure a ce qu'il semble, mais attention aussi au tmp_name).

Le probleme semble etre lié a ton environnement systeme ou au parametres de la classe.

En effet l'upload requiert :

- D'etre autorisé pour le php (voir php.ini)
- Que la taille autorisée soit suffisante pour tes besoins (voir php.ini)
- Que le repertoire dans lequel tu souhaite deplacer les fichiers soit ouvert en écriture pour ton code php (droit d'écriture fixé via le FTP par exemple)

- Que ta classe soit correctement configurée, en l'occurence les propriétés root, la constante SEP, et les autres éléments requis pour la partie SQL.

Petit nouveau ! | 5 Messages

02 nov. 2007, 13:29

merci pour la réponse.
- Que ta classe soit correctement configurée, en l'occurence les propriétés root, la constante SEP, et les autres éléments requis pour la partie SQL.
Ce qui précède est de l'hébreu pour moi, désolé.

php.ini doit être OK je pense:

Code : Tout sélectionner

; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = d:/INTRANET/Apache2.2/php5/uploadtemp ; Maximum allowed size for uploaded files. upload_max_filesize = 2M
Je vérifie les droits d'écriture.

Petit nouveau ! | 5 Messages

02 nov. 2007, 14:14

Lorsque j'uplode le fichier 10672.pdf par ex
j'ai pour

$fileName: 10672.pdf (normal)

$fileTmpName: D:INTRANETApache2.2php5uploadtempphpDF.tmp (euh... pas de slash?)

SEP: \




:roll:

Petit nouveau ! | 5 Messages

03 nov. 2007, 11:53

J'ai testé ce même code sous Easyphp1.8, ça marche très bien et
echo $fileTmpName me renvoie C:/Program Files/EasyPHP1-8\tmp\phpE.tmp

Si je le fais tourner sous Apache 2.2.6 + php 5.2.4 + MySql 5.0.45
echo $fileTmpName me renvoie D:INTRANETApache2.2php5uploadtempphpDF.tmp

Pourquoi les slash disparaissent-ils ?????

C'est donc bien lié à l'environnement, mais qu'est ce qui cloche?

Petit nouveau ! | 5 Messages

04 nov. 2007, 11:33

Il faut mettre ce paramètre dans php.ini:

Code : Tout sélectionner

; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off