deeph Le 10/02/2008 à 17:36 Bah apparement si (d'après FileZilla), sinon pour info je suis sur 'servhome.org'.
Spipu Le 11/02/2008 à 16:14 c'est pas un pb de droit de fichier ca ?
tu lance php en CGI ou en module apache ? si c'est en tant que module, l'utilisateur apache et php est le même => les 2 peuvent normalement accéder au répertoire temporaire d'upload. Si c'est en CGI, les utilisateurs peuvent être différent, et dans ce cas là, seul apache a les droits sur le répertoire temporaire...
sinon, même remarque que les autres : le code n'a aucune protection... meme si c'est dans l'administration ce n'est pas une raison, car c'est comme ca qu'un jour ou oublie de protéger une page importante sans faire attention qu'une des fonction sera peut-etre par la suite copiée/collée pour réutiliser dans une partie moins sécurisé... De meme, ne jamais se fier à la config d'un serveur pour la sécurité (comme les magic quotes par exemple...)
Spipu Le 11/02/2008 à 20:37 dans un premier temps, regarde l'intégralité du tableau $_FILE (fait un print_r ou un var_dump) et regarde ce qu'indiquent les champs d'erreur pour chaque fichier.
ensuite, si pas d'erreur, vérifie si les fichiers temporaires existent (avec is_file) et récupère leurs propriétés et autres.
ript créé par Laurent MINGUET (c)2007</h5>
</body>
</html>voici un petit script que j'utilise pour uploader des fichiers : <?php
if (!defined('APPLI_PATH'))
{
function transformPath($path)
{
$path = str_replace('\', '/', $path).'/';
$path = str_replace('//', '/', $path);
return $path;
}
$path = transformPath(dirname(__FILE__));
define('APPLI_PATH', $path);
$root = transformPath($_SERVER['DOCUMENT_ROOT']);
$host = $_SERVER['HTTP_HOST'];
$root = preg_replace('|^/data|isU', '', $root);
$path = 'http://'.$host.'/'.str_replace($root , '', $path);
define('APPLI_URL', $path);
unset($path);
unset($root);
unset($host);
}
function fin_content($content) { return $content; }
function proteger($name)
{
$name = strtolower($name);
$name = preg_replace('/[áâàä]/isU', 'a', $name);
$name = preg_replace('/[éêèë]/isU', 'e', $name);
$name = preg_replace('/[íîìï]/isU', 'i', $name);
$name = preg_replace('/[óôòö]/isU', 'o', $name);
$name = preg_replace('/[úûùü]/isU', 'u', $name);
$name = preg_replace('/[œ]/isU', 'oe', $name);
$name = preg_replace('/[ç]/isU', 'c', $name);
$name = preg_replace('/[^a-zA-Z0-9_\-\.]/isU', '_', $name);
return $name;
}
function uploader()
{
if (!isset($_FILES["userfile"])) return null;
if (!is_array($_FILES["userfile"])) return null;
if (!isset($_FILES["userfile"]["name"])) return null;
if ($_FILES["userfile"]["name"]=="") return "Nom de fichier introuvable";
$name = $_FILES["userfile"]["name"];
if (ereg('((php)([0-9]?))$',$name)) return "Les fichiers PHP sont interdits";
$name = proteger($name);
if (is_file('./'.$name)) return "Ce fichier existe deja sur le serveur, veuillez le renommer ou en choisir un autre !";
if (move_uploaded_file($_FILES["userfile"]["tmp_name"], './'.$name))
{
if (!is_file('./'.$name)) return "Erreur de copie de fichier - Merci de réenvoyer le fichier";
return "Votre fichier a bien été envoyer.<br>Copiez le lien suivant et collez le dans votre message. <a href='".APPLI_URL.$name."'>".APPLI_URL.$name."</a>";
}
return "Erreur lors de la copie du fichier.";
}
$msg = uploader();
?>
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html>
<head>
<title>Index des fichiers - <?php echo APPLI_URL; ?></title>
<meta name="robots" content="none" >
<meta name="Title" content="Index des fichiers - <?php echo APPLI_URL; ?>" >
<meta name="Author" content="Laurent Minguet" >
<meta name="Reply-to" content="laurent.minguet@gadz.org" >
<meta name="Copyright" content="(c)2007 Laurent Minguet" >
<meta name="Identifier-URL" content="<?php echo APPLI_URL; ?>" >
<meta name="Revisit-after" content="none" >
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" >
<style type='text/css'>* { font-family: verdana; font-size: 11px; }</style>
</head>
<body>
<div style="border: solid 1px black; padding: 10px;">
<form enctype='multipart/form-data' action='./' method='post' style="padding:0; margin:0;">
Upload de fichier : <input name='userfile' type='file'> <input type='submit' value='Envoyer le fichier'>
</form>
</div>
<br>
Pour ajouter un fichier à un message du forum, vous devez :<br>
- cliquer sur "<b>parcourir</b>" et choisir le fichier<br>
- cliquer sur "<b>Envoyer le fichier</b>"<br>
- une fois le chargement terminer, suivez les intructions qui apparaitront ci-dessous.<br>
<br>
<span style="color: #FF0000; font-weight: bold;"><?php echo $msg; ?></span><br>
<br>
<table cellspacing="1" cellpadding="5">
<tr bgcolor="#aaaaaa">
<td colspan="4" align="center" width="100">
<?php echo APPLI_URL; ?>
</td>
</tr> <tr bgcolor="#aaaaaa">
<td align="left" width="100">
<a href="index.php?ordre=0" >Nom </a>
</td>
<td align="center" width="150">
<a href="index.php?ordre=1" >Modifié le</a>
</td>
<td align="center" width="80" >
<a href="index.php?ordre=2" >Taille </a>
</td>
<td align="center" width="100">
<a href="index.php?ordre=3" >Type </a>
</td>
</tr>
<?php
$handle=opendir('.');
rewinddir($handle);
$nom = array();
$path = array();
$url = array();
$date = array();
$nbo = array();
$exten = array();
$i=0;
while ($file = readdir($handle))
{
if (($file!=".") && ($file!="..") && ($file!="index.php") && ($file!="error.php") &&($file!=".htaccess"))
{
$nom[] = $file;
$nom_min[] = strtolower($file);
$pa = pathinfo($file);
$path[] = $pa;
$url[] = rawurlencode($file);
$date[] = filemtime($file);
$nbo[] = (int)(filesize($file));
$ex = filetype($file);
if ($ex == "dir") continue;
else { $ex = $pa["extension"];}
$exten[] = $ex;
$i = $i+1;
}
}
$nb = $i;
$ordre = 0;
if (isset($_GET['ordre'])) $ordre = $_GET['ordre'];
$a_classer = $nom_min;
if ($ordre==1) $a_classer = $date;
if ($ordre==2) $a_classer = $nbo;
if ($ordre==3) $a_classer = $exten;
if (sizeof($a_classer)>0)
asort($a_classer);
reset($a_classer);
$i = 0;
while (list ($key, $vide) = each ($a_classer))
{
$i++;
if (($i%2)==0) {echo "<tr bgcolor='#E8E8E8'>\n";}
else {echo "<tr bgcolor='#D0D0D0'>\n";}
if ($nbo[$key]>1024*1024){ $taille = (0.1*(int)(10*$nbo[$key]/(1024*1024)))." Mo";}
else { $taille = (0.1*(int)(10*$nbo[$key]/(1024)))." Ko"; }
echo " <td><a href='".$url[$key]."'>".$nom[$key]."</a></td>\n";
echo " <td align = 'center'>".date("d M Y H:i", $date[$key])."</td>\n";
echo " <td align = 'center'>".$taille."</td>\n";
echo " <td align = 'center'>".$exten[$key]."</td>\n";
echo "</tr>\n";
}
?>
</table>
<br><br>
<h5 align=right>Sc
Nil Le 12/02/2008 à 15:24 J'ai eu un problème similaire avec 1&1, parce qu'en travaillant en chemins relatifs ça ne fonctionnait pas (à cause de serveurs virtuels). J'utilise DOCUMENT_ROOT pour m'en sortir, pour avoir le bon chemin.
Si c'est juste pour faire de l'upload pour toi pour ne pas utiliser de client ftp, t'as des clients ftp en ligne, style www.net2ftp.com qui sont pas mal.
deeph Le 26/02/2008 à 12:01 Bon finalement j'ai trouvé le problème, en faite le 'move_uploaded_file();' ne renvoi bizarrement rien (bon j'aurai pu vérifier mais je sais plus où ça disait que ça renvoyait true/false), donc le 'if(!move_uploaded_file([...]))' ne pouvais jamais être vrai.
Spipu Le 26/02/2008 à 16:25 heuuu
dans ton test, tu mets
if (!move_uploaded_file($tmp_file, $url) || ....)
perso j'aurais mis
if (move_uploaded_file($tmp_file, $url)===false || ....)
car il est indiqué qu'il doit retourner false en cas d'erreur, mais il ne dit pas ce qu'il doit retourner en cas de non erreur... si ca se trouve il renvoie null et non true !
Nil Le 26/02/2008 à 17:03 Me demande s'il ne retourne pas le chemin du fichier ou un truc du genre quand il a réussi... enfin, il suffit de regarder ^^
Nil Le 26/02/2008 à 19:04 J'étais persuadé que ça n'existait pas dans les premières versions de PHP3... mais a priori, je me trompe ^^
Nil Le 27/02/2008 à 10:35 Bah généralement (en tout cas c'est le cas chez 1&1 et free), les fichiers .php sont parsés par PHP4, les .php3 par PHP3 et les .php5 par php5 (ce qui permet de faire cohabiter des vieux scripts et des récents sur un même serveur ^^).
Spipu Le 27/02/2008 à 10:42 ah vi exact (j'ai un compte chez 1&1 egalement)
d'ailleurs afin de ne pas m'embeter, j'ai mis un htacces pour mettre php5 par défault sur les .php, et désactiver php4 et php3
Et qu'est-ce qu'on en aurait à battre de PHP 3 à l'ère de PHP 5?