Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可以';找不到tmp目录_Php_Apache_Tmp - Fatal编程技术网

PHP可以';找不到tmp目录

PHP可以';找不到tmp目录,php,apache,tmp,Php,Apache,Tmp,我在tmp目录中创建文件的函数有问题,例如tmpfile()和tempnam()。他们似乎都没有向tmp写信并返回falseupload\u tmp\u dir在PHPINI中设置,文件上传工作正常 调试此错误时,我发现sys\u get\u temp\u dir()获取tmp目录的位置。不幸的是,我的PHP版本(5.1.6)不支持该目录。我还看到使用以下方法替换了sys\u get\u temp\u dir()的功能: 但是$_ENV数组中没有对tmp目录的引用,正如我前面提到的那样,temp

我在tmp目录中创建文件的函数有问题,例如
tmpfile()
tempnam()
。他们似乎都没有向tmp写信并返回false
upload\u tmp\u dir
在PHPINI中设置,文件上传工作正常

调试此错误时,我发现
sys\u get\u temp\u dir()
获取tmp目录的位置。不幸的是,我的PHP版本(5.1.6)不支持该目录。我还看到使用以下方法替换了sys\u get\u temp\u dir()的功能:

但是$_ENV数组中没有对tmp目录的引用,正如我前面提到的那样,
tempnam()
失败

另外,未设置open_basedir,我听说这可能会导致类似问题

如何找到tmp目录的位置或是否已设置?
这是apache服务器配置问题还是PHP问题


感谢您的帮助

您可以在php.ini中设置upload temp dir- 类似的方法应该会奏效:

upload_tmp_dir=/your-www/tmp/
此外,如果您无法编辑php.ini或不想全局编辑,可以在脚本开头使用:

ini_set('upload_tmp_dir','/your-home-www/tmp/');
TMP、TEMP(可能还有TMPDIR)仅在Windows上有效,通常指向
C:\Windows\TEMP
。在Linux上,默认的临时位置是
/tmp
。要解决此问题(使用
tempnam()
函数),您可以在网站空间的某个位置创建临时文件夹,指定适当的访问权限,并将此作为第一个参数传递给上述函数


这不是一个很好的解决方案,但总比什么都没有好。

可能不是最干净的解决方案,但这适用于我的旧5.1.6安装:

function get_temp_path() {
  static $path = null;
  if ($path !== null) return $path;
  $file = tmpfile();
  $meta = stream_get_meta_data($file);
  fclose($file);
  $path = dirname($meta['uri']);
  return $path;
}

我也有同样的问题,解决方案是更改apache配置,将TEMP变量公开给PHP,请参阅。

像我这样的新手的提示:我认为PHP无法从我的临时文件夹中移动内容,但我只是因为文件夹的相对位置而感到困惑。这可能适用于其他人,所以我会解释,尽管它与这个特定的问题非常不相关(因为这个特定的问题可能是像我这样的新手的搜索结果)

我的问题是,我在将/var/www/html/中的functions.php文件中的上载表单回显到/var/www/html/user/中的profile.php文件中,该文件称为/var/www/html/中的uploadphoto.php文件。上传的文件最终打算放在/var/www/html/uploads中。这最终意味着,我对uploadphoto.php和uploads/in functions.php的大多数引用都分别写为“./uploadphoto.php”或“./uploads/[etc.jpg]”,以便从html/user/(返回的代码位于html/user/profile.php中)返回到html/中。这让我在uploadphoto.php中直观地使用了以下命令,而没有仔细考虑:

move_uploaded_file($_FILES["file"]["tmp_name"][0], "../uploads/$filename")

看到问题了吗?uploadphoto.php与uploads/位于同一目录中,因此我不需要此处的../号。几个小时以来,我一直确信我又一次搞乱了我的文件夹权限,因为我对上传图像还不熟悉。我忘了检查是否有更简单的错误。希望这对其他人有所帮助。

我正在运行Ubuntu 18.04,当我从CLI运行PHP脚本时,我可以在/tmp目录中创建/修改文件,但当我尝试访问与网页相同的脚本时,我永远找不到正在创建的文件。事实证明,Apache在默认情况下将创建一个私有tmp目录。下面的帖子提供了一些关于这个问题的见解。但是,文章中提到的/usr/lib/systemd目录在我的机器上不包含任何http或apache2服务。为了帮助查找问题,我执行了以下命令:

sudo find / -mount -type f -exec grep -e "PrivateTmp" '{}' ';' -print
可在/lib/systemd/system/apache2.service中找到奇数位文章中提到的PrivateTmp=true。将文件从/lib/systemd/system复制到/etc/systemd/system/并将true更改为false并执行

systemctl daemon-restart
systemctl restart apache2

解决了这个问题。一位比我聪明的人建议将文件复制到/etc而不是在/lib中编辑,这是正确的做法,因为/lib是软件包的“所有者”,本地编辑应该在/etc中执行。详细描述了systemd配置处理。

检查您的php.ini。你应该在那里找到目录。它叫什么?感谢它们是不同的变量。我在upload_tmp_dir和session.save_path下找到了目录。但是PHP的默认值是/tmpTMP,TEMP(可能还有TMPDIR)仅在Windows上有效,并且通常指向
C:\Windows\TEMP
。在Linux上,默认的临时位置是
/tmp
。要解决此问题(使用
tempnam()
函数),您可以在网站空间的某个位置创建临时文件夹,指定适当的访问权限,并将此作为第一个参数传递给上述函数。不,这是一个很好的解决方案,但总比什么都没有好。@Ollie如果你坚持,那为什么不:)Systemd是一个令人讨厌的烂摊子。
systemctl daemon-restart
systemctl restart apache2