2016-04-19 7 views
0

Ich benutze dieses Skript zum Hochladen einer Bilddatei. Es sollte erlauben, JPEG-, JPG- und PNG-Dateien hochzuladen.Ich kann Dateien auf dem Remote-Server hochladen, nicht lokal auf XAMPP

Alles funktioniert auf Remote-Server, aber ich kann es nicht lokal auf XAMPP-Server hochladen. Ich habe alle Tipps in diesem Thread Why would $_FILES be empty when uploading files to PHP? versucht, aber niemand hat funktioniert.

Vielen Dank für Hilfe

Form:

<form class="form-horizontal" action="potwierdz.php" method="POST" enctype="multipart/form-data"> 
    <fieldset> 

     <!-- Form Name --> 
     <legend>Dodawanie produktu</legend> 

     <!-- Text input--> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="produkt_nazwa">Nazwa</label> 
      <div class="col-md-4"> 
       <input id="produkt_nazwa" name="produkt_nazwa" class="form-control input-md" required="" type="text"> 
       <span class="help-block">Podaj nazwę produktu</span> 
      </div> 
     </div> 

     <!-- Text input--> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="producent_nazwa">Nazwa producenta</label> 
      <div class="col-md-4"> 
       <input id="producent_nazwa" name="producent_nazwa" class="form-control input-md" required="" type="text"> 
       <span class="help-block">Podaj nazwę producenta produktu</span> 
      </div> 
     </div> 

     <!-- Textarea --> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="producent_adres">Adres producenta</label> 
      <div class="col-md-4">      
      <textarea class="form-control" id="producent_adres" name="producent_adres" required=""></textarea> 
      </div> 
     </div> 

     <!-- Select Basic --> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="produkt_kategoria_nazwa">Kategoria</label> 
      <div class="col-md-4"> 
      <select id="produkt_kategoria_nazwa" name="produkt_kategoria_nazwa" class="form-control"> 
       <option> </option> 
      </select> 
      </div> 
     </div> 

     <!-- File Button --> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="obraz">Zdjęcie</label> 
      <div class="col-md-4"> 
      <input id="obraz" name="obraz" class="input-file" type="file"> 
      </div> 
     </div> 

     <!-- Button --> 
     <div class="form-group"> 
      <label class="col-md-4 control-label" for="wyslij"></label> 
      <div class="col-md-4"> 
      <button id="wyslij" name="wyslij" class="btn btn-primary">Dodaj</button> 
      </div> 
     </div> 

    </fieldset> 
</form> 

hier Skript:

<?php 

    $errors= array(); 
     $file_name = $_FILES['obraz']['name']; 
     $file_size =$_FILES['obraz']['size']; 
     $file_tmp =$_FILES['obraz']['tmp_name']; 
     $file_type=$_FILES['obraz']['type']; 
     $file_ext=strtolower(end(explode('.',$_FILES['obraz']['name']))); 

     $expensions= array("jpeg","jpg","png"); 

     if(in_array($file_ext,$expensions)=== false){ 
     $errors[]="extension not allowed, please choose a JPEG or PNG file."; 
     } 

     if(empty($errors)==true){ 
     move_uploaded_file($file_tmp,"obrazki/".$file_name); 
     echo "Success"; 
     }else{ 
     print_r($errors); 
     } 

?> 

Es mir gibt "Erweiterung nicht erlaubt, wählen Sie bitte eine JPEG- oder PNG-Datei"

Es wird auch gedruckt Hinweis: Undefinierter Index: obraz wann immer ich $_FILES['obraz']['...'] Variable verwende.

+3

'echo $ file_ext;' und auch 'e rror_reporting (E_ALL); ini_set ('display_errors', '1'); ' – AbraCadaver

+0

Haben Sie den Wert von' $ file_ext' überprüft und melden sich Fehler an, falls andere Warnungen/Fehler geworfen werden? – Crackertastic

+0

Ich würde die Validierung durchführen, wenn Sie Ihre Variablen '$ file_name',' $ file_type' usw. zuweisen und etwas wie 'if (! Isset ($ _FILES [' obraz '] [' name '])) {throw) verwenden new \ Exception ('Fehlender Dateiname) ";}' –

Antwort

0

Ich würde Validierung durchführen, wenn Sie Ihre $file_name, $file_type usw. Variablen zuweisen.

Validation Beispiel:

if (!isset($_FILES['obraz']['name'])) { 
    throw new \Exception('Missing file name)"; 
} 

Zusätzlich würde ich array_pop() statt end verwenden. Dies gibt Ihnen einfach das letzte Element im Array, nachdem Sie es explodieren.

Das, und ich würde jede mögliche Leerzeichen Sie Ihre $file_ext Variable trimmt, als Leerraum ein potenzielles Problem sein könnte (und sogar Ihr Problem verursachen):

$file_pieces = explode('.',$_FILES['obraz']['name']); 
$file_ext = trim(array_pop($file_pieces)); 

Schließlich während der Validierung, würde ich Erstelle einen beschreibenden Fehler. eine, die $file_ext Echos:

if (in_array($file_ext,$expensions) === false){ 
    $errors[] = "extension '$file_ext' not allowed, please choose a JPEG or PNG file."; 
} 

Wenn Sie noch mit Fragen sind, tun ein var_dump($_FILES) oder print_r($_FILES) Sie ziehen den Dateinamen nach unten korrekt zu gewährleisten. Wenn das nicht funktioniert, überprüfen Sie, ob Ihre Umgebung sowohl konfiguriert als auch ordnungsgemäß funktioniert.

+0

Hallo, vielen Dank für Ihre Antwort, es scheint die Ausnahme zu erzeugen, die Sie erstellt haben: Ich habe 'var_dump ($ _ FILES)' überprüft, bevor ich eine Frage gestellt habe und sie immer zurückgegeben hat mir ein leeres Array – Webowiec

+0

@Webowiec Ich kopierte Ihren Code und lief es in meiner Umgebung, und es scheint für mich zu arbeiten, ich bin ge tting die richtige Information, wenn ich 'var_dump ($ _ FILES)'. Es hört sich an, als wäre dies ein umweltspezifisches Problem (anstelle von etwas, das mit der Programmierung zusammenhängt). –

+0

Ja, es war: D nach dem Neustart System funktioniert es endlich gut – Webowiec

0

Diese Zeile erzeugt einen Fehler in PHP5.6 & PHP5.5 & PHP 5.4 und ein Hinweis in PHP7.0.5

strenge Standards: Nur Variablen sollten

$file_ext=strtolower(end(explode('.',$_FILES['obraz']['name']))); 

es mit

$t = explode('.',$_FILES['obraz']['name']); 
$file_ext = strtolower($t[1]); 

Oder wenn Sie PHP7 verwenden Ersetzen durch Verweis übergeben werden, dann können Sie verwenden

$file_ext = strtolower(explode('.',$_FILES['obraz']['name'])[1]); 
+0

'$ t [1]' Offset-Fehler. '$ _FILES ['obraz'] ['name']' fehlt – Webowiec

+0

Jetzt können Sie plötzlich eine Fehlermeldung sehen! In diesem Fall müssen Sie zuerst überprüfen, ob der Benutzer tatsächlich eine Datei veröffentlicht hat. Überprüfen Sie auch '$ _FILES ['obraz'] ['error']' ' – RiggsFolly