Felix Riesterer: uploader anpassen

Beitrag lesen

Lieber Kurosan,

T-Rex hat Dir ja schon einen wertvollen Linktipp gegeben. Lass mich noch auf ein Paar Dinge hinweisen, die Dir das Schreiben von PHP-Scripts etwas vereinfachen/verbessern könnten.

|         echo '<form method=get action="'.SCRIPT_URI.'">'."\n";  

>         echo '<input type="hidden" name="func" value="newfile">'."\n";  
>         echo '<input type="hidden" name="dir" value="'.$dir.'">'."\n";  
>         echo '<img src="../../pic/clearpixel_1x1.gif" alt="" width="45" height="1" />'."\n";

Du schreibst jede Menge HTML-Code in Dein PHP-Script. Im Moment mag das noch eine sinnvolle Vorgehensweise für Dich sein, insbesondere, wenn Du alles schön "griffig" in einer einzigen PHP-Datei haben willst. Später wirst Du allerdings bei größeren Projekten schnell merken, dass Dir eine strengere Trennung von Programm-Logik (PHP) und Ausgabeformat (HTML) wesentlich mehr Übersichtlichkeit in Dein Projekt bringen kann. Daher halte ich es für besser, HTML-Dateien anzulegen, in denen der notwendige HTML-Code mit Platzhaltern steht, die Du dann in eine Variable einlesen und "befüllen" kannst. Beispiel:

<form method="get" action="{script-uri}">  
    <p>  
        <input type="hidden" name="func" value="newfile">  
        <input type="hidden" name="dir" value="{dir}">  
        <img src="../../pic/clearpixel_1x1.gif" alt="" width="45" height="1" />  
        <input style="width:200px;" name="src" type="text" size="50" value="NeueDatei.htm">  
        <input type="hidden" name="s_id" value="{s-id}">  
        <img src="../../pic/clearpixel_1x1.gif" alt="" width="25" height="1" />  
        <input type="submit" value="Datei erstellen" class="form">Datei erstellen</input>  
    </p>  
</form>

Angenommen Du benutzt für Deine Platzhalter keine einzelnen Variablen, sondern ein Array, dessen Schlüssel Deinen Platzhalter-Variablen entsprechen:

$fill_values = array (  
    'script-uri' => SCRIPT_URI,  
    'dir' => $dir,  
    's-id' => (isset($_GET['s_id']) ? $_GET['s_id'] : '')  
);

Nun kannst Du mit einer Schleife den eingelesenen HTML-Code befüllen:

$html_form = file_get_contents('./templates/uploader-form.html');  
  
foreach ($fill_values as $key => $value) {  
    $search = sprintf('{%s}', $key);  
    $html_form = str_replace(  
        $search,  
        htmlspecialchars($value),  
        $html_form  
    );  
}  
  
echo $html_form;

Eine wasserdichte Fehlerprüfung solltest Du unbedingt auch implementieren. In meinem Code-Beispiel wird nicht sichergestellt, dass $_GET['s_id'] zwingend vorhanden sein muss, es wird im Fehlerfalle mit einem Leerstring weitergearbeitet. Ob das in Deinem Projekt sinnvoll ist, musst Du wissen.

copy($tempname,$name);

Was ist hier der Unterschied zu copy($tempname, $name)? Lass die Anführungszeichen weg, sie machen nichts besser, sondern verschleiern im besten Falle nur unnötig! Noch besser wäre natürlich, wenn Du Variablen garnicht erst umkopierst, sondern gleich die Originalvariablen nämest:

copy($_FILES['datei']['tmp_name'], $_FILES['datei']['name']);

Was Du hier aber eigentlich tust, ist nichts anderes, als die hochgeladene Datei in Deinen Bereich zu "verschieben". Dafür hat PHP eingens eine Funktion entwickelt: move_uploaded_file(). Daher ergibt sich folgender Einzeiler für Deinen originalen Vierzeiler:

move_uploaded_file($_FILES['datei']['tmp_name'], $_FILES['datei']['name']);

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)