即使我在php.ini文件中进行更改,mysqli.allow_local_infile也始终关闭,如何以正确的方式启用?

时间:2019-11-22 04:19:36

标签: php ubuntu mysqli

我是使用Apache2,Php(7.3)和Mysql运行ubuntu 18.04的新手。

我跑步时

sudo php -r 'phpinfo();' | grep -i mysqli

我得到结果:

    /etc/php/7.3/cli/conf.d/20-mysqli.ini,
    mysqli
    MysqlI Support => enabled
    mysqli.allow_local_infile => Off => Off
    mysqli.allow_persistent => On => On
    mysqli.default_host => no value => no value
    mysqli.default_port => 3306 => 3306
    mysqli.default_pw => no value => no value
    mysqli.default_socket => no value => no value
    mysqli.default_user => no value => no value
    mysqli.max_links => Unlimited => Unlimited
    mysqli.max_persistent => Unlimited => Unlimited
    mysqli.reconnect => Off => Off
    mysqli.rollback_on_cached_plink => Off => Off
    API Extensions => mysqli,pdo_mysql

我的问题是为什么mysqli.allow_local_infile => Off => Off ,即使我尝试在php.ini中启用它?我在做错什么吗?

(对不起我的英语不好)

2 个答案:

答案 0 :(得分:0)

我开箱即用运行php 7.0,并检查了您的“公式”

sudo php -r 'phpinfo();' | grep -i mysqli

我得到了 mysqli.allow_local_infile =>关闭=>关闭
然后我看看mysql

SHOW GLOBAL VARIABLES LIKE '%local_infile%';

在我的系统上似乎已经打开。但这很可能是因为我在MariaDB上
如果要打开它,可以:

SET GLOBAL `local_infile` = 'ON';

在mariaDB中,my.cnf中没有此类设置,我尝试添加它但没有效果
您可以尝试在

之后的某处添加my.cnf
[mysqld]
[...]
local_infile=ON
// or
ocal_infile=1
// or
allow_local_infile=ON
// or
allow_local_infile=1

,然后重新启动数据库。如果它让我知道。

另一种方法,我承认不太优雅,是,如果您在某些Linux机器上,则可以转到启动顺序(在debian上是/etc/ini.d/mysql),对其进行编辑,然后搜索“ start” '),并在遇到; 以下代码之前放在最后一个命令之后:

case...
[...]
    'start')
    [...]
    /usr/bin/mysql -u <user> -p<pass> -e "SET GLOBAL local_infile = ON"
    ;;

(我不确定,但我认为您可以跳过-u和-p,因为您是root。) 好,
...而最后的手段是ini文件。您将名为myini.sql的文件写入

SET GLOBAL `local_infile` = 'ON';

在其中,将其放置在/ etc / mysql中,然后将其扔给您的mysql用户。最后,您在my.cnf中写:

[mysqld]
[...]
init-file=/etc/mysql/myini.sql

并重新加载数据库。

答案 1 :(得分:0)

我在PHP7.4上有同样的问题。我试过添加: mysqli.allow_local_infile =开 到php.ini,.user.ini和.htaccess,但尽管重新启动了apache和php-fpm,它仍然顽固地处于“关闭”状态。 这是在编译时设置的吗? 我在WHM / cPanel和CentOS 6上使用EasyApache

更新: 尽管我在任何地方都找不到此文档,但在我看来,似乎可以限制用户的cPanel帐户中覆盖的PHP选项数量有限。据我所知,更改全局php.ini中的设置是唯一的选择。

更新2 事实证明,有一种方法可以针对每个帐户启用它:

/var/cpanel/userdata/username/domain.php-fpm.yaml

--- 
_is_present: 1
pm_max_children: 5
pm_max_requests: 20
pm_process_idle_timeout: 10
php_admin_value_mysqli_allow_local_infile: { name: 'php_admin_value[mysqli.allow_local_infile]', value: 1 }

在php.ini中全局禁用它:

; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
; http://php.net/mysqli.allow_local_infile
mysqli.allow_local_infile = Off

重新启动PHP-FPM和Apache。 cPanel / WHM文档中对此进行了说明: https://docs.cpanel.net/knowledge-base/php-fpm/configuration-values-of-php-fpm/