托管服务 php 中的文件上传错误
File upload error in php on hosting service
伙计们,我今天很沮丧,因为我在 php
中的文件错误
没有上传文件到我的文件夹,也没有错误信息
实际上我正在创建一个聊天网站,所以我已经完成了,但问题出在我的服务器上,它无法正常工作..
我的代码
<script type="text/javascript">
<?php
$upload_dir = $_SERVER['DOCUMENT_ROOT'];
if (isset($_GET['room']) && isset($_GET['room']) ) {
if (isset($_FILES['img'])) {
require 'db_connect.php';
$room = mysqli_real_escape_string($conn,$_GET['room']);
$room = htmlentities($room);
$name = mysqli_real_escape_string($conn,$_POST['hidden']);
$name = htmlentities($name);
$img = $_FILES['img'];
$imgName = $img['name'];
$imgAddr = $img['tmp_name'];
$imgErr = $img['error'];
$imgSize = $img['size'];
if ($imgErr == 0) {
if ($imgSize<=2000000) {
$fileExt = explode('.',$imgName);
$fileExt_check = end($fileExt);
$allowedExts = array('png','jpg','jpeg','gif');
if (in_array($fileExt_check,$allowedExts)) {
if(copy($imgAddr,$upload_dir.'/ImgsSended/'.$imgName)){
date_default_timezone_set('Asia/Kolkata');
$date = date("h:i A d F - Y");
$sql = "INSERT INTO `myMessages` ( `msg_type` , `msg`, `room`, `name`, `stime`) VALUES ('file','imgsSended/$imgName', '$room', '$name', '$date')";
$res = mysqli_query($conn,$sql);
if ($res) {
echo '
alert("Image Sended Successfully");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else {
echo '
alert("Some Error Occurred While Sending Your Image");
location.href = "rooms.php?roomname='.$room.'";
';
}
} else {
echo '
alert("This file is not supported - \n Only\n jpg \n png\n jpeg\n and\n gif \are supported");
location.href = "rooms.php?roomname='.$room.'";
';
}
mysqli_close($conn);
}else{
echo '
alert("Your File Size is Too Big");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else{
echo '
alert("your File is currpted");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else{
echo '
alert("No Image Selected");
location.href = "rooms.php?roomname='.$room.'";
';
}
} else{
header('location: index.php');
}
?>
</script>
ImgsSended 是我要上传图片的文件夹名称
我在这里 post 来自我的文件上传表单的请求
我的表格
<form action="sendFile.php?room=<?php echo $roomname?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="hidden" id="nameHidden">
<input type="file" name="img" id="img">
<button class="btn btn-outline-success my-2" name="sendFile">Send</button>
</form>
您应该学习如何调试 PHP 代码。
如您所说,您的 copy()
或 move_uploaded_file()
条件始终为假,因此 else 条件生效。发生这种情况是因为 copy()
或 move_uploaded_file()
return false,如果无法移动文件。在大多数情况下会发生这种情况,因为给定的文件无效。
在这种情况下,您可以调试数据。只需测试一下,您正在使用的内容包含哪些数据。文件名是否有效?目的地有效吗?一切都可以访问吗?
echo "<pre>";
var_dump($imgAddr, $upload_dir . '/ImgsSended/' . $imgName);
echo "</pre>";
现在您可以看到您要执行的操作的内容。哪些数据包含 $imgAddr
变量。它是一个有效的文件名吗?什么包含目的地?它是现有目录的有效路径吗? PHP 可以访问这个目录吗?
您可以使用以下代码行来测试是否存在。
is_dir($upload_dir . '/ImgsSended/');
如果 returns true
,给定的目录存在,这不可能是错误的原因。
总是关于调试。必须阅读和理解错误。它们包含对您有用的信息。
伙计们,我今天很沮丧,因为我在 php
中的文件错误没有上传文件到我的文件夹,也没有错误信息
实际上我正在创建一个聊天网站,所以我已经完成了,但问题出在我的服务器上,它无法正常工作..
我的代码
<script type="text/javascript">
<?php
$upload_dir = $_SERVER['DOCUMENT_ROOT'];
if (isset($_GET['room']) && isset($_GET['room']) ) {
if (isset($_FILES['img'])) {
require 'db_connect.php';
$room = mysqli_real_escape_string($conn,$_GET['room']);
$room = htmlentities($room);
$name = mysqli_real_escape_string($conn,$_POST['hidden']);
$name = htmlentities($name);
$img = $_FILES['img'];
$imgName = $img['name'];
$imgAddr = $img['tmp_name'];
$imgErr = $img['error'];
$imgSize = $img['size'];
if ($imgErr == 0) {
if ($imgSize<=2000000) {
$fileExt = explode('.',$imgName);
$fileExt_check = end($fileExt);
$allowedExts = array('png','jpg','jpeg','gif');
if (in_array($fileExt_check,$allowedExts)) {
if(copy($imgAddr,$upload_dir.'/ImgsSended/'.$imgName)){
date_default_timezone_set('Asia/Kolkata');
$date = date("h:i A d F - Y");
$sql = "INSERT INTO `myMessages` ( `msg_type` , `msg`, `room`, `name`, `stime`) VALUES ('file','imgsSended/$imgName', '$room', '$name', '$date')";
$res = mysqli_query($conn,$sql);
if ($res) {
echo '
alert("Image Sended Successfully");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else {
echo '
alert("Some Error Occurred While Sending Your Image");
location.href = "rooms.php?roomname='.$room.'";
';
}
} else {
echo '
alert("This file is not supported - \n Only\n jpg \n png\n jpeg\n and\n gif \are supported");
location.href = "rooms.php?roomname='.$room.'";
';
}
mysqli_close($conn);
}else{
echo '
alert("Your File Size is Too Big");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else{
echo '
alert("your File is currpted");
location.href = "rooms.php?roomname='.$room.'";
';
}
}else{
echo '
alert("No Image Selected");
location.href = "rooms.php?roomname='.$room.'";
';
}
} else{
header('location: index.php');
}
?>
</script>
ImgsSended 是我要上传图片的文件夹名称
我在这里 post 来自我的文件上传表单的请求
我的表格
<form action="sendFile.php?room=<?php echo $roomname?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="hidden" id="nameHidden">
<input type="file" name="img" id="img">
<button class="btn btn-outline-success my-2" name="sendFile">Send</button>
</form>
您应该学习如何调试 PHP 代码。
如您所说,您的 copy()
或 move_uploaded_file()
条件始终为假,因此 else 条件生效。发生这种情况是因为 copy()
或 move_uploaded_file()
return false,如果无法移动文件。在大多数情况下会发生这种情况,因为给定的文件无效。
在这种情况下,您可以调试数据。只需测试一下,您正在使用的内容包含哪些数据。文件名是否有效?目的地有效吗?一切都可以访问吗?
echo "<pre>";
var_dump($imgAddr, $upload_dir . '/ImgsSended/' . $imgName);
echo "</pre>";
现在您可以看到您要执行的操作的内容。哪些数据包含 $imgAddr
变量。它是一个有效的文件名吗?什么包含目的地?它是现有目录的有效路径吗? PHP 可以访问这个目录吗?
您可以使用以下代码行来测试是否存在。
is_dir($upload_dir . '/ImgsSended/');
如果 returns true
,给定的目录存在,这不可能是错误的原因。
总是关于调试。必须阅读和理解错误。它们包含对您有用的信息。