php-envoie d'un fichier sur le net - Programmation
Marsh Posté le 15-04-2001 à 14:54:06
c'est koi ton $journal_name ?
quelle est l'erreur générée ? en general elles sont assez explicites
Marsh Posté le 15-04-2001 à 16:22:01
$journal_name c'est un fichier temp.html de moins de 1ko. L'erreur en fait c'est "internal server error" et le programme php plante, pas le serveur. Sur un autre site le mec a fait un script pour envoyer un fichier sur son site via un formulaire, comme moi, mais ça ne marche pas non plus via easyphp, mais ça fonctionne chez son hébergeur, c'est pour ça que je veux savoir si mon script est correct vu que je ne peux pas le vérifier.
Marsh Posté le 16-04-2001 à 19:02:22
1/
"<input type="hidden" name="taillemax" size="100000">"
tu devrais utiliser name="MAX_FILE_SIZE" comme ça le fichier n'est pas conservé sur le serveur s'il dépasse cette taille (mais aucun message d'erreur n'est généré)
2/
le chemin utilisé pour la fonction copy() doit être défini par raport au système pas par rapport au serveur web donc celui que tu indiques ne peut pas être bon, je pense que c'est là d'où vient ton erreur. Par exmeple celà pourrait être "cserveur_web/www/fichiers/"
3/
Dans ton fichier de traitement il faudrait plutôt utiliser
if ($journal != "none" ) {....
car si tu n'indiques pas de fichier la variable $journal prendra la valeur "none" et tu auras une erreur lors de l'appel à la fontion copy() puisqu'il n'y a pas de fichier !
Marsh Posté le 16-04-2001 à 20:12:30
un fichier uploadé est stocké dans un repertoire temporaire sur le systeme distant.
il faut donc le deplacer dans une zone visible par ton serveur web.
mais pour pouvoir le deplacer il faut connaitre son nom temporaire (pour le retrouver) ainsi que son vrai nom (pour le copier en zone visible)
// -------------------------------------------------------------
// recup de multiples fichiers uploade HTTP_POST_FILE
// -------------------------------------------------------------
function GetFile( $http_file )
{
$tab = array();
for ($i=0 ; $i < count($http_file) ; $i+=4 )
{
$tab[$i]["nom"] = $http_file["name"][$i];
$tab[$i]["tmp"] = $http_file["tmp_name"][$i];
$tab[$i]["type"] = $http_file["type"][$i];
$tab[$i]["taille"] = $http_file["size"][$i];
}
return $tab;
}
dans ton html met journal[] plutot que journal , en multipliant les champs de ce type : tu pourras ainsi uploadé plusieurs fichiers simultanement . Ensuite :
l'appel :
$info = GetFile($HTTP_POST_FILES["journal"]);
deplacement (si "/web/www/upload" est le repertoire visible depuis ton serveur web)
for ($i=0 ; $i <count($info) ; $i++)
if (! copy($info[$i]["tmp"],"/web/www/upload/".$info[$i]["nom"]))
{ echo "probleme" ; exit; }
else
{
echo "le fichier ".$info[$i]["nom"]." de taille ".$info[$i]["taille"]." a été transféré de ".$info[$i]["tmp"]." en /web/www/upload/".$info[$i]["nom"];
}
Marsh Posté le 17-04-2001 à 17:41:47
pas d'autres réponses, moi je voudrais le tester quand même via QuickPHP ou autre avant de le balancer sur le net.
UP
Marsh Posté le 21-04-2001 à 15:00:22
nicotine> j'ai essayé ton script, mais il me fait la même erreur que l'utre, plantage de php et ensuite affichage d'une page html disant que le serveur a rencontré une erreur, veuillez la mentionner à xxx.
Marsh Posté le 21-04-2001 à 15:05:14
Et ça : ça donne quoi
fichier upload.php3
-------------------
<HTML><HEAD></HEAD>
<BODY>
<?php
echo $Fichier;
if ($Fichier && $Fichier != "none" ) {
echo "<H1> Votre fichier : </H1>";
echo "Fichier sur serveur : $Fichier<BR>";
echo "Fichier envoyé : $Fichier_name<BR>";
echo "Taille : $Fichier_size<BR>";
echo "Type : $Fichier_type<BR>";
copy(stripslashes($Fichier), $Fichier_name);
$tab=file(stripslashes($Fichier));
unlink(stripslashes($Fichier));
for ($i=0;$i<count($tab);$i++)
echo $tab[$i];
}
?>
<FORM ENCTYPE="multipart/form-data" ACTION="upload.php3" METHOD="POST">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
Envoyer le fichier : <INPUT NAME="Fichier" TYPE="file">
<INPUT TYPE="submit" VALUE="Envoyer le fichier">
</FORM>
</BODY></HTML>
---------------------------
Marsh Posté le 21-04-2001 à 15:09:44
je vais essayer Roswell, mais apparemment c'est QuickPHP, EasyPHP et autres qui foirent. Ca fonctionne chez vous ?
Marsh Posté le 21-04-2001 à 16:38:10
t'as declaré quel taille max de fichier à uploader dans ton php.ini ?
Marsh Posté le 21-04-2001 à 18:22:18
ca depend ce que tu veux en faire et ou tu l'heberges.
j'ai limité le mien à 20 Mo (et tu peux aussi limite via MAX_FILE_SIZE : c'est pour un intranet
Marsh Posté le 21-04-2001 à 18:38:09
tu peux mettre ton error_log d'apache stp ?
Marsh Posté le 22-04-2001 à 00:49:07
avec php j'obtiens ça : Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, you@your.address and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
--------------------------------------------------------------------------------
Apache/1.3.14 Server at localhost Port 80
après un plantage de php.exe avec quickphp quelque soit le script d'upload utilisé.
Marsh Posté le 22-04-2001 à 01:38:05
les logs d'apache !!
Marsh Posté le 22-04-2001 à 10:31:24
[Wed Apr 11 15:07:56 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php4/php.exe
[Sun Apr 15 11:44:54 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
[Sun Apr 15 12:01:11 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
[Sat Apr 21 13:47:06 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
[Sat Apr 21 14:33:20 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
[Sat Apr 21 14:36:42 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
[Sun Apr 22 00:50:45 2001] [error] [client 127.0.0.1] Premature end of script headers: equickphp/php3/php.exe
Marsh Posté le 22-04-2001 à 20:33:30
meme pb de plantage de php (avec quickphp ou eazyphp) sous win pr mes scripts d'upload ...
Marsh Posté le 23-04-2001 à 00:03:05
- aux vues des logs , j'aimerais voir le script complet (je l'essayerais ensuite de mon coté)
- il est bien connu que windoz n'est pas l'ideal pour faire tourner apache /mysql /php ....mais c'est un autre debat.
Marsh Posté le 23-04-2001 à 08:45:11
ben en fait, j'ai regardé sur plusieurs moteurs de recherche et impossible de faire tourner des scripts d'upload sous QuickPHP ou EasyPHP, peut-être PHPTriad ?
Marsh Posté le 15-04-2001 à 12:12:02
salut tout le monde, voilà j'ai fait un formulaire pour envoyer un fichier sur un site :
<HTML>
<HEAD>
<TITLE>envoyer un journal journal</TITLE>
</HEAD>
<BODY>
<form name="vince" method="post" action="lea_ajout_journal.php3" enctype="multipart/form-data">
<input type="hidden" name="taillemax" size="100000">
<table>
<tr>
<td>entrez le chemin complet du fichier à transférer :</td><td><input type="file" name="journal"></td>
</tr>
</table>
<p>
<p align="center"><input type="submit" value="envoyer le fichier"></p>
</form>
</BODY>
</HTML>
ce fichier je voudrais qu'il soit dans un répertoire particulier de mon site, donc j'ai le fichier .php3 suivant :
<?php
if($journal)
copy($journal,"journal/".$journal_name);
?>
J'utilise QuickPHP pour tester si mon site fonctionne et lorsque j'essaie d'envoyer un fichier il y a une erreur au niveau du serveur, avec EasyPHP c'est pareil, quelq'un pourrait me confirmer ou me corriger mes pages.