Heim >Backend-Entwicklung >PHP-Tutorial >在调试一个上传文件并保存在数据库里的小程序,始终出现问题,向这里的大神请教!

在调试一个上传文件并保存在数据库里的小程序,始终出现问题,向这里的大神请教!

WBOY
WBOYOriginal
2016-06-23 14:01:161083Durchsuche

其实这个功能应该很简单,我从网上看到一段程序,自己弄下来调试调试,但出现意想不到的错误,请大神指教啊。

html前端代码:

<html><body><form action="upload.php" method="post" enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file" /> <br /><input type="submit" name="submit" value="Submit" /></form></body></html>


php后端代码:
<?php if ($_FILES ['file'] != "none" && $_FILES ['file'] != "") {	$time_limit = 60;	set_time_limit ( $time_limit );		$file_type = $_FILES ['file'] ['type'];	$file_name = $_FILES ['file'] ['name'];	$file_size = $_FILES ['file'] ['size'];	$fp = fopen ( $_FILES ['file'] ['tmp_name'], "rb" );		if (! $fp)	{		die ( "file open error" );	}		$file_data = file_get_contents($_FILES["file"]['tmp_name']);	//$file_data = fread($fp, $file_size ) ;	fclose ( $fp );	 $conn = mysqli_connect ( "localhost", "root", "root" );    if (! $conn)    {		die ( "error : mysql connect failed" );    }    mysqli_select_db($conn,"onlytest" );    $sql = "insert into onlytest.file (contents,type,name,size) values ('$file_data','$file_type','$file_name','$file_size')";    $result = mysqli_query ($conn, $sql);    //$id = mysqli_insert_id ($conn);    //echo $id;    mysqli_close ( $conn );    set_time_limit ( 30 );     if ($result)    	echo "succeed to upload the files ";    else    	echo "failed!";   } else {	echo "You haven't uploaded any files!";}?>


数据库为onlytest,表格名为file,几个关键词为id, contents,type,name,size,设置如下:


回复讨论(解决方案)

错误信息是什么?

$file_data为什么用LONGBLOB类型字段存?

没有错误信息,但是总是反馈“failed”,我检查数据库,也是没有把数据储存进数据库。

考虑到我可能用很大的文档或文件来测试,所以就用了longblob的类型。

出现的状况是:用一些很小的gif图片上传没有问题,但用jpg、word等大文件就储存不进去。

你的配置最大允许上传的多大的?

对,可能是这个问题,我前不久好像查到有一个系统固定变量是代表这个的,如果发现该变量以及如何修改呢?


你的配置最大允许上传的多大的?

print_r($_FILES); 传大文件时有不有值,
另外,echo mysqli_error($conn); 有错误没有

我刚才在php.ini中查到 upload_max_filesize = 2M,max_file_uploads = 20
看起来也没有错啊。

你的配置最大允许上传的多大的?

我上传了74K的一个图片,就没有保存进数据库,返回“failed”。php.ini 中设置最大上传文件限制时2M。
咋回事情呢?

按照你的建议,加了print_r($_FILES);echo mysqli_error($conn);
出来的结果是:


没有其他出错信息(我的浏览器的出错信息显示是正常的)。这个又是咋回事情呢?
print_r($_FILES); 传大文件时有不有值,
另外,echo mysqli_error($conn); 有错误没有

可以打印出sql语句是什么呢?

echo mysqli_error($conn); 这句加在mysqli_quey() 下面。

我改变了打印错误信息命令的位置,放在最后了。命令如下:
    echo "
";
    print_r($_FILES);
    echo "
";
    echo mysqli_error($conn);
    echo "
";

打印出来的全部信息是:

failed!
Array ( [file] => Array ( [name] => photo.jpg [type] => image/jpeg [tmp_name] => C:\Windows\Temp\phpA968.tmp [error] => 0 [size] => 76201 ) ) 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛ' at line 1

还有,我上传的是大文件,echo $sql显示出来是很长的内容,这里就不显示了。


貌似insert into onlytest.file (contents,type,name,size) values ('$file_data','$file_type','$file_name',$file_size)
这句话有错?
可以打印出sql语句是什么呢?

print_r($_FILES); 传大文件时有不有值,
另外,echo mysqli_error($conn); 有错误没有

我还是把全部命令以及显示都打印出来吧,静待大神指点啊。

    echo "
";
    print_r($_FILES);
    echo "
";
    echo mysqli_error($conn);
    echo "
";
    echo $sql;
    mysqli_close ( $conn );

错误信息:

过滤下吧。 把$file_data加一个mysql_escape_string函数

还别说,这招真管用,还真就成功了。就只能用mysql_escape_string,连用mysql_real_escape_string() 都不行。

我又做了一个程序,从数据库下载也成功了。

不过为什么会这样呢?大神能不能解释一下呢?

过滤下吧。 把$file_data加一个mysql_escape_string函数

搜了资料,自己了解了什么原因。这里谢过。

结贴。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn