ugrás a tartalomhoz

file feltöltés $_FILES[] nem üres, de a file mégsem létezik

Theo76 · 2022. Már. 3. (Cs), 18.33
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...
  1. array (size=1)  
  2.   'file' =>   
  3.     array (size=6)  
  4.       'name' => string 'eredmeny_2.jpg' (length=14)  
  5.       'full_path' => string 'eredmeny_2.jpg' (length=14)  
  6.       'type' => string 'image/jpeg' (length=10)  
  7.       'tmp_name' => string '/home/testuser/public_html/tmp/phpTcJjuD' (length=41)  
  8.       'error' => int 0  
  9.       'size' => int 25273  
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:
  1.     $accepted_origins = array('https://localhost');  
  2.     $imageFolder = "/pictures/";  
  3.   
  4.     reset ($_FILES);  
  5.     $temp = current($_FILES);  
  6.   
  7.     if (is_uploaded_file($temp['tmp_name'])){  
  8.         if (isset($_SERVER['HTTP_ORIGIN'])) {  
  9.             // same-origin requests won't set an origin. If the origin is set, it must be valid.  
  10.             if (in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins)) {  
  11.                 header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);  
  12.             } else {  
  13.                 header("HTTP/1.1 403 Origin Denied");  
  14.                 return;  
  15.             }  
  16.         }  
  17.   
  18.         if (preg_match("/([^\w\s\d\-_~,;:\[\]\(\).])|([\.]{2,})/"$temp['name'])) {  
  19.             header("HTTP/1.1 400 Invalid file name.");  
  20.             return;  
  21.         }  
  22.   
  23.         if (!in_array(strtolower(pathinfo($temp['name'], PATHINFO_EXTENSION)), array("gif""jpg""png""jpeg"))) {  
  24.             header("HTTP/1.1 400 Invalid extension.");  
  25.             return;  
  26.         }  
  27.   
  28.         $filetowrite = $imageFolder . $temp['name'];  
  29.   
  30.         move_uploaded_file($temp['tmp_name'], $filetowrite);  
  31.   
  32.         $img = [  
  33.             'location' => $filetowrite  
  34.         ];  
  35.         // echo $this->response->setJSON($img);  
  36.         return json_encode($img);  
  37.     } else {  
  38.         header("HTTP/1.1 500 Server Error");  
  39.     }  
  40. }  
Előre is köszönöm a segítséget!
 
1

Előre szólok, nem értek

mind1 valami név · 2022. Már. 7. (H), 21.40
Előre szólok, nem értek hozzá, de $_FILE nem elírás? Mintha az, amit szeretnél, a $_FILES-ban lenne valójában, te meg két helyen is S nélkül írtad.
2

igen elírás, de nem a kódban!

Theo76 · 2022. Már. 7. (H), 22.49
Igen a címben tényleg elírtam, ezért elnézést... Viszont a bemásolt kóban $_FILES van!
Javítottam...
3

Jól értem, a

mind1 valami név · 2022. Már. 8. (K), 00.50
Jól értem, a $temp['tmp_name'] tartalmaz egy fájlnevet, teljes elérési úttal, de maga a fájl nincs ott?

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.
4

Sikerült megoldani...

Theo76 · 2022. Már. 12. (Szo), 15.59
Meglett a probléma... valami miatt a realtív hivatkozást nem akarta elfogadni...
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... :)
5

Leginkább szépészeti

mind1 valami név · 2022. Már. 12. (Szo), 18.21
Leginkább szépészeti beavatkozás jelen esetben, de nincs a php-ben olyan join() jellegű függvény, ami biztosítja, hogy a két könyvtárnév megfelelően legyen illesztve?
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)
6

Ezt nem tudom...

Theo76 · 2022. Már. 17. (Cs), 19.17
Viszont ez az elérési út hiba azóta van, hogy a php8-at használom... Szóval lehet valamit átvariáltak, mert van egy régebbi kódom és már az sem működik a relatív cím megadásával.
7

Nem relatív

Endyl · 2022. Már. 18. (P), 10.34
Ha "/"-rel kezdődik egy útvonal, az nem relatív, hanem a program által látható fájlrendszer gyökerétől számított abszolút útvonal (feltéve persze, hogy nem windowson vagy). Egy relatív úvonal elején nincs "/" (esetleg kezdődhet "./"-rel).