Zdravim!
Mam problem s uploademsouboru...Jednou mi to jede jak ma a pak treba 30 napise chybu: "Warning: move_uploaded_file(): Unable to access /img/238/0.jpeg in /3w/wz.cz/a/autoin/pages/upload.php on line 50".
Uz se s tim stvu asi 3 dny a nechapu proc to nejde, tak kdyby mi pls nekdo byl schopen poradit, byl bych mu moc vdecny.
kod stranky vypada takto:
<?php
$cisloauta = explode("?" , $_GET['id']);//z adresy je poslano c.
if($cisloauta[1] != null){
$pocet_foto = $cisloauta[2];
}
$cesta = "/img/$cislo_auta";
function mkPath($cesta){
if(!is_dir($cesta)){
mkdir ("$cesta", 0700);
} else{
return;
}
}
function mkName($i, $cesta){
$pom=0;
//pokud vkladame 1. soubor, jeste zadny neexistuje:
if(!file_exists("$cesta/$pom.".basename($_FILES['user_f']['type'][$i]))){
$jmeno = "$pom.".basename($_FILES['user_f']['type'][$i]);
}
//pokud uz byl alespon 1 soubor vlozeny...
while(file_exists("$cesta/$pom.".basename($_FILES['user_f']['type'][$i]))){
$pom++;
$jmeno = "$pom.".basename($_FILES['user_f']['type'][$i]);
}
//vrati nove jmeno:
return $jmeno;
}
if(isset($_FILES['user_f'])){
echo "<p>velikost pole je : ".count($user_f)."<hr>";
for($i=0; $i < count($user_f); $i++){
print "<br>nazev: <b>". $_FILES['user_f']['name'][$i]."</b>";
print "<br>velikost: <b>". $_FILES['user_f']['size'][$i]." bajtů"."</b>";
print "<br>docsne umisteni: <b>". $_FILES['user_f']['tmp_name'][$i]."</b>";
print "<br>typ: <b>". $_FILES['user_f']['type'][$i]."</b>";
print "<br>chyba: <b>". $_FILES['user_f']['error'][$i]."</b>";
print "<br>cesta pro ulozeni: <b>".$cesta."</b>";
mkPath($cesta);//vytvori cestu
$nazev_souboru = $_FILES['user_f']['tmp_name'][$i];
$new_jmeno = mkName($i, $cesta);
$cil = "$cesta/"."$new_jmeno";//"$i.".basename($_FILES['soubor']['type'][$i]);
if(move_uploaded_file($nazev_souboru, $cil)){
echo"<p>Soubor <b>\"".$_FILES['user_f']['name'][$i]."\"</b> byl uspene skopirovan jako: <b>".$cil."</b></p><hr><br><br>";
} else{
echo"<p>chyba pri uploadu<hr></p><br><br>";
}
}
} else{
echo"<form action=\"index.php?id=24\" method=\"post\" enctype=\"multipart/form-data\" name=\"uplForm\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"8388608\" />
<input type=\"hidden\" name=\"cislo_auta\" value=\"$cisloauta[1]\"/>";
for($i=0; $i < $pocet_foto; $i++){
echo"<p>zadej soubor: <input type=\"file\" name=\"user_f[]\" /></p>";
}
echo" <p><input type=\"submit\" name=\"uploaduj\" title=\"uploaduj\" value=\"uploaduj\" /></p>
</form>";
}
?>
>> move_uploaded_file(): Unable to access /img/238/0.jpeg
chybne uvedena cesta, pokousis se pristupovat do rootu serveru
$cesta = "/img/$cislo_auta";
zmen na
$cesta = "./img/$cislo_auta";
Warning: move_uploaded_file(): Unable to move '/tmp/phpJRopaO' to './img/239/0.jpeg' in /3w/wz.cz/a/autoin/pages/upload.php on line 50
http://mracek.hostuju.cz/y/upl.txt
-> php
a pokud ti to funguje, tak si najdi chybu.
Pokud to nefunguje, tak by to homlo vypisovat nejakou chybu, treba, ze mas spatna prava na adresar nebo, ze adresar 239/ neexistuje a tak.
nejsem si jist, ale myslim, ze fce copy() je tady zakazana, ne?
a kdyz dam
$cesta = "img/$cislo_auta";
Warning: move_uploaded_file(img/241/0.jpeg): failed to open stream: Permission denied in /3w/wz.cz/a/autoin/pages/upload.php on line 50
a kdyz jsem to zkousel na jine strance, tak mi to jede uplne bez problemu...
kod z te 2. stranky : (soubor odkazuje o5 sam na sebe)
<?php
if($num>20)$num=20;
echo "<p> num = $num";
$pocet_foto = $num;
$cesta = "img/$c_a";
echo "<br>pocet foto: ".count($soubor)."<br>";
function mkPath($cesta){
if(!is_dir($cesta)){
mkdir ("$cesta", 0700);
} else{
return;
}
}
function mkName($i, $cesta){
$pom=0;
//pokud vkladame 1. soubor, jeste zadny neexistuje:
if(!file_exists("$cesta/$pom.".basename($_FILES['soubor']['type'][$i]))){
$jmeno = "$pom.".basename($_FILES['soubor']['type'][$i]);
}
//pokud uz byl alespon 1 soubor vlozeny...
while(file_exists("$cesta/$pom.".basename($_FILES['soubor']['type'][$i]))){
$pom++;
$jmeno = "$pom.".basename($_FILES['soubor']['type'][$i]);
}
//vrati nove jmeno:
return $jmeno;
}
if(isset($_FILES['soubor'])){
for($i=0; $i < count($soubor); $i++){
print "<br>nazev: <b>". $_FILES['soubor']['name'][$i]."</b>";
print "<br>velikost: <b>". $_FILES['soubor']['size'][$i]." bajtů"."</b>";
print "<br>docsne umisteni: <b>". $_FILES['soubor']['tmp_name'][$i]."</b>";
print "<br>typ: <b>". $_FILES['soubor']['type'][$i]."</b>";
print "<br>chyba: <b>". $_FILES['soubor']['error'][$i]."</b>";
print "<br>cesta pro ulozeni: <b>".$cesta."</b>";
mkPath($cesta);//vytvori cestu
$nazev_souboru = $_FILES['soubor']['tmp_name'][$i];
$new_jmeno = mkName($i, $cesta);
$cil = "$cesta/"."$new_jmeno";//"$i.".basename($_FILES['soubor']['type'][$i]);
if(move_uploaded_file($nazev_souboru, $cil)){
echo"<p>Soubor <b>\"".$_FILES['soubor']['name'][$i]."\"</b> byl uspene skopirovan jako: <b>".$cil."</b><hr><br><br>";
} else{
echo"<p>chyba pri uploadu<hr><br><br>";
}
}//= $_SERVER['PHP_SELF']
}
?>
<form action="index.php?id=1" method="post" enctype="multipart/form-data" name="uplForm">
<input type="hidden" name="MAX_FILE_SIZE" value="8388608" />
<input type="text" name="c_a" value="" />
<?
for($i=0; $i < $pocet_foto; $i++){
echo"<p>zadej soubor: <input type=\"file\" name=\"soubor[]\" /></p>";
}
unset($pocet_foto);
?>
<p><input type="submit" name="uploaduj" title="uploaduj" value="uploaduj" /></p>
</form>
"a kdyz jsem to zkousel na jine strance, tak mi to jede uplne bez problemu..."
tak mas funkcni zdrojak a chybny zdrojak. Porovnanim hodnot promennych zjistis chybu.
Dal bych na vsechny promenne ECHO "prom1=$prom1";
amalo: ty píšeš, že ti to funguje. Mě to teda nefunguje. Zkoušel jsem to na Apache 2 PHP 4.4.0 platforma Linux.
Tak jak?
Hledat chybu v tomhle prasokódu odmítám, sorry.
Mrkni na tohle a zkus podle toho najít chybu / lepší ř
ešení.
http://cz2.php.net/manual/cs/features.file-upload.php
kdyz se bavime o prasokodu, tak nemuzu za to, ze to forum rusi odsazeni a cele to prepisovat se mi fakt nechce...
a jestli jsi to jen vzal a skopiroval, tak ti to asi fakt nepujde, potoze ten soubor dostava informace jeste i z jine stranky, ktera tady bohuzel neni vyspana...
"a jestli jsi to jen vzal a skopiroval, tak ti to asi fakt nepujde" ... zase až tak špatně na tom ještě nejsem ;)
Jinak nejde o odsazení, ale o něco jako tohle:
1) proč máš 6x za sebou print(); ? Nejde to složit do jednoho ?
2) Slyšel jsi o "jednoduchých uvozovkách" (apostrofum) ?
3) " return; " má dělat co?
A když už teda řešíme tu nefunkčnost: co to píše za chybu?
takze se v tom nevyznas, protoze tam je 6x posobe 'print' (tady mas ty apostrofy)...A pokud jde o return, tak ten ve funkcich v objektove orientovanych jazycich ukoncuje funkci, alee to zajiste nemusi vysvetlovat. Ale zanchme malichernosti.
ta chyba:
Warning: move_uploaded_file(img/243/0.jpeg): failed to open stream: Permission denied in /3w/wz.cz/a/autoin/pages/upload.php on line 50
Warning: move_uploaded_file(): Unable to move '/tmp/phpIiFRbq' to 'img/243/0.jpeg' in /3w/wz.cz/a/autoin/pages/upload.php on line 50
redek c. 50 :
if(move_uploaded_file($nazev_souboru, $cil)){
...
amalo (autoin.wz.cz)
a ten muj script jsi do ted nevyzkousel, vid? Jenze, mne by zajimalo, co ti vypisuje.
php -> *.txt a sem das link a je to bez problemu s odsazenim
if(move_uploaded_file($nazev_souboru, $cil))
jj, a pred tim provedeme
$x = $nazev_souboru;
echo "nazev = $x ".substr(sprintf('%o', fileperms($x)), -3);
$x = $cil;
echo "cil = $x ".substr(sprintf('%o', fileperms($x)), -3);
a to ti vypisuje, co pekneho?
print "<br>nazev: <b>". $_FILES['soubor']['name'][$i]."</b>";
print "<br>velikost: <b>". $_FILES['soubor']['size'][$i]." bajtů"."</b>";
print "<br>docsne umisteni: <b>". $_FILES['soubor']['tmp_name'][$i]."</b>";
print "<br>typ: <b>". $_FILES['soubor']['type'][$i]."</b>";
print "<br>chyba: <b>". $_FILES['soubor']['error'][$i]."</b>";
print "<br>cesta pro ulozeni: <b>".$cesta."</b>";
a tohle ti vypisuje, co pekneho?
a mas nekde na webu PHP, aby jsme to mohli odzkouset aspon sami?
if(!is_dir($cesta)){mkdir ("$cesta", 0700);}
Nejsem si ted jistej, ale je 700 dostacujici opravneni, aby jsi mohl do adresare zapisovat?
Podle mne, 700 znamena prava
7 pro FTP
0 pro script
0 pro guest
7 pro FTP
0 pro script
0 pro guest
Zajímavý výklad práv k souborům.
Pokud chci mít jistotu, že nebude problém se zapisováním, nastavím 777. Mělo by i stačit 666. Záleží, kdo vytváří adresář a soubory. Jestli FTP, nebo skript a jestli to navzájem kombinuji.
ten tvuj script jsem zkousel, tak jak byl, aniz bych ho nejak upravoval a 1 obrazek uploaduje i kdyz se mu neco nelibi...
muzes to zkusit "http://sdhkopytov.wz.cz/u.php"...
Jde o to, ze ale potrebuju uploadovat pole souboru a ten 2. kod, co jsem sem napsal bezi a mam tam prava taky tech 700 (http://sdhkopytov.wz.cz/?id=3 - ale je to hodne prasacky udelane, protoze jsem si to na tom jen zkousel a zjistoval v cem by moh byt zakopany pes, tak to pls omluv...Nejdrive tam zadas pocet obrezku pro upload a pak jak je tam "test" tj. slozka kam to nakopcit...)
a kdyz to tam dam, tak to pise:
nazev = /tmp/phpps77y0 600
Warning: fileperms(): Stat failed for img/245/0.jpeg (errno=13 - Permission denied) in /3w/wz.cz/a/autoin/pages/upload.php on line 53
cil = img/245/0.jpeg 0
Warning: move_uploaded_file(img/245/0.jpeg): failed to open stream: Permission denied in /3w/wz.cz/a/autoin/pages/upload.php on line 55
Warning: move_uploaded_file(): Unable to move '/tmp/phpps77y0' to 'img/245/0.jpeg' in /3w/wz.cz/a/autoin/pages/upload.php on line 55
amalo:
"Permission denied" přístup odepřen. Změň adresáři práva pro zápis, tak aby tam mohl server (PHP) a potom to třeba půjde ;)
"v objektove orientovanych jazycich" od kdy je čtyřková řada PHP plnohodnotný objektově orientovaný jazyk? Plná podpora OOP se objevila teprve v PHP5 ;)
No a když už teda jsme v tom OOP, tak by jsi asi měl vědět, že v PHP by se mělo returnem vracet alespoň true; nebo false; když už teda nic jiného.
"takze se v tom nevyznas, protoze tam je 6x posobe 'print'" já se v tom vyznám, ale když vidím, že systém musí zbytečně inicalizovat 5 printů, když by si v klidu vystačil s jedním ... ale nic.
BTW: stringy uzavřený v apostrofech (') se narozdíl od uvozovek (") neprohánějí parserem ale jdou přímo na výstup, takže šetříš čas i sysémové prostředky. Ale to jsou, jak jsi sám říkal malichernosti takže nic.
zbi (knizky.unas.cz)
priblizne, plus minus :)
cz.php.net/fileperms
cil = img/245/0.jpeg 0
Warning: move_uploaded_file(img/245/0.jpeg): failed to open stream: Permission denied in /3w/wz.cz/a/autoin/pages/upload.php on line 55
tak prava = 0 znamena, ze nemas zadne opravneni a jak uz jsem naznacil, opravneni
mkdir ("$cesta", 0700);
neni 777 ani 766 ani 666
diky, jsem zase o neco chytrejsi...
A musim konstatovat, ze jsem 'debil'...bylo to temy pravy a uz mi to facha...
Diky vsem za pomoc...
Ale...
Proste jsi se s tim nesetkal, tak to nevis. Linux proste funguje jinak nez zavirovane win. http://cz.php.net/fileperms