0

我正在尝试使用 php 将文件上传到我的服务器,以将它们以二进制形式保存到我的 mysql 数据库中,但我无法让它工作,这是我正在使用的脚本,我相信它与“$_FILES”有关" 因为当我把它取出 "&& $_FILES['userfile']['size'] > 0" 时,脚本开始运行,但是下面使用 "$_FILES" 的变量没有定义。

if(isset($_POST['upload']) && $_FILES['userfile']['size'] >  0) {
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

if(!get_magic_quotes_gpc())
{
    $fileName = addslashes($fileName);
}

db_connect();
db_select();

$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

mysql_query($query) or die('Error, query failed');
db_disconnect();

echo "<br>File $fileName uploaded<br>";
}
4

6 回答 6

3

您最好使用文件上传状态来检查上传是否成功。

并且不要将该addslashes函数用于 MySQL 查询。改为使用mysql_real_escape_string

于 2009-02-23T15:49:40.717 回答
3

这是一个 2 折过程,首先是上传本身,然后是服务器上的操作。第一个验证是确保文件已上传。为此,您可以在行后使用

$fileName = $_FILES['userfile']['name'];

采用:

if(is_uploaded_file($fileName)) {
  // Here goes all the file manipulation/storage/etc
} else {
  echo 'Error: File could not be uploaded.';
}

尝试使用它,如果文件实际已上传,则可能重新发布。仅仅因为 $_FILES 有内容并不一定意味着文件已上传到服务器。

于 2009-02-23T21:24:44.110 回答
2

如果您使用表格上传文件,“表格”标签中是否有“enctype =“multipart/form-data”?

于 2009-02-23T15:53:35.060 回答
1

我假设您发布的字段名为“userfile”?

此外,这与您的问题没有直接关系,但通常认为将文件存储在文件系统而不是 MySQL 中是一种更好的做法。文件系统旨在存储大块二进制数据,而数据库则不是。

于 2009-02-23T15:43:26.830 回答
1

我从您的示例中假设您的输入名称是upload. <input type="file" />PHP 中的结果未排序,$_POST而是在$_FILES. 文档将$_FILES['userfile']其用作示例字段,但如果您的输入声明为<input type="file" name="upload" />,您应该简单地使用$_FILES['upload'].

于 2009-02-23T15:53:43.110 回答
0

尝试 make print_r( $FILES )并定义问题所在。也许表格不需要类型?

于 2011-05-07T13:09:05.910 回答