Miałem problemy z prostym skryptem php, w którym mogę wgrać plik do określonego folderu. Próbowałem tego na wiele sposobów i nadal nie odniosłem sukcesu.

Wszelkie błędy w moim kodzie lub porady, jak naprawić problem, zostaną przyjęte z wdziękiem.

Główny kod php:

<p>Browse For a File on your computer to upload it!</p>
<form enctype="multipart/form-data" action="upload_photos.php" method="POST">
Choose Photo:
<input name="userfile" type="file" /><br />
<input type="submit" value="Upload Photo" />


<?PHP      


if ($userfile_size>250000)
    {$msg=$msg."Your uploaded file size is more than 250KB so please reduce the file size  and then upload.<BR>";
$file_upload="false";} 

else{

if (!($userfile_type<>"image/jpeg" OR $userfile_type<>"image/tiff" OR     $userfile_type<>"image/png"))
    {$msg=$msg."Your uploaded file must be of JPG, PNG, or tiff. Other file types are not     allowed<BR>";  
$file_upload="false";}

}
  ?>

</form>

</label>
</form>

Kod php, który jest wywoływany po kliknięciu (upload_photos.php)

<?php
$target_path="uploads/";

chmod("uploads/", 0755);
$target_path=$target_path . basename( $_FILES['uploadedfile']['name']);

$test=move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path); 

 if($test) { 
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).  
    " has been uploaded"; 
 } else{ 
    echo "There was an error uploading the file, please try again!"; 
    var_dump($test); 
 } 
?>

Nie rozumiem, dlaczego moje wyniki końcowe [po kliknięciu przycisku „Prześlij pliki”] zawierają tylko następujące wyniki:

"Wystąpił błąd podczas przesyłania pliku, spróbuj ponownie!bool(false)"

Jeszcze jedno: próbowałem również użyć pełnej ścieżki folderu komputera dla $target_path i chmod.

Czy ktoś widzi, co robię źle?

1
Richard Paulicelli 28 luty 2012, 22:31

3 odpowiedzi

Najlepsza odpowiedź

Masz <input name="userfile", ale używasz $_FILES['uploadedfile'] w swoim skrypcie - użyj jednego lub drugiego.

Poza tym upewnij się, że chmod działa, a folder jest zapisywalny.

2
Joe 28 luty 2012, 22:35

bool(false) jest wynikiem var_dump($test);, wskazując, że move_uploaded_file zwraca fałsz.

Jako podstawowy krok debugowania powinieneś spróbować var_dump($_FILES), aby upewnić się, że uzyskujesz dostęp do właściwego elementu tej tablicy (z twojego kodu mogę stwierdzić, że tak nie jest, indeks będzie name atrybut elementu <input type="file"/>).

Masz co najmniej jeszcze jedną poważną wadę w swojej logice... Kod PHP w formularzu przesyłania nie ma żadnego sensu. Ten blok kodu PHP zostanie wykonany po stronie serwera, zanim użytkownik prześle plik. To nie może działać. Dwie zmienne, które sprawdzasz, $userfile_size i $userfile_type, nie są nigdzie zdefiniowane.

1
meagar 28 luty 2012, 22:44

W moim przypadku zapomniałem utworzyć folder, do którego chcę wgrać. Więc sprawdź, czy określona ścieżka przesyłania jest dostępna, czy nie.

0
Silambarasan R.D 19 maj 2019, 19:38