2009-02-23 139 views
0

我试图使用PHP将它们保存为二进制形式到我的MySQL数据库将文件上传到我的服务器,但我不能让它的工作,这里是我使用的脚本,我相信它有什么做“$ _FILES”,因为我借此出来的时候“& & $ _FILES [‘userfile的’] [‘大小’]> 0”的剧本开始运行,但随后即用“$ _FILES”下的变量不是定义。PHP文件上传

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>"; 
} 
+1

将很方便检查var_dump($ _ FILES)的输出以准确查看内容。 – rojoca 2009-02-23 21:34:29

回答

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有内容,并不一定意味着文件已经上传到服务器。

1

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

此外,这是没有直接密切相关的问题,但它通常被认为是一个更好的做法存储在文件系统中,而不是在MySQL文件。文件系统被设计为存储大块的二进制数据,而数据库则不是。

+0

我首先将文件存储在文件系统中,但试过这样做以确保错误与服务器不允许上传或其他内容有关。 – Ryan 2009-02-23 15:50:14

2

如果你上传的文件用一种形式,它有一个 'ENCTYPE = “的multipart/form-data的”' 中的 “形式” 的标签?

1

我从你的榜样,你的输入名字是upload承担。 <input type="file" /> PHP中的结果未在$_POST中排序,而是在$_FILES中排序。该文档使用$_FILES['userfile']作为示例字段,但是如果您的输入被声明为<input type="file" name="upload" />,则应该简单地使用$_FILES['upload']

+0

这是我的表单代码: Ryan 2009-02-23 16:20:12

0

尝试使print_r($ FILES)并定义是什么问题。 也许窗体不需要类型?