文件上传:
1、php.ini 配置
上传(超过2MB)大文件主要涉及配置upload_max_filesize和post_max_size两个选项。
默认upload_max_filesize = 2M,即文件上传的大小为2M,如果你想上传超过8M的文件,比如20M,你必须设定 upload_max_filesize = 20M。
但是光设置upload_max_filesize = 20M还是无法实现大文件的上传功能,你必须修改php.ini配置文件中的post_max_size 选项,其代表允许POST的数据最大字节长度,默 认为8M。如果POST数据超出限制,那么$_POST和$_FILES将会为 空。
要上传大文件,你必须设定该选项值大于 upload_max_filesize指令的值,我一般设定upload_max_filesize和 post_max_size值相等。另外如果启用 了内存限制,那么该值应当小于memory_limit选项的值
在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置 文 ax_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整 max_execution_time的值,不推荐设定为0。
2、nginx
修改/usr/local/nginx/conf/nginx.conf 文件,查找 client_max_body_size 将后面的值设置为你想设置的值
服务器之间文件传输:
一般用curl 进行文件传输,做成文件流,文件太大的话,使用form-data,另外请求慢的话注意设置超时时间
$this_header = array("content-type: multipart/form-data; charset=UTF-8")
curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);//请求方式
curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置超时时间
上传文件做成文件流形式:
public function getFile(){ $stream=$_FILES['file']; if($stream['error']!==0){ return false; } $handle = fopen($stream['tmp_name'], "r");//读取二进制文件时,需要将第二个参数设置成'rb' //通过filesize获得文件大小,将整个文件一下子读到一个字符串中 $contents = fread($handle, filesize($stream['tmp_name'])); $stream=base64_encode($contents); return $stream; }