Adam Pietrasiewicz

Adam Pietrasiewicz Półliterat, Audytor
dostępności

Temat: Początkujący - upload pliku.

http://pl.php.net/manual/en/features.file-upload.post-...

Metoda z powyższego adresu nie funkcjonuje u mnie. Coś robię źle, ale zupełnie nie wiem co.

Mam serwer, na którym pięknie chodzą mi i wordpress, i joomla i wikimedia, więc nie ma problemu z uploadem, jak się umie to robić. A ja mam.

Mam na serwerze, w katalogu odpowiadającym mojej domenie, podkatalog o nazwie php. W nim trzymam moją aplikacyjkę, a w niej plik test.php zawierający:


<?php
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>Upload</title>
</head>
<body>

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="test1.php" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="plik" type="file" />
<input type="submit" value="Send File" />
</form>


</body>
</html>



oraz pliczek test1.php zawierający:


<?php // RAY_temp_upload_example.php
error_reporting(E_ALL);
echo "<pre>" . PHP_EOL;

// IF A FILE HAS BEEN UPLOADED
if (!empty($_FILES))
{
// SHOW THE UPLOADED FILES
print_r($_FILES);

// TRY TO MOVE THE FILE TWICE - SECOND MOVE RETURNS FALSE
if (!move_uploaded_file($_FILES["plik"]["tmp_name"], $_FILES["plik"]["name"])) echo "CANNOT MOVE {$_FILES["plik"]["name"]}" . PHP_EOL;
if (!move_uploaded_file($_FILES["plik"]["tmp_name"], $_FILES["plik"]["name"])) echo "CANNOT MOVE {$_FILES["plik"]["name"]}" . PHP_EOL;

// SHOW THE UPLOADED FILES AFTER THE MOVE - NO VISIBLE CHANGE
print_r($_FILES);
}

// END OF PHP, PUT UP THE HTML FORM TO GET THE FILE
?>


Katalog uploads oraz php mają pełne prawa dostępu, na wszelki wypadek ustawiłem na 777.

No i po wykonaniu wybrania pliku o nazwie "s24" dostaję coś takiego:


Array
(
[plik] => Array
(
[name] => s24
[type] => application/octet-stream
[tmp_name] => /tmp/phpDar3sY
[error] => 0
[size] => 3808
)

)
CANNOT MOVE s24
Array
(
[plik] => Array
(
[name] => s24
[type] => application/octet-stream
[tmp_name] => /tmp/phpDar3sY
[error] => 0
[size] => 3808
)

)

I niestety nie potrafię tego rozgryźć.

Czy ktoś może mi pomóc - wiem, że to musi być proste i głupie, ale zupełnie nie wiem już gdzie szukać.
Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: Początkujący - upload pliku.

Nie kopiujesz do katalogu uploads tylko do bierzącego czyli php. Musisz tam dopisać uploads Powinno być coś w stylu:

if (!move_uploaded_file($_FILES["plik"]["tmp_name"], "uploads/".$_FILES["plik"]["name"]))


jeżeli katalog jest podkatalogiem katalogu php lub:

if (!move_uploaded_file($_FILES["plik"]["tmp_name"], "../uploads/".$_FILES["plik"]["name"]))


jeżeli uploads i php są na tym samym poziomie.
Adam Pietrasiewicz

Adam Pietrasiewicz Półliterat, Audytor
dostępności

Temat: Początkujący - upload pliku.

Dziękuję, faktycznie o to chodziło.
Adam Pietrasiewicz

Adam Pietrasiewicz Półliterat, Audytor
dostępności

Temat: Początkujący - upload pliku.

Kolejne pytanie początkującego, tym razem dotyczące dziwnego zjawiska w czasie uploadu pliku.

Mam coś takiego w funkcji


header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="'.$NazwaPliku.'"');
readfile($NazwaPliku);



oraz dokładnie to samo poza funkcją, w wykonywanym kodzie.

Okazuje się, że TEN dokładnie kod wykonywany w funkcji zapisuje mi na dysku plik z trzema dodatkowymi znakami na początku pliku (spacja, koniec linii, koniec linii) na dysku. Ten sam kod wykonany poza funkcją zapisuje mi po prostu zawartość pliku, bez dodawania czegokolwiek.

Co robię źle?Adam Pietrasiewicz edytował(a) ten post dnia 25.08.10 o godzinie 17:54
Adam Pietrasiewicz

Adam Pietrasiewicz Półliterat, Audytor
dostępności

Temat: Początkujący - upload pliku.

Sprawa jest jeszcze śmieszniejsza.

Otóż już samo dodanie przed wykonaniem kodu:


require_once("funkcje.php");


Powoduje, że zapisywany u mnie na dysku plik ma na początku dodane chr(32) . chr(10) . chr(10)

Czy ktoś może mi wyjaśnić co ja robię źle?
Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: Początkujący - upload pliku.

usuń spacje i entery sprzed znacznika otwierającego <?php i po znaczniku zamykającym ?>

POzatym używaj opcji Edit, żeby nie tworzyć sztucznie postówAndrzej Martynowicz edytował(a) ten post dnia 25.08.10 o godzinie 18:50
Adam Pietrasiewicz

Adam Pietrasiewicz Półliterat, Audytor
dostępności

Temat: Początkujący - upload pliku.

Dziękuję.

Następna dyskusja:

cURL & upload pliku




Wyślij zaproszenie do