IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: PHP FTP invalid filename problém

Aktivity
Avatar
Tomáš Martin Holub:7.12.2020 11:03

Dobře, takže mám takový jednoduchý kus kódu, jediné co dělá je, že vezme obrázek zpracuje ho a nahraje na FTP do nějaké speciální složky, můj problém ovšem přichází v části, kdy prográmek všechny složky správně vytvoří, avšak při nahrávání souboru vyjede stejná chyba "invalid filename" na druhý pokus vždy funguje bez problému.

class FTPService extends \Library\BaseService {

    private $config;

    private $ftp;

    private $ftp_log;

    function __construct() {
        parent::__construct();
        $this->config = $this->loadConfig("file");
        $this->ftp = ftp_connect($this->config["ftp"]["ftp_hostname"]);
        $this->ftp_log = ftp_login($this->ftp, $this->config["ftp"]["ftp_username"], $this->config["ftp"]["ftp_password"]);
    }

    public function uploadToServer($path,$pathOnServer){
        if (!file_exists($pathOnServer)) {
            ftp_mkdir($this->ftp,$pathOnServer);
        }
        $this->makeDirectoryPath($pathOnServer);
        sleep(5);
        var_dump("hey");
        if (ftp_alloc($this->ftp, filesize($path),$this->ftp_log)) {
            ftp_put($this->ftp, $pathOnServer, $path, FTP_BINARY);
            return true;
        }
        return false;
    }

    public function makeDirectoryPath($path) {
        $nlist = ftp_nlist($this->ftp, ".");
        $pathParams = explode("/",$path);
        var_dump($path);
        if(count($pathParams) > 2){
            var_dump(!in_array("../" .$pathParams[0],$nlist));
            if(!in_array("./" .$pathParams[0],$nlist)){
                ftp_mkdir($this->ftp,$pathParams[0]);
            }
            var_dump(ftp_pwd($this->ftp) . "pwd");
            var_dump($nlist);
            var_dump($pathParams[0]);
            ftp_chdir($this->ftp,$pathParams[0]);
            return $this->makeDirectoryPath(substr($path,strlen($pathParams[0])-strlen($path)+1));
        }else{
            if(!in_array("./" .$pathParams[0],$nlist)){
                ftp_mkdir($this->ftp,$pathParams[0]);
                return true;
            }
            ftp_chdir($this->ftp,"/");
            var_dump("bumbum");
            return true;
        }
    }
}

Zkusil jsem: Zkoušel jsem dávat např. odezvu v PHP, jestli se např. nedělají příkazy asynchronně, tzn. složky by se dělali poté, co se soubor začne nahrávat ... nepomohlo.

Chci docílit: Snažím se dosáhnout plně fungujícího vytvoření složky a nahrání souboru.

Editováno 7.12.2020 11:04
 
Odpovědět
7.12.2020 11:03
Avatar
Odpovídá na Tomáš Martin Holub
Tomáš Martin Holub:7.12.2020 22:28

Ok, omlouvám se, zjistil jsem kde je chyba. Funkci jsem ukončil returnem dříve, než se změnila do původní složky, takže to chtělo zapsat file místo např. /slozka1/sloz­ka2/soubor.txt tak do slozka1/slozka2/sloz­ka1/slozka2/sou­bor.txt, moje chyba.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
7.12.2020 22:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.