tilde(~)是否使用php设置(.user.ini/php.ini)来引用主目录以获取路径?

tilde(~)是否使用php设置(.user.ini/php.ini)来引用主目录以获取路径?,php,linux,directory,Php,Linux,Directory,我的服务器是Linux共享主机,它允许我为php初始化指定.user.ini。我试图通过抛出异常来记录错误。当我将路径指定为“/logs/phperrors.log”时,它会起作用,但对于引用我的主目录的~/logs/phperrors.log则不起作用 error_log = "~/logs/phperrors.log" file_uploads = On post_max_size = 1024M upload_max_filesize = 1024M max_input_time = -

我的服务器是Linux共享主机,它允许我为php初始化指定
.user.ini
。我试图通过抛出异常来记录错误。当我将路径指定为
“/logs/phperrors.log”
时,它会起作用,但对于引用我的主目录的
~/logs/phperrors.log
则不起作用

error_log = "~/logs/phperrors.log"

file_uploads = On
post_max_size = 1024M
upload_max_filesize = 1024M
max_input_time = -1
max_execution_time = -1
memory_limit = -1
max_file_uploads = 1000

抱歉,不同的语法-在PHP中,tilde用作按位求反运算符

来自PHP手册

位运算符

在Lunix机器上,使用

$_SERVER['HOME']
换句话说

error_log = $_SERVER['HOME'] . "/logs/phperrors.log"
参见类似问题的完整答案:

关于如何修改php.ini
我还没有尝试过,但这应该可以工作-在您的一个PHP文件中添加以下代码:

ini_set('error_log', $_SERVER['HOME'] . '/logs/phperrors.log');

参考资料:

一种想法是使用ini\u集,因为没有一种简单的方法可以直接在.ini文件中执行您想要执行的操作

首先,检查HOME是否在服务器环境变量中。。。如果是,就使用它,如果不是,也许您可以有一个配置文件,其中包含一些硬编码的默认内容

    if (getenv("HOME")) {
        $home = getenv("HOME");
        ini_set('error_log', $home . "/logs/phperrors.log");
    } else {
        ini_set('error_log', $config['log_directory']);
    }

对。PHP ini字符串可以包含环境变量

这是来自以下方面的说明:

ENV变量也可以在.ini文件中访问。因此,可以使用${LOGIN}和${USER}引用主目录。
服务器API之间的环境变量可能不同,因为这些环境可能不同

在您的情况下,您要查找的环境变量很可能被写成
${HOME}

error_log = "${HOME}/logs/phperrors.log"

这应该很容易测试。然而,PHP不是您的shell,
~/
一开始是shell替代
$HOME
。因此,PHP设置的任何类似HOME目录常量?不是真的,但请参见此处:在PHP.ini中,它不会计算表达式。您可以使用PHP ini\u set()函数将PHP代码设置为PHP.ini。修改了答案。很抱歉进行了向下投票,但是字符串中的波浪号不会被解释为按位运算符,并且您不能期望PHP代码在PHP.ini中进行计算