It's our wits that make us men.

记PHP上传遇到的连环坑

Posted on By 刘电波

introduction

本文主要在一次开发过程中遇到的PHP上传的一些坑,主要是新环境的phpinfo参数设置和模块问题。

1. PHP上传失败

贴一下主要源代码

  
// 解析文件
$inputFileType = PHPExcel_IOFactory::identify($_FILES['file']['tmp_name']);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($_FILES['file']['tmp_name']);

for ($table = 0; $table <= 1; ++$table) {
	$curSheet = $objPHPExcel->getSheet($table);
	$rows = $curSheet->getHighestRow();
	$currencies = [];
	if ($table == 0){
		$type = 3;//主题e
	}
	else{
		$type = 5;//盘口
	}
	for ($rowsIndex = 2; $rowsIndex <= $rows; ++$rowsIndex) {
		$temp = [];
		$id = $curSheet->getCell('G' . $rowsIndex)->getValue();
		$time = $curSheet->getCell('K' . $rowsIndex)->getValue();
		$reason = $curSheet->getCell('R' . $rowsIndex)->getValue();
		// 现在去block表通过code找id

	}
}

过程:

上传的时候$FILES[‘file'][‘tmpname']一直为空,$FILES[‘file'][‘name']正常,$FILES[‘file'][‘size']为0,/tmp目录下也没有临时文件生成,这里稍微上网找了一下,运行phpinfo,发现是phpinfo里面的postmaxsize的值可能太小,发现我的预设值是8M,而文件时4M,做了一番测试发现不是 这个问题。

又仔细瞧了一番phpinfo,最后发现ploadmaxfilesize的值为2M,最后设为40M,成功上传到临时目录,上面出现的问题也没有了,但是运行到$objPHPExcel = $objReader->load($FILES[‘file'][‘tmp_name']); 又报错。。。错误大概是不能超过128M,但是我的文件只有4M, 实在没办法了,求助。

最后把php_infomemory_limit值改为512M才没报错,成功运行。然后又报错。。不过这个错误很明显”no model name xxx”,装了个zip扩展成功读取。

2.PHP查看php_info

php_infophp.ini文件再PHP开发中十分重要,我们经常需要去查看它,但是有时候我们不知道它的位置。我最喜欢的一种方法是通过PHP -S localhost 命令去监听,然后查看php_info。

1.首先新建一个php_info.php文件,内容

 
 <?php
phpinfo();

2.当前目录运行PHP -S localhost

3.浏览器访问localhost