Laravel 5 — PHP Предупреждение: ZipArchive :: extractTo (): недопустимый или унифицированный объект Zip

У меня есть небольшая проблема с созданием нового проекта Laravel. Вчера я создал новый проект без проблем, но сегодня я получил эту ошибку:

PHP Warning:  ZipArchive::extractTo(): Invalid or unitialized Zip object in /home/tomas/.composer/vendor/laravel/installer/src/NewCommand.php on line 114
PHP Warning:  ZipArchive::close(): Invalid or unitialized Zip object in /home/tomas/.composer/vendor/laravel/installer/src/NewCommand.php on line 116

Я думал, что у меня нет разрешения на /home/tomas/.composer/vendor/laravel/installer/src/NewCommand.php, но у меня есть все права.

Разве вы не знаете, где могут быть проблемы? Спасибо.

РЕДАКТИРОВАТЬ:

Я просто запускаю команду: laravel new projectName

<?php namespace Laravel\Installer\Console;

use ZipArchive;
use Symfony\Component\Process\Process;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class NewCommand extends \Symfony\Component\Console\Command\Command {

/**
* Configure the command options.
*
* @return void
*/
protected function configure()
{
$this->setName('new')
->setDescription('Create a new Laravel application.')
->addArgument('name', InputArgument::REQUIRED);
}

/**
* Execute the command.
*
* @param  InputInterface  $input
* @param  OutputInterface  $output
* @return void
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->verifyApplicationDoesntExist(
$directory = getcwd().'/'.$input->getArgument('name'),
$output
);

$output->writeln('<info>Crafting application...</info>');

$this->download($zipFile = $this->makeFilename())
->extract($zipFile, $directory)
->cleanUp($zipFile);

$composer = $this->findComposer();

$commands = array(
$composer.' run-script post-install-cmd',
$composer.' run-script post-create-project-cmd',
);

$process = new Process(implode(' && ', $commands), $directory, null, null, null);

$process->run(function($type, $line) use ($output)
{
$output->write($line);
});

$output->writeln('<comment>Application ready! Build something amazing.</comment>');
}

/**
* Verify that the application does not already exist.
*
* @param  string  $directory
* @return void
*/
protected function verifyApplicationDoesntExist($directory, OutputInterface $output)
{
if (is_dir($directory))
{
$output->writeln('<error>Application already exists!</error>');

exit(1);
}
}

/**
* Generate a random temporary filename.
*
* @return string
*/
protected function makeFilename()
{
return getcwd().'/laravel_'.md5(time().uniqid()).'.zip';
}

/**
* Download the temporary Zip to the given file.
*
* @param  string  $zipFile
* @return $this
*/
protected function download($zipFile)
{
$response = \GuzzleHttp\get('http://cabinet.laravel.com/latest.zip')->getBody();

file_put_contents($zipFile, $response);

return $this;
}

/**
* Extract the zip file into the given directory.
*
* @param  string  $zipFile
* @param  string  $directory
* @return $this
*/
protected function extract($zipFile, $directory)
{
$archive = new ZipArchive;

$archive->open($zipFile);

$archive->extractTo($directory);

$archive->close();

return $this;
}

/**
* Clean-up the Zip file.
*
* @param  string  $zipFile
* @return $this
*/
protected function cleanUp($zipFile)
{
@chmod($zipFile, 0777);

@unlink($zipFile);

return $this;
}

/**
* Get the composer command for the environment.
*
* @return string
*/
protected function findComposer()
{
if (file_exists(getcwd().'/composer.phar'))
{
return '"'.PHP_BINARY.'" composer.phar';
}

return 'composer';
}

}

1

Решение

Проверьте, есть ли в маршруте установки какой-либо символ, который не может быть прочитан на английском языке, например à или ö.


Пример:
C: \ Users \ User \ Информàtica \ Веб-проекты ->
должно быть ->
C: \ Users \ User \ Информтика \ веб-проекты

2

Другие решения

Я могу отладить и решить эту проблему. Оказывается, это проблема сети (брандмауэр) для меня!

Я заметил, что команда «laravel new» работает нормально в моей домашней сети, но я получаю следующую ошибку в офисной сети,

PHP Warning:  ZipArchive::extractTo(): Invalid or unitialized Zip object in C:\Users\Rajesh Kumar Raj\AppData\Roaming\Composer\vendor\laravel\installer\src\NewCommand.php on line 157

Итак, я решил отладить файл NewCommand.php.

Я заметил, что следующая функция пытается загрузить ZIP-файл, вызвав URL http://cabinet.laravel.com/latest.zip

protected function download($zipFile, $version = 'master')
{
switch ($version) {
case 'develop':
$filename = 'latest-develop.zip';
break;
case 'master':
$filename = 'latest.zip';
break;
}

$response = (new Client)->get('http://cabinet.laravel.com/'.$filename);

file_put_contents($zipFile, $response->getBody());

return $this;
}

Я попытался набрать URL в своем браузере и получил ошибку брандмауэра, так как URL имеет расширение .zip. Поэтому я попросил администратора сети исключить проверку этого URL.

Затем проект был успешно создан без каких-либо проблем.

Итак, решение, попробуйте получить доступ к URL (http://cabinet.laravel.com/latest.zip) из вашего браузера. Если это не работает, обратитесь к администратору сети или попробуйте выполнить команду из домашней / мобильной сети.
Надеюсь это поможет. Благодарю вас.

1

Недавно я также получил эту ошибку, но когда я установил ее несколько недель назад, все было в порядке, и я провел некоторые исследования, но не нашел ничего, что могло бы сильно помочь. Затем я позже попробовал следующие методы:

  • снова запустите эту команду в вашем cmd [composer global require «laravel / installer = ~ 1.1»]

  • Он покажет: «Изменен текущий каталог на C: / Users / (ваше_профиля_имя) / AppData / Roaming / Composer ./composer.json был обновлен»

  • После этого обновление будет завершено, снова проверьте проверку. Это будет работать нормально.

  • Мой работал так.

0

Я просто использовал команду, создав папку в текущем пути, в котором я уже находился, это что-то вроде:

laravel new larvIinstall

где larvInstall — это не путь и не опция команды, а только имя папки. и это работало просто отлично.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector