\Nette\Web\Ftp – nelze otevřít soubor

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Jablonický
Člen | 115
+
0
-

Již delší dobu tu zápasím s \Nette\Web\Ftp. Prblém je následující. Na FTP mám xml soubor, které se aktualizují. Bohužel není k nim jiný přístup než tento. Potřebuji všechny tyto soubory stáhnout ale bohužel se mi to nedaří a vždy to vyhučí hned u prvního z nich následující chybou:

exception ‚ErrorException‘ with message ‚ftp_get(): Error opening LOH/cz-data/000/x0–00000ar-000-cz.xml‘ in /var/www/loh/app/addons/Ftp/Ftp.php:113 Stack trace: #0 [internal function]: Nette\Diagnostics\Debugger::_errorHandler(2, ‚ftp_get(): Erro…‘, ‚/var/www/loh/ap…‘, 113, Array) #1 [internal function]: ftp_get(Resource id #146, ‚LOH/cz-data/000…‘, ‚/var/www/loh/ap…‘, 1) #2 /var/www/loh/app/addons/Ftp/Ftp.php(113): call_user_func_array(‚ftp_get‘, Array) #3 /var/www/loh/app/ImportModule/models/Import.php(45): Nette\Web\Ftp->__call(‚get‘, Array) #4 /var/www/loh/app/ImportModule/models/Import.php(45): Nette\Web\Ftp->get(‚LOH/cz-data/000…‘, ‚/var/www/loh/ap…‘, 1) #5 /var/www/loh/app/ImportModule/presenters/ParametrPresenter.php(16): Model\Import->save(‚neco‘) #6 [internal function]: ImportModule\ParametrPresenter->actionDefault() #7 /var/www/loh/libs/Nette/Application/UI/PresenterComponent.php(99): ReflectionMethod->invokeArgs(Object(ImportModule\ParametrPresenter), Array) #8 /var/www/loh/libs/Nette/Application/UI/Presenter.php(182): Nette\Application\UI\PresenterComponent->tryCall(‚actiondefault‘, Array) #9 /var/www/loh/libs/Nette/Application/Application.php(131): Nette\Application\UI\Presenter->run(Object(Nette\Application\Request)) #10 /var/www/loh/app/bootstrap.php(57): Nette\Application\Application->run() #11 /var/www/loh/www/index.php(16): require(‚/var/www/loh/ap…‘) #12 {main}

Script je následující:

<?php

namespace Model;

class Import extends Mapper
{

    /**
     * @var Ftp
     */
    private $ftp;

    private $appDir;

    public function __construct(
                \Nette\Database\Connection $connection,
                \Model\Ftp                 $ftp,
                $appDir
            )
    {
        parent::__construct($connection);
        $this->ftp    = $ftp;
        $this->appDir = $appDir.'/../xml';
    }

    /**
     * Ulozeni souboru do slozky
     * @param str $dir
     */
    public function save($dir)
    {

        $ftp = $this->ftp;
        $lists = $this->getFiles();
        foreach ($lists as $folder => $files){
            foreach ($files as $file){
                $file = $folder.'/'.$file;
                try {
                    $ftp->Ftp()->get($file, $this->appDir.'/'. $dir.'/'.$file, \Nette\Web\Ftp::ASCII);
                } catch (\Nette\Web\FtpException $e) {
                    echo ($e->getMessage());
                    exit;
                }

            }
        }
    }

    /*
     * Rekurzivně vrátí všechny složky a jejich soubory
     **/
    private function getFiles($path='.')
    {
       static $allFiles = array();
       $contents = $this->ftp->Ftp()->nlist($path);
       foreach($contents as $currentFile) {
            if (strpos($currentFile, '.') === false) {
                $this->getFiles($currentFile);
            }
            $allFiles[$path][] = substr($currentFile, strlen($path) + 1);
        }
       return $allFiles;
    }

?>
Tomáš Jablonický
Člen | 115
+
0
-

Tak vyřešeno.

V programování celkem běžná chyba a to záměna proměnných :D.

ftp_get(connect, kam se ma nahrat soubor, odkud vzit soubor, mod);

Snad to pomuze budoucim generacim :D