我有上传问题。 在客户端上它工作得很好 (按钮,进度等所有功能和文件都可以在客户端上传) 但在托管(服务器)上,无法上传文件。
在服务器上,另一个(按钮、进度、上传脚本)正在工作, 只有我想上传的文件无法上传。
否则我有一些过程要插入数据库(文件的路径),我将插入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'}
});
谢谢:)
最佳答案
我们需要更多信息,但想到的可能性:
- 您的表单 HTML 不正确。
- 文件太大。
- 文件名太长。
- 服务器上的文件写入权限问题。
确保您的 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 不起作用,但 file 可能会仍然有效)和 c)复制 file_id
生成。
您的示例易受 SQL 注入(inject)攻击
您当前的示例特别容易受到 SQL 注入(inject)攻击,因为您没有转义参数。您可能会认为这是“哦,没关系,这是一个内部应用程序,因此没有安全风险”,但即使是意外的 SQL 注入(inject)也可能导致问题。如果这是一个面向公众的网站,那么您刚刚公开了您的数据库。我假设这是一个简化的示例,但即便如此,发布未转义的 SQL(至少没有评论)也是不明智的,因为它只会导致其他经验不足的开发人员将其复制/粘贴到某处的应用程序中。
关于php - 无法使用 uploadify 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864441/