Autor Zpráva
David1256
Profil
Dobrý den,

pokouším se zprovoznit upload souborů pomocí php scriptu, ale nějak mi to nefunguje. Mám tento script.

<?php 
  if(isset($_POST['upload'])){ 
    $nahrat = move_uploaded_file($_FILES["soubor"]["tmp_name"], $_FILES["soubor"]["name"]); 
    if($nahrat){echo 'Soubor byl úspěšně uložen.';}else{echo 'Soubor se nepodařilo uložit.';} 
  } 
?> 

<form action="" method="post" enctype="multipart/form-data"> 
  <input type="file" name="soubor"> <input type="submit" name="upload" value="Nahrát soubor na server"> 
</form>

Pokaždé mi to vypíše, že se se soubor nepodařilo uložit. Ve složce, ve které mám uložený script mám nastavena práva na 777 a nenapadá mě nějak čím jiným by mohla být nefunkčnost scriptu způsobena.

Děkuji.
Rfilip
Profil
Zkus na začátek přídat
error_reporting(-1);
ini_set("display_errors", 1); 
Vypíše se i nějaký warning, notice...?
David1256
Profil
Rfilip:
Nevypíše se nic.
Rfilip
Profil
Celé je to nějaké divné :(. Dle documentace $_FILES["soubor"]["tmp_name"] tedy není validním nahraným souborem i když tu proměnou nastavuje sám server...
Zkuz sem hodit výpis:
print_r($_FILES);
David1256
Profil
Vypíše toto:
Array ( [soubor] => Array ( [name] => sipkap.png [type] => [tmp_name] => [error] => 6 [size] => 0 ) ) 
Jan Tvrdík
Profil
David1256:
V php.ini je špatně nastavená hodnota upload_tmp_dir. Viz http://php.net/manual/en/features.file-upload.errors.php.
David1256
Profil
A na co ji mam změnit, respektive pomocí jakého příkazu ji změním?
Rfilip
Profil
Stránky máš kde?
David1256
Profil
Myslíš u jakého hostingu nebo adresu nebo jak?
Jinak zjistil jsem, že jde změnit upload_tmp_dir pomocí tohoto příkazu.
ini_set('upload_tmp_dir', 'docasny');
Ale i když ho použiji, pořád to vypisuje to samé. Složku "docasny" mám vytvořenou.
Davex
Profil
David1256:
Myslíš u jakého hostingu nebo adresu nebo jak?
Pokud to máš na hostingu, tak nebudeš mít přístup k souboru php.ini a nemůžeš to upravit.

Jinak zjistil jsem, že jde změnit upload_tmp_dir pomocí tohoto příkazu.
Pomocí ini_set() to změnit nejde, protože soubor se nahrává před spuštěním PHP skriptu. Dočasný adresář tedy musí být znám předtím. Buďto nastavením volby upload_tmp_dir v php.ini nebo jinak, ale tam záleží na verzi PHP a způsobu spouštění (Apache modul nebo FastCGI).
David1256
Profil
Takže když to udělám tímto zápisem v php.ini upload_tmp_dir = /docasny mělo by to fungovat? Ono to totiž ani takhle nefunguje. Jde to tedy nějak vyřešit?
Davex
Profil
Pokud provozuješ Apache na vlastním počítači ve Windows, tak musíš vytvořit pracovní adresář na stejném disku odkud se spouští (tuším, že na jiném disku s tím byly problémy) a ve správném souboru php.ini nastavit celou cestu, např. upload_tmp_dir = "c:\docasny". Po změně se nesmí zapomenout na restart Apache.
David1256
Profil
Já mám ty stránky ale na hostingu, takže tam to nezměním ani pomocí php.ini ani pomocí .htacces? Je to tedy zakázané na od provozovatele hostingu?
Rfilip
Profil
pomocí .htaccess to nezměníš a k php.ini na hostingu se vetšinou nedostaneš.
Že by upload_tmp_dir nebyl nastavený, o tom dost pochybuju,protože to by vůbec nefungovaly uploady- což se mi zdá trochu divné..
Jen pro jistotu v phpinfo() najdi řádek upload_tmp_dir - jaká tam je hodnota?
David1256
Profil
hodnota je "no value"
Rfilip
Profil
Tady pomůže dotaz na support hostingu (vetšinou nějaké forum), jestli proměnné tupload_tmp_dir můžou dát nějakou hodnotu.
Pravděpodobně nebudeš první kdo má podobný dotaz.
Tady ti už těžko můžeme nějak pomoci
David1256
Profil
Tak už jsem přišel na příčinu. Dohledal jsem člověka, který je zodpovědný na daném serveru za hosting a ten mi prozradil, že je schválně upload zakázán kvůli útoku hackerů. Díky za všechny rady, bez vás bych se k odpovědi nedopracoval.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: