\Nette\Web\Ftp – nelze otevřít soubor
- Tomáš Jablonický
- Člen | 115
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
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