如何解决为什么 fopen() 中的某些访问模式会在我的新服务器上发出 PHP 警告?
我正在将 PHP 脚本从 PHP 5.6.40(Apache 2.2.15 CentOS 6.10 服务器)迁移到 PHP 8.0.1(Apache 2.4.37 CentOS 8.3 ).
我在使用 fopen()
函数时遇到问题,该函数根据模式选项抛出警告。
我在网上搜索没有发现类似的问题...
在每台服务器上,我都拥有相同的上下文和相同的权限:
$ pwd
/export/PHP/logs/aita
$ ll
-rw-r--r--. 1 apache apache 33 27 janv. 15:30 testFopen.txt
我的测试脚本非常简单,它检查所有 fopen 模式:
<?PHP
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'r'); // line 2
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'r+'); // line 3
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'w'); // line 4
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'w+'); // line 5
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'a'); // line 6
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'a+'); // line 7
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'x'); // line 8
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'x+'); // line 9
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'c'); // line 10
$handle = fopen("/export/PHP/logs/aita/testFopen.txt",'c+'); // line 11
运行此脚本时,我获得:
在我的旧服务器 PHP 5.6.40 上
[error] [client x.x.x.x] PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: File exists in /export/html/aita_dev/testFopen.PHP on line 8
[error] [client x.x.x.x] PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: File exists in /export/html/aita_dev/testFopen.PHP on line 9
那些警告是合乎逻辑的(文件存在和排除)。
在我的新服务器 PHP 8.0.1 上
[proxy_fcgi:error] [pid 37251:tid xxxx] [client x.x.x.x:x] AH01071: Got error '
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: Permission denied in /var/www/html/aita_dev/testFopen.PHP on line 3
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: Permission denied in /var/www/html/aita_dev/testFopen.PHP on line 4
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: Permission denied in /var/www/html/aita_dev/testFopen.PHP on line 5
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: File exists in /var/www/html/aita_dev/testFopen.PHP on line 8
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: File exists in /var/www/html/aita_dev/testFopen.PHP on line 9
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: Permission denied in /var/www/html/aita_dev/testFopen.PHP on line 10
PHP message: PHP Warning: fopen(/export/PHP/logs/aita/testFopen.txt): Failed to open stream: Permission denied in /var/www/html/aita_dev/testFopen.PHP on line 11'
第 8 行和第 9 行的警告在这里也有意义。
模式 r+、w[+] 和 c[+] 生成“权限被拒绝”警告。
模式 r,a[+] 运行良好,没有警告。
我可以使用“r”选项读取文件。 我可以使用“a”和“a+”选项写入文件,因此这似乎不是权限问题。
我想了解并且不必更正我的应用程序的所有 fopen()...
解决方法
负责服务器的管理员已经降低了 SELinux(Security-Enhanced Linux)的警报级别,现在一切正常。
系统设置为仅允许 Apache 用户按照 IMSoP 的建议读取/附加文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。