Can';无法启用phar写入

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以外的方法完成的,那么在终

我实际上是在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
以外的方法完成的,那么在终端类型中:

$ 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(输入)保存