Can';无法启用phar写入
我实际上是在PHP5.5.12中使用wamp 2.5,当我尝试创建phar文件时,它会返回以下消息: 未捕获异常“UnexpectedValueException”,消息“creating archive”…“被php.ini设置phar.readonly禁用” 即使我在php.ini中关闭了phar.readonly选项Can';无法启用phar写入,phar,php-ini,Phar,Php Ini,我实际上是在PHP5.5.12中使用wamp 2.5,当我尝试创建phar文件时,它会返回以下消息: 未捕获异常“UnexpectedValueException”,消息“creating archive”…“被php.ini设置phar.readonly禁用” 即使我在php.ini中关闭了phar.readonly选项 那么如何启用phar文件的创建呢?phar.readonly由于安全原因,只能在php.ini中禁用。 如果您想检查它是否真的不是使用php.ini以外的方法完成的,那么在终
那么如何启用phar文件的创建呢?
phar.readonly
由于安全原因,只能在php.ini
中禁用。
如果您想检查它是否真的不是使用php.ini
以外的方法完成的,那么在终端类型中:
$ php -r "ini_set('phar.readonly',0);print(ini_get('phar.readonly'));"
如果它将给你1
意味着phar.readonly
是上的
我也遇到了同样的问题,根据这个线程上的信息拼凑而成,下面是我在过于简化的解释中所做的:
在生成此错误的PHP代码中,我添加了echo phpinfo()代码>(显示一个包含各种PHP信息的大表)并在前几行中验证PHP.ini文件的路径,以确保您正在编辑正确的PHP.ini
找到phpinfo()
表中的phar.readonly
,注意它是on
从步骤1打开php.ini文件并搜索phar.readonly
。我的在第995行,读着;phar.readonly=On
将此行更改为phar.readonly=Off
。确保行的开头没有分号李>
重新启动服务器
确认您的phar project正在按预期工作,和/或再次搜索phpinfo()表
,查看phar.readonly设置是否已更改
需要在php.ini
文件中禁用
键入哪个php
根据机器提供不同的输出,例如。
/c/Apps/php/php-7.2.11/php
然后打开给定的路径,而不是php文件
例如/c/Apps/php/php-7.2.11
编辑php.ini文件
可以
vi C:\Apps\php\php-7.2.11\php.ini
[Phar]
; http://php.net/phar.readonly
phar.readonly = Off
; http://php.net/phar.require-hash
phar.require_hash = Off
code C:\Apps\php\php-7.2.11\php.ini
[Phar]
; http://php.net/phar.readonly
phar.readonly = Off
; http://php.net/phar.require-hash
phar.require_hash = Off
保存以供更改php.ini文件但未看到任何更改的用户使用。尝试使用文件的CLI版本。对我来说,它是在/etc/php/7.4/cli/php.ini
中使用php cli和hashbang,我们可以动态设置它,而不会弄乱ini文件
[Phar]
; http://php.net/phar.readonly
phar.readonly = Off
; http://php.net/phar.require-hash
phar.require_hash = Off
testphar.php
#!/usr/bin/php -d phar.readonly=0
<?php
print(ini_get('phar.readonly')); // Must return 0
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
} catch (Exception $e) {
echo 'Could not create phar:', $e;
}
echo 'The new phar has ' . $p->count() . " entries\n";
$p->startBuffering();
$p['file.txt'] = 'hi';
$p['file2.txt'] = 'there';
$p['file2.txt']->compress(Phar::GZ);
$p['file3.txt'] = 'babyface';
$p['file3.txt']->setMetadata(42);
$p->setStub('<?php
function __autoload($class)
{
include "phar://myphar.phar/" . str_replace("_", "/", $class) . ".php";
}
Phar::mapPhar("myphar.phar");
include "phar://myphar.phar/startup.php";
__HALT_COMPILER();');
$p->stopBuffering();
// Test
$m = file_get_contents("phar://brandnewphar.phar/file2.txt");
$m = explode("\n",$m);
var_dump($m);
/* Output:
* there
**/
✓ 必须这样称呼:
./testphar.php
// OUTPUT there
⚠️ 不能这样称呼:
chmod +x testphar.php
php testphar.php
// Exception, phar is read only...
⚠️ 无法从CGI web服务器调用
php -S localhost:8785 testphar.php
// Exception, phar is read only...
确保您正在编辑正确的php.ini。您可以使用phpinfo()
查找加载的php。您完全正确,我认为我发布得太快了。我实际上编辑了错误的php.ini文件。我在运行php版本5.5.9-1ubuntu4.14时遇到了完全相同的问题,但是,我已经验证了我正在编辑phpinfo()
中定义的正确的php.ini,在我的例子中,它是/etc/php5/apache2/php.ini
,该行的内容为phar.readonly=Off
是否还有其他需要启用的内容?在命令行中执行的脚本中,必须编辑文件夹cli的文件,例如:/etc/php5/cli/php.ini,@ USER 329。如果以下答案中的任何一个已经解决了您的问题,请考虑通过点击复选标记接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。在Linux上,使用:php-i | grep phar.readonly
验证它是否打开。和php-i | grep“Loaded Configuration”
查找当前配置。然后,按住CTRL+W键,选择sudo nano文件,然后按住CTRL+W键,选择phar.readonly文件(输入)。更改行并使用CTRL+X,Y(输入)保存