无法启用phar写入

时间:2016-01-08 00:24:20

标签: phar php-ini

我实际上在PHP 5.5.12中使用wamp 2.5,当我尝试创建 phar 文件时,它会返回以下消息:

  

未捕获的异常'UnexpectedValueException',消息'创建存档'...“由php.ini设置禁用phar.readonly'

即使我关闭 php.ini 中的 phar.readonly 选项。

那么如何启用phar文件的创建?

5 个答案:

答案 0 :(得分:2)

由于安全原因,

phar.readonly只能在php.ini中停用。 如果你想检查它是否真的没有使用除php.ini之外的其他方法,那么在终端中键入: -

$ php -r "ini_set('phar.readonly',0);print(ini_get('phar.readonly'));" 

如果它会给您1,则表示phar.readonlyOn More on phar.configuration

答案 1 :(得分:2)

我遇到了同样的问题,并从该线程上的信息中整理了一下,这是我在过于简单的解释中所做的:

  1. 在产生此错误的PHP代码中,我添加了echo phpinfo();(它显示了一个包含所有PHP信息的大表),并在前几行中验证php.ini文件的路径以确保您正在编辑正确的php.ini。
  2. phpinfo()表上的phar.readonly位置,注意它是 On
  3. 打开第1步中的php.ini文件,然后搜索phar.readonly。我的电话在995行,显示为;phar.readonly = On
  4. 将此行更改为phar.readonly = Off。请确保在行的开头没有分号。
  5. 重新启动服务器
  6. 确认您正在运行phar项目,并且/或者再次在`phpinfo()表上搜索以查看phar.readonly设置已更改。

答案 2 :(得分:1)

对于已更改php.ini文件,但看不到任何更改的任何人。尝试使用该文件的CLI版本。对我来说,它位于/etc/php/7.4/cli/php.ini

答案 3 :(得分:0)

需要在php.ini文件中禁用

类型which 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

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

保存

答案 4 :(得分:0)

使用php-cli和hashbang,我们可以即时设置它,而不会弄乱ini文件。


testphar.php

if ($emaillist -contains $email) {
    write-host "yes" -ForegroundColor Green
}
else {
    write-host "No" -ForegroundColor red
}

✓必须设置为可执行文件:

#!/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
**/

✓必须这样称呼

chmod +x testphar.php

⚠️不能这样称呼:

./testphar.php
// OUTPUT there

⚠️无法从CGI Web服务器调用

php testphar.php
// Exception, phar is read only...