【问题标题】:how to access php.ini and set file_upload directive to "on"如何访问 php.ini 并将 file_upload 指令设置为“on”
【发布时间】: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


【解决方案1】:

Php.ini 是位于远程 Web 服务器的系统文件,它包含 PHP 的全局配置。只有特权用户才能编辑 php.ini。

您可以使用函数ini_set 更改脚本的本地配置,例如:

ini_set('max_exection_time', 60);

根据您发送的phpinfo(),您已经将file_uploads 设置为开启。所以你不需要编辑任何东西。只需打开您发送的链接,按 CTRL+F 并搜索 file_uploads


顺便说一下,WinSCP 只是用于使用 FTP/SFTP 或类似协议将文件传输到远程 Web 服务器的应用程序。实际上,您的 Web 服务器在 RHEL Apache 2.4.6 上运行。只需在您的 phpinfo 中查看 SERVER_SOFTWARE 部分即可。

【讨论】:

  • 感谢您的建议!但它仍然没有将我的图像上传到指定目录:(((
【解决方案2】:

使用 WinSCP,连接到远程服务器。转到远程服务器的根目录,然后转到/etc/php.ini

它不会在您的计算机上,而是在远程服务器上。服务器在 Apache 上运行。您正在使用 Winscp 作为 FTP 软件来访问远程服务器的文件。

了解如何使用 WinSCP - https://www.siteground.com/tutorials/ssh/winscp/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2019-04-02
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多