【发布时间】:2012-07-07 04:51:24
【问题描述】:
我有一个网络应用程序,下面是我正在尝试做的事情
我要求用户使用简单的 html 页面上传 pdf 文件。该文件被上传到服务器中的临时目录。然后我尝试使用 file_get_contents 读取文件的内容并将其放入数据库中。此方法适用于小于 ~9MB 的文件,但不适用于大于该大小的文件。
print_r($_FILES) 不为空,并且填充了所有值,这意味着文件正在上传。
我尝试将文件移动到另一个文件夹,然后从那里读取它,但 Web 应用程序没有写入权限,因此此方法失败。我成功地将文件移动到具有不同名称的 tmp 文件夹,但在目录中找不到该文件。
我已尝试通读 fread 和 stream_get_contents,但这些方法返回大小为 1 的内容。
PHP
$file_name = mysql_real_escape_string($_FILES['file']['name']);
$file_data = mysql_real_escape_string(file_get_contents($_FILES['file']['tmp_name']));
$file_mime = mysql_real_escape_string($_FILES['file']['type']);
$file_size = $_FILES['file']['size'];
- 内存大小为32M,post_max_size为32M,upload_max_file为500M 任何帮助将不胜感激。
【问题讨论】:
-
什么是列类型。如果你这样做,我强调这是错误的方式,它应该是
blob -
为什么这么多人在数据库中存储二进制数据?
-
mysql_real_escape_string/file_get_contents?你应该使用php.net/manual/en/function.move-uploaded-file.php
-
发生了什么?发生任何错误?尝试通过将 error_reporting(E_ALL) 放在代码开头来启用错误报告 - 这可能有助于检测问题
-
为什么要用
mysql_real_escape_string转义二进制数据?另外,为什么要将文件存储在数据库中:data base,file system:注意区别。从长远来看,如果您将文件存储在 FS 上并将它们的路径保留在 DB 中,这对您来说效率会高得多。
标签: php download file-get-contents