【问题标题】:Facing issue while performing file reading operations in php在 php 中执行文件读取操作时面临问题
【发布时间】:2021-03-13 22:48:49
【问题描述】:

我是 php 新手。目前,作为迁移活动的一部分,我们将现有的 php 应用程序复制到了一个新的基础设施中,我们面临着一个奇怪的问题。

问题陈述: 从 php 应用程序中,无法读取任何文件,也没有抛出任何错误。我使用了以下库并得到了相同的行为:

  1. file_get_contents(这是现有的机制,我也应该在新的基础设施中使用它) 下面两个,检查分类问题:
  2. 读取文件
  3. 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 用户运行,并且该用户对文件和父目录具有权限, 以下是我们在分类过程中得到的观察结果:

  1. 当通过 url 访问时,例如https://myapplicationdomain/myapplication/sample.php(即通过 apache 服务器)。 一种。函数 is_readablefile_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/ 或根目录。仍然文件读取操作失败。

  1. 能够独立运行相同的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


【解决方案1】:

据我了解,apache 所指的 php 库存在一些问题。由于它是一个迁移项目,并且在当前环境中运行良好,因此将现有的 php 文件夹(位于 apache 内)和 fpm 二进制文件和配置从工作环境复制到新环境。仍然不知道确切的根本原因(因为只有读取场景失败),但这成功了

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 2017-04-28
    • 2019-09-19
    • 2020-05-23
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多