petite question sur l'upload en PHP...

alpking

Membre actif
13 Mai 2005
142
4
46
Bonjour,

je suis en train de réaliser un site pour des amis.

Je leur ai fait un système de news en php afin qu'ils puissent gérer leur site.

J'ai rajouter la possibilité d'uploader une image sur le serveur et de l'afficher dans la news.

J'aimerais maintenant faire un système d'upload similaire pour des fichiers comme .pdf, .doc et .xls.

Je sais que le principe est le même mais j'aimerai que quand ils upload ce genre de fichiers, une petite icone du type de fichier represente le lien cliquable pour telecharger le fichiers.

J'ai essayé de trouver une façon assez simple pour le faire (je ne suis un newbie en PHP) mais je n'ai rien trouvé...

Quelqu'un aurait'il une idée ??

Merci bp d'avance
 
si ca marcherai, mais la difficulté que j'ai c'est pour l'affichage de l'icone avec le lien pour télécharger le fichier...
 
Je vais sûrement me faire tuer par les puristes mais bon (je suis pas dev)... :siffle:

J'ai retrouvé une fonction que l'on a utilisé au boulot. Je l'ai adaptée mais sans pouvoir la tester. Il manque le test sur l'extension du fichier, mais j'ai fait en sorte de pouvoir facilement l'adapter... À toi de voir...

Bloc de code:
<?php
function getDirList ($dirName) {
    $d = dir($dirName);
    $iconefichierexcel = "excel.gif";
    $icone = iconefichierexcel$
    echo "<h2>Liste des fichiers du répertoire ".$dirName."</h2>\n";
    echo "    <table>\n";
    echo "        <tr>\n"; 
    echo "            <th>Fichiers </th>\n";
    echo "            <th>date</th>\n";
    echo "            <th>taille</th>\n";
    echo "        </tr>\n";
    
    while($entry = $d->read()) {
        if ($entry != "." && $entry != "..") {
            if (is_dir($dirName."/".$entry)) {
                getDirList($dirName."/".$entry);
            } else {
                $datefichierunix = filectime($dirName."/".$entry);
                $datefichier = date("d/m/Y H:i", $datefichierunix);
                $taillefichier = filesize($dirName."/".$entry);
                $taillefichier = round($taillefichier / 1024, 1);
                echo "        <tr>\n"; 
                echo "             <td><img src=\"".$icone."\" alt=\"\"><a href=\"".$dirName."/".$entry."\">$entry</a></td>\n";
                echo "            <td>\n";
                echo "              $datefichier\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "            ".$taillefichier." kB\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                clearstatcache();
            }
        }
    }
    $d->close();
    echo "  </table>\n";
}
?>
 
j'ai trouvé ce script qui a l'air très bien :

