【问题标题】:cannot upload file using uploadify无法使用uploadify上传文件
【发布时间】:2011-05-03 02:20:57
【问题描述】:

我在上传时遇到问题。 在客户端它工作得很好 (按钮、进度等所有功能和文件都可以上传到客户端) 但在主机(服务器)上,文件无法上传。

在服务器上,另一个(按钮、进度、上传脚本)正在工作, 只有我想上传的文件不能上传。

否则我有一些过程要插入数据库(文件的路径),我将插入 sql 查询放在脚本上用于上传过程,查询正在运行但无法上传文件

我的脚本(upload_file.php):

<?php    

    $file_id         = $_POST['file_id']; 

    if (!empty($_FILES))  
{

    $tempFile   = $_FILES['Filedata']['tmp_name'];  
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';    
    $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

        $destinationFile = "files/". $_FILES['Filedata']['name'];           
        move_uploaded_file($tempFile,$targetFile);



        //additional - query to insert the path

        include("database_connection.php");     

        $query  = "insert into file (file_id,path) values ('$file_id','$destinationFile')";
        $result = mysql_query($query);      

        mysql_close();   
}  ?>

和javascript:

$('#file').uploadify
({
    'uploader'   : '/myweb/shockwaves/uploadify.swf',
    'script'     : '/myweb/process/upload_file.php',
    'cancelImg'  : '/myweb/images/uploadify/cancel.png',
    'folder'     : '/myweb/files',
    'auto'       : true,    
    'buttonText' : 'Upload',
    'scriptData' : {'file_id':'001'}
});

谢谢:)

【问题讨论】:

  • 定义“不工作”。你有错误吗?日志?您是否使用调试器浏览过您的代码?

标签: php jquery uploadify


【解决方案1】:

我们需要更多信息,但想到的可能性:

  1. 您的表单 HTML 不正确。
  2. 文件太大。
  3. 文件名太长。
  4. 服务器上的文件写入权限问题。

确保您的 HTML 表单具有“enctype”

确保页面上的 HTML 表单包含 enctype="multipart/form-data",例如

<form action="" method="POST" enctype="multipart/form-data">

诊断 PHP 错误/文件写入错误

如果是文件/权限问题,您可能会发现 PHP 错误,因此请尝试在页面上启用错误报告,如下所示:

<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1); 
?>

将file_id改为自动生成

您还应该更改您的数据库,以便它生成您的file_id(即自动递增主键/身份),而不是传入一个。如果您没有自动生成它,您将承担风险重复的file_id 条目(如果file_id 列应该是主键,则查询失败)。

大概您也没有实际上使用'scriptData' : {'file_id':'001'},因为这意味着您要为每条记录插入001 的file_id。但是,即使是客户端大小的生成也会存在以下风险:a) 人们选择自己的file_id 并破坏您的数据,b) 禁用 JS 时出错(uploadify 不起作用,但文件可能仍然有效)和 c ) 复制file_id 代。

您的样本易受 SQL 注入攻击

您当前的示例特别容易受到 SQL 注入的影响,因为您没有转义参数。您可能会将其视为“哦,没关系,它是一个内部应用程序,因此没有安全风险”,但即使是意外的 SQL 注入也可能导致问题。如果这是一个面向公众的网站,您刚刚公开了您的数据库。我将假设这是一个减少的示例,但即便如此,发布未转义的 SQL(至少没有评论)也是不明智的,因为它只会导致其他经验不足的开发人员将其复制/粘贴到某个应用程序中。

【讨论】:

  • 是的,服务器上的文件写入权限问题是问题:) 现在它工作得很好,谢谢
  • 实际上是我在 javascript 上生成的 file_id,并非每条记录总是 001。上面的001只是一个例子,非常感谢。 :)
  • @bungdito - 但如果 file_id 只是 001/002/003/004 等,为什么不让数据库生成它,这样您就不会冒险让两个客户端上传相同的 file_id ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-01-01
  • 2011-12-15
  • 1970-01-01
  • 2022-06-17
  • 2013-04-01
相关资源
最近更新 更多