Autor Zpráva
timbuktata
Profil *
čau, chtěl jsem si zkusit příklad s File Upload, z webu http://www.owebu.cz/php/vypis.php?clanek=963 , ale pořád mi to hází chybu 11-Soubor oznaceny jako uploadovany neni uploadovany nebo uploadovany soubor nelze presunout. Nevíte co je špatně, když jsem to jem zkopíroval, tak by to mělo jet ne?

FileUpload.html
<html>
<head>
<title>Session</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<form action='fupload.class.php' method='post' enctype='multipart/form-data'>
<input type="file" name='upload' />
<input type="submit" />
</form>
</body>
</html>

fupload.class.php

<?php
class fupload {

//pole s akceptovaným MIME obsahem

var $MIMEAccept;

//pole $_FILES s uploadovanými daty

var $uploadDataArr;

//název pole NAME vložení uploadovaného souboru formuláře

var $fileFormName;

//popis chyby

var $errorDesc;

//cílová cesta a název uploadovaného souboru

var $ufilePath;

var $ufileFilename;



//konstruktor

function fupload() {

$this->MIMEAccept = null;

$this->uploadDataArr = null;

$this->fileFormName = null;

$this->errorDesc = null;

$this->ufilePath = null;

$this->ufileFilename = null;

}

//převezme uploadovaná data, argumentem je předané pole $_FILES

//vrací true když jsou uploadovaná data v pořádku, soubor je v tmp adresáři na serveru a vyhovuje filtru MIME obsahu, jinak false nebo číslo chyby statusu přenosu uploadovaného souboru

function setUploadData($uploadDataArr) {

//testuji, zdali je převzatá proměnná typu pole

if (is_array($uploadDataArr)) {

$this->uploadDataArr = $uploadDataArr;

//zjistí název pole vložení uploadovaného souboru formuláře

//naplní pole se všemi názvy polí NAME vložení uploadovaného souboru formuláře

$tmp = @array_keys($this->uploadDataArr);

if (!empty($tmp)) {

//platný je první název pole NAME, další se zahodí

$this->fileFormName = $tmp[0];

//rozlišení statusu chyby při přenosu souboru, při chybě vrací číslo chyby statusu + 10, jinak true

switch ($this->uploadDataArr[$this->fileFormName]['error']) {

case 4:

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 4 :: Soubor nebyl uploadovan";

return 4;

break;

case 3:

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 3 :: Uploadovala se pouze cast souboru";

return 3;

break;

case 2:

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 2 :: Velikost uploadovaneho souboru je vetsi nez dovoluje formular";

return 2;

break;

case 1:

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 1 :: Velikost uploadovaneho souboru je vetsi nez dovoluje server";

return 1;

break;

case 0:

//uploadovaný soubor je v tmp adresáři na serveru

//test, jestli vyhovuje MIME filtru obsahu

if (!empty($this->MIMEAccept)) {

//filtr MIME obsahuje položky, test jestli je položek více

if (is_array($this->MIMEAccept)) {

if (in_array($this->uploadDataArr[$this->fileFormName]['type'], $this->MIMEAccept)) {

//soubor vyhovuje MIME obsahu

return true;

}

else {

//soubor nevyhovuje MIME obsahu

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 9 :: MIME obsah uploadovaneho souboru nevyhovuje nastavenemu filtru";

return false;

}

}

else {

//jedna položka v MIME filtru, test jestli vyhovuje

if ($this->uploadDataArr[$this->fileFormName]['type'] == $this->MIMEAccept) {

//soubor vyhovuje MIME obsahu

return true;

}

else {

//soubor nevyhovuje MIME obsahu

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 9 :: MIME obsah uploadovaného souboru nevyhovuje nastavenemu filtru";

return false;

}

}

}

return true;

break;

default:

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 10 :: Nerozeznana chyba pri uploadovani souboru";

return false;

break;

}

}

else {

//chyba

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 5 :: Neni definovan nazev pole 'NAME' vlozeni uploadovaneho souboru formulare";

return false;

}

}

else {

//chyba, pokud předávané pole není pole

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 6 :: Vyzaduje pole s informacemi o uploadovanem souboru nejcasteji _FILES, zadana promenna neni typu pole";

return false;

}

}

//nastaví akceptovaný MIME obsah -- filtr uploadovaných dat, argument je pole MIME typů obsahu

//vrací pokaždé true

function setMIMEAccept($MIMEAccept) {

$this->MIMEAccept = $MIMEAccept;

return true;

}

//vrací popis uploadovaného souboru jako pole

function getUploadContent () {

return $this->uploadDataArr;

}

//nastaví název uploadovaného souboru a cílovou cestu, kam se má uploadovaný soubor uložit a způsob výběru názvu souboru

//vrací true když cílová cesta existuje a název souboru je definovatelný dle pravidel výše, jinak false

function setTargetPath($filePath, $fileName, $mode) {

if ($mode == 'FU_IMP' && !empty($filePath)) {

//stejný název souboru jako uploadovaný, nenulový řetězec cesty kam se má soubor uložit

//uložím název souboru

$this->ufileFilename = $this->uploadDataArr[$this->fileFormName]['name'];

//cesta do adresáře, kam se má soubor uložit musí existovat

if (@is_dir(trim($filePath))) {

$this->ufilePath = $filePath;

return true;

}

else {

//chyba

$this->isError = true;

$this->errorDesc = "Chyba FUpload :: 8 :: Zadana cesta : " . $filePath . " : adresare, kam se ma uploadovany soubor ulozit neexistuje, nebo nejsou nastavena potrebna opravnení";

return false;

}

}

elseif ($mode == 'FU_EXP' && !empty($fileName) && !empty($filePath)) {

//jiný název souboru než uploadovaný, nenulový řetězec cesty kam se má soubor uložit

$this->ufileFilename = $fileName;

$this->ufilePath = $filePath;

return true;

}

else {

//chyba

$this->errorDesc = "Chyba FUpload :: 7 :: Chybne zadani nebo kombinace konstanty zpusobu vyberu nazvu souboru, nazvu souboru nebo cesty, kam se ma soubor ulozit";

return false;

}

return false;

}

//přesune soubor na cílové umístění, vrací true při úspěchu, jinak false

function upload() {

if (@is_uploaded_file($this->uploadDataArr[$this->fileFormName]['tmp_name ']) && @move_uploaded_file($this->uploadDataArr[$this->fileFormName]['tmp_nam e'], $this->ufilePath . "/" . $this->ufileFilename)) {

//vyprázdnění dat

$this->MIMEAccept = null;

$this->uploadDataArr = null;

$this->fileFormName = null;

$this->isError = false;

$this->errorDesc = null;

$this->ufilePath = null;

$this->ufileFilename = null;

return true;

}

$this->errorDesc = "Chyba FUpload :: 11 :: Soubor oznaceny jako uploadovany neni uploadovany nebo uploadovany soubor nelze presunout";

return false;

}

//vrací popis chyby, která nastala, vynuluje příznak chyby a text chybového hlášení

function errorDesc() {

$tmp = $this->errorDesc;

$this->errorDesc = null;

return $tmp;

}

}

