无法使用uploadify上传文件

时间:2011-05-03 02:20:57

标签: php jquery uploadify

我有uploadify的问题。 在客户端它工作得很好 (所有功能,如按钮,进度等,文件可以上传到客户端) 但是在托管(服务器)上,无法上传文件。

在服务器上,另一个(按钮,进度,上传脚本)正在运行, 只有我想上传的文件无法上传。

否则我有一些进程要插入数据库(文件的路径),我把插入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'}
});

谢谢:)

1 个答案:

答案 0 :(得分:3)

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

  1. 您的表单HTML不正确。
  2. 文件太大。
  3. 文件名太长了。
  4. 服务器上的文件写入权限问题。
  5. 确保您的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'}因为这意味着你要为每条记录插入file_id 001。但是,即使是客户端大小的生成,也存在以下风险:a)人们选择自己的file_id并破坏你的数据,b)在禁用JS时出现错误(uploadify不起作用,但文件可能仍然有效) c)复制file_id代。

    您的示例容易受到SQL注入

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