我在创建新的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';
}
}
答案 0 :(得分:2)
检查安装路线中是否有某些字符无法用英语(如à或ö)读取。
实施例: C:\ Users \ User \ Inform à tica \ Web Projects - &gt; 必须是 - &gt; C:\ Users \ User \通知 a tica \ Web项目
答案 1 :(得分:1)
我可以调试并解决此问题。事实证明这对我来说是一个网络问题(防火墙)!
我发现命令“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文件。
我注意到以下功能正在尝试通过调用URL http://cabinet.laravel.com/latest.zip
来下载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)。如果它不工作,请联系网络管理员或尝试从您的家庭/移动网络执行命令。 希望这可以帮助。谢谢。
答案 2 :(得分:0)
最近我也遇到了这个错误,但是当我几周前安装它时它很好,我做了一些研究,但没有发现任何可能有用的东西。然后我尝试了以下方法:
在你的cmd [composer global require“laravel / installer = ~1.1”]中再次运行此命令
它将显示:“将当前目录更改为C:/ Users /(your_profile_name)/ AppData / Roaming / Composer ./composer.json已更新”
更新完成后会再次更新。它会工作正常。
我这样做了。
答案 3 :(得分:-1)
我刚刚通过在当前路径中创建一个文件夹来使用该命令,它就像:
laravel new larvIinstall
其中larvInstall不是路径,也不是命令选项,只是文件夹的名称。它运作得很好。