Bloc de code:
<?
	/*
	Silentum Uploader v1.1.0
	uploader.php copyright 2005, 2006 "HyperSilence"
	*/

	// Begin options

	$allow_file_deletion = true; // To allow visitors to delete files, leave this at true; otherwise, change it to false

	$file_extensions = array(".doc", ".pdf", ".xls", ".pps", ".txt"); // Add or delete the file extensions you want to allow

	$file_extensions_list = ".doc, .pdf, .xls, .pps, .txt"; // Type the same as above, without the quotes separating them

	$max_length = 30; // The maximum character length for a file name

	$maximum_file_size = "51200"; // In bytes

	$upload_log_file = "upload_log.txt"; // Change this to the log file you want to use

	// End options

	$folder_directory = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]);
	$message = "";
	$set_chmod = 0;
	$site_uri = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
	$upload_directory = "files/";
	$upload_uri = $folder_directory."/files/";

	if($allow_file_deletion == true) $status = "enabled";
	else $status = "disabled";

	if($_REQUEST["delete"] && $allow_file_deletion) {
	$resource = fopen($upload_log_file,"a");
	fwrite($resource,date("F d, Y / h:i:sa")." - ".$_REQUEST["delete"]." deleted by ".$_SERVER["REMOTE_ADDR"]."\n");
	fclose($resource);

	if(strpos($_REQUEST["delete"],"/.") > 0);
	elseif(strpos($_REQUEST["delete"],$upload_directory) === false);
	elseif(substr($_REQUEST["delete"],0,6) == $upload_directory) {
	unlink($_REQUEST["delete"]);
	$message = "File has been deleted.";
	header("Location: $site_uri?message=$message");
	}
	}

	elseif($_FILES["userfile"]) {
	$resource = fopen($upload_log_file,"a");
	fwrite($resource,date("F d, Y / h:i:sa")." - ".$_FILES["userfile"]["name"]." "
	.$_FILES["userfile"]["type"]." uploaded by ".$_SERVER["REMOTE_ADDR"]."\n");
	fclose($resource);

	$file_type = $_FILES["userfile"]["type"]; 
	$file_name = $_FILES["userfile"]["name"];
	$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));
	chmod($upload_uri."".$file_name, 0755);
	if($_FILES["userfile"]["size"] > $maximum_file_size) {
	$message = "ERROR: File size cannot be over ".$maximum_file_size." bytes.";
	}

	elseif($file_name == "") $message = "ERROR: Please select a file to upload.";
	elseif(strlen($file_name > $max_length)) $message = "ERROR: The maximum length for a file name is ".$max_length." characters.";
	elseif(!preg_match("/^[A-Z0-9_.\- ]+$/i",$file_name)) $message = "ERROR: Your file name contains invalid characters.";
	elseif(!in_array($file_ext, $file_extensions))
	$message = "ERROR: <ins>$file_ext</ins> is not an allowed file extension.";
	else $message = upload_file($upload_directory, $upload_uri);
	header("Location: $site_uri?message=$message");
	}

	elseif(!$_FILES["userfile"]);
	else $message = "ERROR: Invalid file specified.";

	$open = opendir($upload_directory);
	$uploaded_files = "";
	while($file = readdir($open)) {
	if(!is_dir($file) && !is_link($file)) {
	$uploaded_files .= "		<tr>
				<td style=\"background: #fff; color: #000; text-align: left; width: 70%\"><a href=\"$upload_directory$file\" title=\"$file (".filesize($upload_directory."".$file)." bytes)\">".$file."</a> (".filesize($upload_directory."".$file)." bytes)</td>";
	if($allow_file_deletion)
	$uploaded_files .= "
				<td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><a href=\"?delete=$upload_directory".urlencode($file)."\" title=\"Delete File\">Delete File</a></td>";
	else
	$uploaded_files .= "
				<td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><del><strong>Delete File</strong></del></td>";
	$uploaded_files .= "
			</tr>
			<tr>
				<td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\">Uploaded <strong>".date("F d, Y / h:ia", filemtime($upload_directory.$file))."</strong></td>";
	$uploaded_files .="
			</tr>
	";
	}
	}

	function upload_file($upload_directory, $upload_uri) {
	$file_name = $_FILES["userfile"]["name"];
	$file_name = str_replace(" ","_",$file_name);
	$file_path = $upload_directory.$file_name;
	$temporary = $_FILES["userfile"]["tmp_name"];

	$result = move_uploaded_file($temporary, $file_path);
	if(!chmod($file_path,0777))
	$message = "ERROR: A folder to place the files was not found.";
	else $message = ($result)?"File has been uploaded." : "An error has occurred.";
	return $message;
	}
?>

qu'en pensez-vous ?

comment rajouter une icone du type de fichier qui, une fois cliquée, telechargera le fichier ?

désolé d'insister mais la je bloque, je ne vois pas comment...

merci en tout cas à tout ceux qui m'aide...
 
Ben &#231;a a l'air pas mal la fonction que tu as trouv&#233;. Faut juste rajouter une balise IMG avec l'ic&#244;ne suivant le fichier list&#233;. :)
 
J'ai fait un upload, qui fonctionne exactement comme tu veux le faire.

La fonction pour extraire l'extension des fichiers :
Bloc de code:
function GetExtensionName($liste_fichiers)
{
    $pos = (strrpos($liste_fichiers, ".")); //Retourne le nombre de caractères depuis le début de la chaine du dernier caractère '.'                
    if ($pos=="") //Si le fichier n'a pas d'extension
        $Ext = "";
    else
        $Ext = strtolower(substr($liste_fichiers, strrpos($liste_fichiers, '.') + 1));
      return $Ext;
}

Ce n'est peut être pas du grand code mais il fonctionne.
Moi j'ai placé dans une table MySQL le nom du fichier icone en fonction de cette extension, mais tu peux très bien utiliser un Swith... case pour choisir ton icone (en oubliant pas un 'Default' pour tous les fichiers avec une extension qui n'est pas dans ta liste) ;)
 
bon en fait j'ai bien reflechi et l'icone n'est pas la meilleur solution...

en fait j'aimerai que une fois l'upload fait avec succ&#232;s, que mes amis aie juste du code g&#233;n&#233;r&#233; automatiquement &#224; copier et &#224; coller dans leur news.

un truc du genre :

"< nom_du_fichier > telecharger le fichier"

et que le telecharger le fichier soit le lien vers le fichier upload&#233;

je ne comprend pas vraiment ce script, enfin oui mais pas tout...

comment faire alors ?
 
bon en fait j'ai bien reflechi et l'icone n'est pas la meilleur solution...

en fait j'aimerai que une fois l'upload fait avec succ&#232;s, que mes amis aie juste du code g&#233;n&#233;r&#233; automatiquement &#224; copier et &#224; coller dans leur news.

un truc du genre :

"< nom_du_fichier > telecharger le fichier"

et que le telecharger le fichier soit le lien vers le fichier upload&#233;

je ne comprend pas vraiment ce script, enfin oui mais pas tout...

comment faire alors ?

C'est ce qu'a l'air de faire ton script mais, si j'ai bien compris comment il fonctionne, le code html du tableau g&#233;n&#233;r&#233; n'a pas l'air complet. Apparemment il fait partie d'un autre programme...
 
ouai il le fait mais j'aimerais qu'il afficher vraiment le code entier (mes amis sont vraiment des d&#233;butant et je voudrais leur &#233;vitez de devoir fait un <a href=>), donc j'aimerai qu'une fois l'upload reussi, qu'un code html s'affiche du genre :

<a href="upload/fichier.pdf"> telecharger le fichier </a>

en fait, il faudrait une fonction qui recupere le nom du fichier et le place a la place de "fichier.pdf"

et ou devrais-je ensuite mettre un echo pour que ce message s'affiche seulement si l'upload est r&#233;ussi ?

d&#233;sol&#233; d'&#234;tre si assist&#233;, mais je ne comprend pas vraiment ce script, enfin oui mais pas tout...
 
en fait j'ai trouvé :

Bloc de code:
while($file = readdir($open)) {
    if(!is_dir($file) && !is_link($file)) {
    $uploaded_files .= "        <tr>
                <td style=\"background: #fff; color: #000; text-align: left; width: 70%\"><a href=\"$upload_directory$file\" title=\"$file (".filesize($upload_directory."".$file)." bytes)\">".$file."</a> (".filesize($upload_directory."".$file)." bytes)</td>";
    if($allow_file_deletion)
    $uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><a href=\"?delete=$upload_directory".urlencode($file)."\" title=\"Delete File\">Delete File</a></td>";
    else
    $uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><del><strong>Delete File</strong></del></td>";
    $uploaded_files .= "
            </tr>
            <tr>
                <td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\">Uploaded <strong>".date("F d, Y / h:ia", filemtime($upload_directory.$file))."</strong></td>";
    $uploaded_files .="
            </tr>
			<tr>
                <td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\"> Adresse à copier dans la news <strong>" .htmlspecialchars('<a href=www.gaptrading.ch/html/fichiers_clients/upload/'.$file.'">TELECHARGER LE FICHIER</a>');
    $uploaded_files .="
            </tr>
    ";
    }
    }

merci bp a tout ceux qui m'ont aidé
 
Bloc de code:
/* 
 mytable {
     padding:1px;
     margin:0px;
     border:#555 1px solid;
 }
 
 mytable td {
     background:#fff;
     color:#000;
     text-align:left;
 }
 
 mytable td.row_column_1 {
     width:70%;
 }
 
 mytable td.row_column_2 {
     text-align:right;
     width:30%;
 }
 
  mytable td.next_row_column_3_and_4 {
    background:#eee;
    text-indent:20px;
 }
*/ 

$href_mask = "<a href=\"%s" title=\"%s\">%s</a>%s";

$double_row_mask = "
<tr>
    <td class=\"row_column_1\">%s</td>
    <td class=\"row_column_2\">%s</td>
</tr>
<tr>
    <td colspan=\"2\"class=\"next_row_column_3_and_4\">%s</td>
    <td colspan=\"2\" class=\"next_row_column_3_and_4\">%s</td>
</tr>
";

do {
    $row. = sprintf(
                            double_row_mask, 
                            sprintf($href_mask,....), 
                            ($allow_file_deletion ? "" : "" ), ...
                    );
    
} while (condition);