file feltöltés $_FILES[] nem üres, de a file mégsem létezik
Sziasztok!
Egy olyan gondom lenne, hogy a tinymce-hez próbáltam file feltöltést csinálni a saját oldalán lévő kód alapján.
Odáig eljutottam, hogy meghívja szépen a feltöltést kezelő oldalt, de mégsem történik meg a feltöltés.
Ellenőriztem a $_FILES tartalmát. Minden megvan benne...viszont a move_uploaded_file() parancs hibát dob, hogy a nem találja megadott file-t. A tmpfile, amúgy fizikailag sem található a megadott tmp mappába...
a tmp mapp írható, a max_filesize 20M, elvileg minden adott...
a php feldolgozó kód:Előre is köszönöm a segítséget!
■ Egy olyan gondom lenne, hogy a tinymce-hez próbáltam file feltöltést csinálni a saját oldalán lévő kód alapján.
Odáig eljutottam, hogy meghívja szépen a feltöltést kezelő oldalt, de mégsem történik meg a feltöltés.
Ellenőriztem a $_FILES tartalmát. Minden megvan benne...
array (size=1)
'file' =>
array (size=6)
'name' => string 'eredmeny_2.jpg' (length=14)
'full_path' => string 'eredmeny_2.jpg' (length=14)
'type' => string 'image/jpeg' (length=10)
'tmp_name' => string '/home/testuser/public_html/tmp/phpTcJjuD' (length=41)
'error' => int 0
'size' => int 25273
a tmp mapp írható, a max_filesize 20M, elvileg minden adott...
a php feldolgozó kód:
$accepted_origins = array('https://localhost');
$imageFolder = "/pictures/";
reset ($_FILES);
$temp = current($_FILES);
if (is_uploaded_file($temp['tmp_name'])){
if (isset($_SERVER['HTTP_ORIGIN'])) {
// same-origin requests won't set an origin. If the origin is set, it must be valid.
if (in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins)) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
} else {
header("HTTP/1.1 403 Origin Denied");
return;
}
}
if (preg_match("/([^\w\s\d\-_~,;:\[\]\(\).])|([\.]{2,})/", $temp['name'])) {
header("HTTP/1.1 400 Invalid file name.");
return;
}
if (!in_array(strtolower(pathinfo($temp['name'], PATHINFO_EXTENSION)), array("gif", "jpg", "png", "jpeg"))) {
header("HTTP/1.1 400 Invalid extension.");
return;
}
$filetowrite = $imageFolder . $temp['name'];
move_uploaded_file($temp['tmp_name'], $filetowrite);
$img = [
'location' => $filetowrite
];
// echo $this->response->setJSON($img);
return json_encode($img);
} else {
header("HTTP/1.1 500 Server Error");
}
}
Előre szólok, nem értek
igen elírás, de nem a kódban!
Javítottam...
Jól értem, a
Ha így van, a web szervered usere jogosult hozzáférni a könyvtárakhoz egészen a legalsó szintig és a legalsóra van írás joga?
Mondjuk ez van a fenti változódban:
$temp['tmp_name'] = '/home/testuser/public_html/tmp/phpTcJjuD'
Van minimum execute (x) joga a web szerver userének a /home, a /home/testuser, a /home/testuser/public_html könyvtárakhoz és minimum write (w) joga a /home/testuser/public_html/tmp könyvtárhoz?
Mert abból amit írtál, erős a gyanúm, hogy valami ilyen probléma lehet. Ráadásul nem tudom, milyen rendszered van, ha még mindezt megfejeled egy RedHat/CentOS/stb. linuxszal ami SELinux-t használ (vagy valami ubuntu-féle + apparmor)...
Még az jutott eszembe, hogy a web szerver logjába kellene belenézni, miközben feltöltöd a fájlt, biztosan mond valami csúnyát, ha jogosultsági gond.
Sikerült megoldani...
vagyis ezt a sort:
$imageFolder = "/pictures/";
nem úgy értelmezte, hogy a weblap gyökérkönyvtárából kiindulva...
átírtam a következőre:
$imageFolder = $_SERVER['DOCUMENT_ROOT'] . "/pictures/";
és már működik is... :)
Leginkább szépészeti
Magyarán, az op.rendszernek megfelelő szeparátort tesz közéjük, ha az első végén és a második elején sincs szeparátor, akkor beszúr egyet stb.?
(Pythonban os.path.join() megfelelője)
Ezt nem tudom...
Nem relatív