php环境上传大文件需要注意的事项

 更新时间:2016年11月25日 17:37  点击:1493
如果我们配置不对可能导致大文件无法上传了,像nginx配置不当会导致nginx 502 bad 504 time-out问题了,下面我们一起来看问题的解决办法

公共的环境前段


<form enctype="multipart/form-data" action="upload.php" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

nginx+linux环境注意事项


php环境上传大文件需要注意的事项:

/usr/local/php/etc/php-fpm.conf.default
request_terminate_timeout = 0   //这个是fastcgi的执行时间,默认不限制的
client_max_body_size 256m;

fastcgi_buffer_size 256k;
fastcgi_buffers 16 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
   
fastcgi_connect_timeout 3000;
fastcgi_send_timeout 3000;
fastcgi_read_timeout 3000;

另外PHP也需要配置:

memory_limit 512M
max_execution_time 0
post_max_size 256M
upload_max_filesize 256M


apache+windows环境下注意事项

配置php.ini文件 (以上传500M以下大小的文件为例)
查找以下选项并修改->
file_uploads = On ;打开文件上传选项
upload_max_filesize = 500M ;上传文件上限


如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长
post_max_size = 500M ;post上限
max_execution_time = 1800 ; Maximum execution time of each script, in seconds脚本最大执行时间
max_input_time = 1800 ; Maximum amount of time each script may spend parsing request data
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)内存上限

phpmyadmin无法登陆无响应一般是session或cookie设置问题了,下文小编也是因为cookie与 session目录设置问题导致phpmyadmin不能正常登录了。

之前由于修改php.ini配置session路径问题,导致PHPmyadmin无法登陆,点击登录后自动刷新跳到index页面。检查头信息发现报错:

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly。

可以看出来是session问题,解决办法:

1.打开php.ini修改session.save-path,例如/tmp

2.设置/tmp目录权限>755

3.重启Apache:sudo /etc/init.d/apache2 restart

如果我们不仔细看会发现象mysql_fetch_array()和mysql_fetch_rows()函数没有什么区别,但是细细的看你会发现它们区别还是蛮大了,如果各位对于此函数的区别不了解下文小编给各位整理mysql_fetch_array()和mysql_fetch_rows()的用法与例子说紧。


mysql_fetch_array()函数参数

mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

mysql_fetch_array(data,array_type)

array_type如下

MYSQL_ASSOC - 关联数组
MYSQL_NUM - 数字数组
MYSQL_BOTH - 默认。同时产生关联和数字数组

mysql_fetch_rows()函数参数

mysql_fetch_row() 函数从结果集中取得一行作为数字数组。

mysql_fetch_row(data)

从上面来看它们都是使用的数据指针。该数据指针是 mysql_query() 函数产生的结果了,但后面有一个参数是不一样的,mysql_fetch_array()有array_type参数而mysql_fetch_rows()没有。

那么用法有什么区别,下面看个例子

mysql_fetch_array()和mysql_fetch_rows()都能获取数据库的字段数据,具体区别可参照以www.111cn.net整理的实例:

mysql_fetch_array()函数例子

<?php

$sql=”select * from user “;

$query=mysql_query($sql);

$result=mysql_fetch_array($query);

echo $result[name];

echo $resutlt[password];

?>

mysql_fetch_rows()函数例子

<?php

$sql=”select * from user “;

$query=mysql_query($sql);

$result=mysql_fetch_rows($query);

echo $result[1];

echo $resutlt[2];

?>

总结,mysql_fetch_array()是数组并且可以关联数组,而mysql_fetch_rows是对象不能关联数组,区别就在这里了

写了一段程序可以在php中加载并调用扩展正常执行,但到了cmd调度模式时发现扩展加载加载错误了,下面来看问题的解决方法。

浏览器下PHP执行正常,在CMD报扩展加载错误,在dos的cmd模式下执行php,已加载的模块都不能使用。

PHP程序在php执行正常,在CMD报扩展加载错误

解决过程方法:

1.在命令行执行php时,使用php --ini命令先行查看php加载的配置文件的地址

PHP程序在php执行正常,在CMD报扩展加载错误

2.在PHP用浏览器形式访问PHP文件:

PHP程序在php执行正常,在CMD报扩展加载错误

输出PHPinfo看看  加载的php.ini文件是否一致。


方法:


在命令行执行php时,使用php -c "php.ini文件所在文件夹地址"来运行php文件
  PHP程序在php执行正常,在CMD报扩展加载错误

php函数cul调用远程地址时提示 HTTP Status 415 错误,折腾了好久才发现是没有指定Request Header 信息。下面来看具体解决过程。

使用php curl的方式调用对方提供的接口,收到了如下错误提示

HTTP Status 415

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

Curl 的代码片段如下:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));

$data = curl_exec($ch);
curl_close($ch);

多次检查curl设置已经接口的说明没有发现问题。对方的服务器使用的是Tomcat 7, 一度怀疑是对方web配置有误,后来仔细研究文档,其中提到Response是jason格式文档,而上述curl中没有指定Request Header 信息, 所以尝试加入一个header, 结果问题解决。 代码如下:

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8"));

