最近更新一个项目,下载部分沿用了之前一个项目的下载代码,可是这次出现了一个小问题,下载的word等文件就提示乱码,下载rar等文件则直接提示文件已经损坏,找了许久也没最终确定原因。胡乱解决后莫名其妙的解决了问题,记录一下,原因待补充。
$extend = explode('.', $file_info->path);
$ext = array_pop($extend);
$file_name = $file_info->file_name .'.'.$ext;
$file = fopen($file_info->path,"r");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_info->path));
Header("Content-Disposition: attachment; filename=".$file_name);
ob_clean(); ## 这里是新增的代码
flush(); ## 这里是新增的代码
echo fread($file, filesize($file_info->path));
fclose($file);
注意:下载文件名如果为中文会乱码我们可以把它转成utf8或拼音即可解决
朋友的一个网站导出会员信息时,导出的csv文件中的身份证号码显示为科学计数法,最后几位直接显示为0,解决的办法其实很简单其实这个问题跟用什么语言导出csv文件没有关系。Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0。
$idcard = “\t”.$idcard;
顺便看到如果是phpexcel导出的话,把”\t”换成” “即可(双引号直接有个空格)
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
如果我们配置不对可能导致大文件无法上传了,像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)内存上限
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是对象不能关联数组,区别就在这里了