And*_*lie 22 php fopen php-safe-mode tmp
我正在尝试使用php fopen函数将文件写入我的/ tmp目录(在apache服务器上),但它失败了:
<?php
$handle = fopen("/tmp/test.txt", "x");
if ($handle)
echo "Success!";
else
print_r(error_get_last());
Run Code Online (Sandbox Code Playgroud)
这将返回错误消息"无法打开流:没有此类文件或目录"./ tmp目录的权限设置为drwxrwxrwt,我可以看到Web用户正在向其写入其他文件.神奇的是,如果我将脚本指向具有权限777的另一个文件夹,它将返回成功.但我的open_basedir"没有价值".我有safe_mode = on和allow_url_fopen = off,但我认为不应该解释它吗?
这是关于apache 2.0的php 5.3.10.
And*_*hov 41
我有完全相同的问题.PHP报告打开文件没有问题/tmp/myoutputfile
,但该路径中没有文件.然后我做了/tmp/systemd-…/myoutputfile
,发现了它/tmp/myoutputfile
.谷歌找到了http://blog.oddbit.com/2012/11/05/fedora-private-tmp/.所以在我的情况下它是systemd + apache组合.希望这会对某人有所帮助.
unt*_*ill 18
您的问题很可能是由 systemd 和 apache 的组合引起的。这是一个称为 PrivateTmp 的安全功能,显然它是一个选择退出。
如果你不想要它,你可以像这样禁用它:
/etc/systemd/system/multi-user.target.wants/apache2.service
:
#PrivateTmp=true
sudo systemctl daemon-reload
sudo systemctl restart apache2
根据显示的错误信息,没有文件夹/tmp/
。也许 tmp 文件夹位于根目录之外的其他位置?
此错误不会显示该文件是否实际上不存在,因为它将尝试创建它。
如果文件已存在,该方法x
还会返回警告。(文档: http: //www.php.net/manual/en/function.fopen.php)
我认为这还有可能出错的另一个原因,即执行 PHP 的用户无权在该/tmp/
文件夹中写入。