[!--infotagslink--]

相关文章

  • 标准版Eclipse搭建PHP环境的详细步骤

    一、下载Eclipse的PHP插件  百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了。二、安装Eclipse的PHP插件  插件下载完成之后,解压,然后把site.xml...2015-11-24
  • wamp集成软件搭建php环境

    用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高...2013-09-27
  • 几分钟搞懂c#之FileStream对象读写大文件(推荐)

    这篇文章主要介绍了c#之FileStream对象读写大文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#使用FileStream循环读取大文件数据的方法示例

    这篇文章主要介绍了C#使用FileStream循环读取大文件数据的方法,结合实例形式分析了FileStream文件流的形式循环读取大文件的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 使用WAMP5搭建Apache+MySQL+PHP环境

    转贴:http://xoops.org.cn/modules/newbb/viewtopic.php?topic_id=8734&forum=1 目前有不少AMP(ApacheMySQLPHP)的集成软件,可以让我们一次安装并设置好。这对于不...2016-11-25
  • 修改PHP配置文件上传大文件几种方法(apache/nginx)

    在php.ini中如果我们不对 post_max_size,upload_max_filesize 这些参数进行修改,默认最多只能上传2MB的文件了,如果几十MB或更大的就无法上传了,下面我来介绍修改PHP配置...2016-11-25
  • Windows Server 2008(R2) 一键安装PHP环境(PHP5.3+FastCGI模式)

    本文通过最简单快捷的方式,讲述从崭新的Windows Server 2008(R2),通过护卫神·PHP套件一键部署PHP运行环境的过程,十分简单...2016-01-27
  • .NET的file文件上传控件使用方法 修改web.config文件上传大文件

    这篇文章主要介绍了.NET修改web.config文件上传大文件的方法,大家参考使用吧...2021-09-22
  • 详细阐述PHP环境下如何将GBK编码转成UTF-8格式

    apache 字符集 GB 2312 mysql 字符集 GBK 现要从 mysql 中提出信息(GBK) 写入到 XML 中 XML中的编码格式是 UTF-8 那么,如何将GBK编码成 UTF8 ?? 具体介绍: 前...2016-11-25
  • php下载远程大文件的实例

    本篇文章结合实例为大家介绍了php下载远程大文件(获取远程文件大小)的方法,有需要的朋友就来参考一下吧。 废话不多说,直接上代码 代码如下复制代码 <?php /...2017-07-06
  • memcache和mongodb在windows+php环境下安装总结教程

    本教程总结了windows+php环境下memcache缓存和mongodb数据库安装和配置,还有Mongodb启动关闭。希望对学习memcache和mongodb的同学有所帮助。 mangodb安装 1. 下...2016-11-25
  • php查看运行php环境函数php_sapi_name

    php_sapi_name函数是一个可以返回php所运行的web服务器环境的字符串,下面我们来看两个关于php_sapi_name函数测试出php运行环境的例子。 代码: <?php echo p...2016-11-25
  • php读取超大文件实现例子

    需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容,如果我们使用常用的方法估计就直接卡死了,后看到一站长写了这文章整理了一下使用起来非...2016-11-25
  • PHP如何搭建大文件切割分块上传功能的实例代码

    小编给大家分享一篇文章,介绍了PHP如何搭建大文件切割分块上传功能的实例代码,有兴趣的同学可以看看! 背景 在网站开发中,文件上传是很常见的一个功能。相信很多人都...2017-01-22
  • windowsXP中如何配置php环境

    下载PHP5: php教程.net/distributions/php-5.2.6-Win32.zip" target="_blank">http://cn2.php.net/distributions/php-5.2.6-Win32.zip 下载apache: http://dow...2016-11-25
  • PHP/Shell大文件数据统计并且排序

    本文章来给各位同学介绍一个简单的PHP/Shell大文件数据统计并且排序实现程序,各位同学可参考使用哦。 诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用...2016-11-25
  • 详解PHP如何读取大文件

    作为PHP开发人员,我们不需要担心内存管理。在极少数情况下,我们可能需要走出舒适的界限—例如,当我们尝试在可以创建的最小VPS上为大型项目运行Composer时,或者需要在同样小的服务器上读取大文件时。这是我们将在本教程中讨论的一个问题。...2021-05-30
  • PHP 读取大文件程序代码

    PHP 读取大文件与读取一般的文件是有些区别的,如果你的文件到了几百MB或GB这样可能普通的php读取文件会很慢或卡死了,下面我来介绍一下PHP 读取大文件技巧吧。 一般...2016-11-25
  • PHP fastcgi模式大文件上传500错误

    在linux中增加了fastcgi+php环境,结果在文件上传时如果文件小于100KB是可以上传,但大了点就提示mod_fcgid: HTTP request length 132296 (so far) exceeds MaxRequestLe...2016-11-25
  • php读取大文件最好的实现方法

    php读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面给大家整理一个例子。 代码如下 复制代码 ...2016-11-25