嗨,我在服务器上传文件时遇到问题。这是我的代码:
<?php
session_start();
$user=$_SESSION['user_level'];
Check if a file has been uploaded
if(isset($_FILES['fileToUpload'])) {
// Make sure the file was sent without errors
if($_FILES['fileToUpload']['error'] == 0) {
// Connect to the database
$dbLink = new mysqli('$host', '$username', '$pass', '$tbl_name');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Gather all required data
//$id= mysql_insert_id();
$name = $dbLink->real_escape_string($_FILES['fileToUpload']['name']);
$mime = $dbLink->real_escape_string($_FILES['fileToUpload']['type']);
$data = $dbLink->real_escape_string
(file_get_contents($_FILES['fileToUpload']['tmp_name']));
$size = intval($_FILES['fileToUpload']['size']);
// Create the SQL query
$query = "
INSERT INTO files (email,name,type,size,content)
VALUES ('$user','$name', '$mime', $size, '$data')";
// Execute the query
$result = $dbLink->query($query);}}
?>
<?php
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"/home/u152912911/public_html/upload" . $_FILES["fileToUpload"]["name"]);
?>
<?php
if ($_FILES["fileToUpload"]["error"] > 0)
{
echo "Apologies, an error has occurred.";
echo "Error Code: " . $_FILES["fileToUpload"]["error"];
}
else
{
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"/home/u152912911/public_html/upload" . $_FILES["fileToUpload"]
["name"]);
}
if (($_FILES["fileToUpload"]["type"] == "image/DOC")
|| ($_FILES["fileToUpload"]["type"] == "image/jpeg")
|| ($_FILES["fileToUpload"]["type"] == "image/png" )
&& ($_FILES["fileToUpload"]["size"] < 10000))
{
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"/home/u152912911/public_html/upload" . $_FILES["fileToUpload"]["name"]);
ECHO "Files Uploaded Succesfully";
echo'<script type="text/javascript">
window.location.href ="resume2.php"
</script>';
}
else
{
}
echo "Your Resume was Successfully Upload";
?>
我有一个名为“upload”的文件夹,其中它将存储用户上传的所有文件。我的目标是将文件存储在mysql和“upload”文件夹中。文件的存储工作正常,没有错误消息,但我无法在“upload”文件夹中看到上传的文件。谢谢你的帮助!
答案 0 :(得分:3)
"/home/u152912911/public_html/upload" . $_FILES["fileToUpload"]["name"]
/
之后您缺少尾部斜杠upload
。将其更改为:
"/home/u152912911/public_html/upload/" . $_FILES["fileToUpload"]["name"]
实际上,该文件将保存为upload
目录中前缀为public_html
的文件名。
如果可能的话,你应该使用相对路径来实现可移植性,很有可能只是
"upload/" . $_FILES["fileToUpload"]["name"]
......就够了。
你不应该像这样直接使用$_FILES["fileToUpload"]["name"]
。考虑如果用户发送字符串../index.php
作为文件名会发生什么 - 用户可以覆盖您的index.php
文件。另外,考虑如果两个用户上传名为picture.jpg
的文件会发生什么 - 第二次上传会覆盖第一个。
相反,您应该为自己创建的文件使用名称 - 依赖此类用户输入是不安全的。
答案 1 :(得分:2)
你忘了斜线:
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"/home/u152912911/public_html/upload" . $_FILES["fileToUpload"]["name"]);
应该是
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],
"/home/u152912911/public_html/upload/" . $_FILES["fileToUpload"]["name"]);
另外,检查成功的返回值,不要假设它。
答案 2 :(得分:0)
请检查提供给存储文件的文件夹的权限。
答案 3 :(得分:0)
如果它在本地主机上正常工作并在在线测试中出现问题,那么请求服务器主机将文件夹权限更改为777。