【发布时间】:2021-03-13 22:48:49
【问题描述】:
我是 php 新手。目前,作为迁移活动的一部分,我们将现有的 php 应用程序复制到了一个新的基础设施中,我们面临着一个奇怪的问题。
问题陈述: 从 php 应用程序中,无法读取任何文件,也没有抛出任何错误。我使用了以下库并得到了相同的行为:
- file_get_contents(这是现有的机制,我也应该在新的基础设施中使用它) 下面两个,检查分类问题:
- 读取文件
- fopen(用fopen试了一下,看看能不能像
fopen($file, "r") or die(一样打开),但这也是要死的条件
问题分类 制作了下面的 sample.php 并使其在我当前的服务器配置中可用。这可以通过 url 访问(例如 https://myapplicationdomain/myapplication/sample.php)。这个php组件正在读取同目录下的一个input.txt(其实这是模拟我们的问题)
<?php
ini_set('display_errors', 1); // show errors
error_reporting(-1);
//set your own error handler before the call
set_error_handler(function ($err_severity, $err_msg, $err_file, $err_line, array $err_context)
{
throw new ErrorException( $err_msg, 0, $err_severity, $err_file, $err_line );
}, E_WARNING);
echo "fopen url is";
var_dump(ini_get('allow_url_fopen'));
try{
$file ='input.txt';
if(is_readable($file)) {
echo "$file is readable \n"
} else {
echo "$file is not readable \n";
}
if(file_exists($file))
{
$homepage = file_get_contents($file);
var_dump($homepage);
echo "content is $homepage \n";
}else{
echo "file is not present \n";
}
}catch (Exception $e) {echo 'Error Caught $e';}
?>
Apache 服务器正在使用 apache 用户运行,并且该用户对文件和父目录具有权限, 以下是我们在分类过程中得到的观察结果:
- 当通过 url 访问时,例如https://myapplicationdomain/myapplication/sample.php(即通过 apache 服务器)。
一种。函数
is_readable和file_exists正在返回 true。
b. file_get_contents 返回空白,当我执行 var_dump 时,它返回 'Null'
c。确认allow_url_fopen的值,返回1,这是真的
d。在这种情况下不会记录任何错误。
e。更改了“input.txt”的权限以查看权限行为。在这种情况下,is_readable它自己显示了正确的错误。因此通过这种方式排除了权限问题的可能性,并确认错误处理程序实现工作正常。
f。将 input.txt 的位置更改为外部文件夹。 IE。 home/apache_user/ 或根目录。仍然文件读取操作失败。
- 能够独立运行相同的php代码。即
php sample.php。在这种情况下,它按预期工作,所有文件读取操作都工作正常。
3.检查以下所有php.ini配置(删除禁用功能中的所有值进行测试)
一个。 open_basedir => 没有价值
b. disabled_functions => 没有价值
c。 allow_url_fopen => 真
检查了所有帖子,但不知道如何进一步进行。以下是我们正在使用的版本:PHP 7.3.5,CodeIgnitor 框架,还配置了 php-fpm。
【问题讨论】:
-
" 它没有抛出任何错误" - 我敢打赌。您查看过服务器错误日志吗?
-
在这种情况下我看不到任何错误日志。我检查了 apache 错误日志和 fpm 日志
-
请注意,如果您通过 Web 服务器运行脚本,而不是通过 CLI 运行脚本,则不同的用户拥有该进程。在我的 debian/ubuntu 机器上,Web 服务器是 www-data,但当我通过 CLI 运行时,它是 sneakyimp。我不确定哪个用户对 PHP-FPM 有效。 HTH
-
是的,关于 CLI,我得到了..但是在这两种情况下我都使用 apache 用户运行。还要仔细检查权限问题(如我在 1.e 中所述)仅将输入文件的权限更改为 root 用户。在这种情况下,is_readable 函数本身发生了故障。所以这让我相信权限在正确的位置.
-
是的,它返回“null”。我还通过访问以下 sn-p ```
标签: php codeigniter php-7