ugrás a tartalomhoz

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

Theo76 · 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...

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
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:

        $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 is köszönöm a segítséget!
 
1

Előre szólok, nem értek

mind1 valami név · 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 · 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 · 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 · 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 · 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 · 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 · 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).