8796 sujets

Développement web côté serveur, CMS

Bonjour à vous, chez membres de Alsacréations Smiley biggrin
C'est en ce premier post que je vais poster mon premier problème sur Alsacréations Smiley lol

J'ai créer un petit système d'upload de fichiers, voici mon script :


<form method="POST" action="ftp.php" enctype="multipart/form-data">	
			Fichier : <input type="file" name="fichier"><br>
			<input type="hidden" name="location1" value="<?php echo $pwd1 ?>">
			<input type="submit" name="envoyer" value="Envoyer le fichier">
			</form>
			
			if(isset($_FILES['fichier']))
			{ 
			$location1 = $_POST['location1']; 
			$dossier = "/var/www/vhosts/panel.deathrowrpg.fr$location1/";
			$fichier = basename($_FILES['fichier']['name']);
			//Début des vérifications de sécurité...
			if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
			{
				$erreur = "Cette extension n'est pas autorisée.";
			}
			if($taille>$taille_maxi)
			{
				$erreur = 'Le fichier est trop gros pour être uploadé.';
			}
			if(!isset($erreur))
			{
			$fichier = strtr($fichier, 
				'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
				'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
				if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
				{
					echo 'Upload effectué avec succès !';
				}
				else //Sinon (la fonction renvoie FALSE).
				{
					echo 'Echec de l\'upload !';
				}
			}
			else
			{
				echo $erreur;
			}
			}


Si je télécharge un petit fichier normal, comme un .ini de 50Ko, ça marche et ça m'affiche "Upload effectué avec succès !".
Mais, si je télécharge un fichier .amx, qui fais dans les 5000Ko, ça ne marche pas et me retourne "Echec de l'upload"...

Voici les extensions possibles :

$extensions = array('.amx', '.pwn', '.cfg', '.txt','.ini','.cfg','.log','.ban','.inc');



Merci de vos futurs réponses Smiley decu

EDIT : J'ai essayé avec un .amx de 1Ko, et ça marche...
J'ai l'impression que move_uploaded_file ne fonctionne pas avec les gros fichiers. Comment ça se fait ?
Modifié par ApocKalipsS (14 Apr 2010 - 10:59)
LE serveur peut être configuré pour refuser les fichiers trop gros.

Si tu as la main sur ta configuration php.ini, regarde le paramètre upload_max_filesize. Par défaut dans wamp server, il est fixé à 2M par exemple...

Si ton hébergeur ne t'autorise pas à modifier le php.ini, tu ne peux rien faire (modification par .htaccess ou par la fonction ini_set impossible).... mais tu sauras que les uploads excédant la taille indiquée échoueront systématiquement.
Ah oui merci, tu avais raison, j'ai vu ça aussi sur php.net :

"La variable MAX_FILE_SIZE ne peut pas spécifier une taille de fichier plus grande que la taille qui a été fixée par upload_max_filesize, dans le php.ini. La valeur par défaut est 2 megaoctets."

Je suis allé voir sous php.ini, et c'était bien fixé sur 2M. Je l'ai donc modifié pour le mettre à 7M, j'ai sauvegardé, mais ça ne marche pas. Toujours un echec d'upload... Smiley bawling
Désolé du double post, j'ai en fait tapé "phpinfo();" sur une page, et cherché "upload_max_filesize". Il me dit toujours 2M, alors que j'ai bien changé le fichier php.ini, et j'ai même fait ça : "ini_set("upload_max_filesize", "7M");" sur un fichier. Pourtant il ne prend rien en compte, comment ça se fait ?
Tu ne peux pas le changer via ini_set ou dans un .htaccess. IL faut le changer dans le php.ini et ne pas oublier de redémarrer apache ensuite.