php生成临时文件,什么PHP扩展将临时文件写入/ tmp文件夹?

我的网络服务器有问题.

我注意到在/ tmp目录中经常创建大文件.文件类似于/ tmp / phpUNIQUECODE

但这些都不是上传的.因为在我的php.ini设置中配置是

upload_tmp_dir = /backup/tmp

upload_max_filesize = 300M

post_max_size = 300M

我发现/ tmp中的文件是在下载文件时由PHP进程编写的(PHP进程从TCP套接字读取文件并写入输出).

我读了一些PHP手册,我看到tehre是PHP函数tmpfile().它在/ tmp文件夹中创建临时文件(即使upload_tmp_dir不同).但是我的代码中没有使用此函数.在我的代码中没有任何内容保存到磁盘.

这可能是什么?还有哪些PHP扩展可以在/ tmp文件夹中创建临时文件?

谢谢.

更新1.

在我的下载功能中,我使用ob_start和ob_flush函数.每4kb数据发布到浏览器后,ob_flush就是calles.

这个问题可以与ob_ *函数相关吗?

更新2.

我发现在我执行相同PHP代码下载文件的其他服务器上,/ tmp文件夹中没有临时文件.所以这必须与php.ini设置或apache设置有关.

另外我发现临时文件正在下载文件的副本.下载完成后,临时文件将从/ tmp文件夹中删除.

更新3.

我解决了这个问题.我发现这不是下载问题.这是使用PHP HTTP包装器读取文件的问题.

我的文件存储在amazon s3上.我打开socket下载文件

$fh=fopen('http://s3.amazonaws.com/.....');

然后我读取文件并发送到用户浏览器.我做了一些测试,发现如果我是来自本地来源的真实文件,那么一切都很好.不创建临时文件.

此外,我测试了其他包装 – ftp和一些自定义包装(例如,Dropbox的自定义包装).一切都很好.

所以这个问题只适用于php http包装器,只能在我的服务器上运行(其他服务器上的代码相同).

这个简单的代码演示了我的问题

$filepath='http://bucket.s3.amazonaws.com/.....';

$_fp=fopen($filepath,'r');

if ($_fp) {

$i=1;

$total=0;

while (!feof($_fp)) {

$tmpbuf=fread($_fp, 4096);

$total+=strlen($tmpbuf);//this is done only to make downloading slower

if($total>=$i*4194304){

$i++;

sleep(1);//just to make downloading slower

}

}

fclose($_fp);

}

如果我替换第一行

$filepath='/path/to/local/file';

一切都很好.临时文件未在/ tmp文件夹中创建

关于这个奇怪问题的任何想法?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值