【发布时间】:2020-04-14 22:33:02
【问题描述】:
我正在做我的学校项目,我们使用 Winscp 作为服务器。 所以我是 php 新手,试图上传图片,我读过很多文章说我需要编辑我的 php.ini 文件并将 file_uploads 指令设置为“on”。但我就是不知道我的 php.ini 文件在哪里。
这是我的 phpinfo.php 链接:http://cgi.sice.indiana.edu/~baehy/phpinfo.php 所以它说我的 php.ini 在 /etc/php.ini 我在我的电脑上找不到它(我知道这听起来很傻)
感谢每条评论!提前谢谢大家!
这是我的代码
<?php
session_start();
include('database.php');
ini_set('max_exection_time', 60);
if(!isset($_SESSION['userid'])){
header('location: http://cgi.sice.indiana.edu/~baehy/team72index.php');
} else {
echo "Welcome " . $_SESSION['userid'] . "<br>";
if(isset($_POST['submit'])){
$title = $_POST['title'];
$category = $_POST['category'];
$description = $_POST['description'];
//get file from the form and get following information
$file = $_FILES['coverimage'];
$fileName = $_FILES['coverimage']['name'];
$fileTmpName = $_FILES['coverimage']['tmp_name'];
$fileSize = $_FILES['coverimage']['size'];
$fileError = $_FILES['coverimage']['error'];
$fileType = $_FILES['coverimage']['type'];
//retrieve file extention using explode()
$fileExt = explode('.', $fileName);
//because some file extentions might be in capital letters
$fileActualExt = strtolower(end($fileExt));
$allowed = array('jpg','jpeg','png');
if(in_array($fileActualExt, $allowed)){
if($fileError === 0){
//if the size of the file is lesser than 1M kb = 1000mb
if($fileSize < 1000000){
$fileNameNew = uniqid('',true).".".$fileActualExt;
chmod('uploads/',0777);
echo "permission granted to uploads directory!" . "<br>";
$fileDestination = 'uploads/'.$fileNameNew;
move_uploaded_file($fileTmpName, $fileDestination);
echo $fileNameNew . "<br>";
echo "Successfully uploaded your file" . "<br>";
} else {
echo "Your file is too big to upload" . "<br>";
}
} else {
echo "There was an error uploading your file" . "<br>";
}
} else {
echo "This file extention is not allowed to be uploaded" . "<br>";
}
$sql = "INSERT INTO `recipe` (title, category, description, coverimage, userid)
VALUES ('".$title."', '".$category."', '".$description."', '".$fileName."', '".$_SESSION['userid']."')";
$result = mysqli_query($conn, $sql);
if($result){
echo "successfully added to database";
} else {
echo "failed to add to database";
}
$showImage = mysqli_query($conn, "SELECT `coverimage` FROM `recipe`");
}
}
附言我还需要将文件夹的绝对路径('uploads')放在代码中吗?谢谢!
【问题讨论】:
-
WinSCP 是 FTP 客户端,不是吗?
-
php.ini文件可能在服务器上受到保护,您很可能(如果服务器设置正确)在没有正确设置的情况下无法访问它权限。此外,即使使用@Daniels 回答中的ini_set.. 您仍然必须有权在程序本身中进行设置。 -
在 Windows 上的本地主机上上传,更不用说另一个操作系统了。一个关键因素是确保文件夹权限正确,并且任何应用程序(node、winscp、mamp、docker)都能够将文件放在系统上您需要的位置。我会将您指向SuperUser,以获得编程之外的 IT 建议
-
当您尝试上传文件时收到什么消息?你知道 +- 失败的地方吗? BTW:请至少添加转义使用
mysqli_real_escape_string,您的代码非常不安全。 -
您可以使用 DIR 常量代替绝对路径,该常量是带有当前目录绝对路径的字符串。所以例如
__DIR__ . '/uploads/' . $newImageName;
标签: php image-upload