//nejdříve vytvoříme instanci třídy fupload -- objekt (viz. Objektově Orientované Programování)

$iFUpload = new fupload;

//zde si definuji, které soubory MIME chci, aby se mi uploadovaly; pro příklad to bude výše zmíněný JPEG obrázek a dokument MSWord

$mime = array("image/jpeg", "application/msword");

$iFUpload->setMIMEAccept($mime);

//dále si řeknu, kam se mi uploadované obrázky a dokumenty budou ukládat. Pro příklad použiji způsob vytvoření souboru z názvu souboru zadaného ve formuláři (všimněte si, že cestu k adresáři mám zadanou bez koncového lomítka)

$iFUpload->setTargetPath("c:/temp", NULL, "FU_IMP");

//nyní naplním objekt daty z formuláře (ty jsou obsažena v poli $_FILES)

$iFUpload->setUploadData($_FILES);

//a přesunu soubor

$iFUpload->upload();

//když se něco nepovede, tak si nechám vypsat chyby

print $iFUpload->errorDesc();

?>
Tomáš Hanus
Profil
Jinak chyba 11 nastane, kdyz se pokousi presunout dany soubor z temp adresáře do cílového. Zde bude chyba.
timbuktata
Profil *
děkuji za odpověď. nastavený soubor pro ukládání je c: emp ne? takže by se tam soubor měl automaticky přemístit? jinak jsem to zkoušel jak lokálně, tak na webu, ale nic nejde.
DFly
Profil
co zkusit vyhazet ty zavinace, a nechat si chyby vypsat od PHP
timbuktata
Profil *
tak když vyhodim zavináče, tak php hodí tuto chybu

Warning: move_uploaded_file(c:/temp/): failed to open stream: Permission denied in c:program fileseasyphp1-8wwwfupload.class.php on line 310

Warning: move_uploaded_file(): Unable to move 'C:PROGRA~1EASYPH~1\tmpphpF2.tmp' to 'c:/temp/' in c:program fileseasyphp1-8wwwfupload.class.php on line 310
Chyba FUpload :: 11 :: Soubor oznaceny jako uploadovany neni uploadovany nebo uploadovany soubor nelze presunout
DFly
Profil
pak by to z te hlasky melo byt jasne: Permission denied u fce move_uploaded_file()...


pro adminy techto stranek: nemelo by byt nekde popsano par zakladnich (nejcastejsich) problemu jako je treba upload (s linky do manualu) a velikosti H1 napsano PRÁVA, PRÁVA, PRÁVA... :-) protoze problemy s uploadem jsou tu nejmene vzdy dva na te same strance...
tiso
Profil
DFly - myslíš
toto ? Ale tento príklad tam chýba...
timbuktata
Profil *
tak s těma právama to je divný, protože i když to dělám lokálně tak to nejde a tam bych měl mít práva všude.
Matalion
Profil *
pokud jsi na ic nebo webzdarma tak ti to nepujde
bohyn
Profil
V tomto pripade zakroci direktiva basedir ktera te nepusti do nadrazeneho adresare tvych stranek. Basedir se aplikuje i pri vypnutem sefe_mode. Udelej si temp v adresari co mas svoje stranky.

Edit:
Matalion
pokud jsi na ic nebo webzdarma tak ti to nepujde
Tohle ti nepojede na zadnym ne-kamikadze hostingu
forkman
Profil *
Mohl by mi někdo vysvětlit proč mi to taky nefunguje? když si dám 2 řádky nad volání metody move_uploaded_file($_FILES['upload']['tmp_name'],$_FILES['upload']['name']);, tak to normálně funguje, ale metoda upload mně stejně vždycky vypíše chybu číslo 11, několikrát zmiňovanou.

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: