网站打开提示:”No input file specifed.“

黄文博客 / 2024-09-05 / 原文

当网站打开时提示“No input file specified.”,这通常意味着 PHP 脚本在处理文件上传时出现了问题。具体来说,可能是由于文件上传配置、表单提交方式或 PHP 脚本中的错误导致的。以下是一些常见的原因及解决方法:

1. 检查表单提交方式

确保表单使用了 POST 方法,并且设置了 enctype="multipart/form-data"

示例表单

html
 
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form>

2. 检查 PHP 配置

确保 PHP 配置允许文件上传,并且相关配置正确。

查看 PHP 配置

  • 访问 http://yourdomain.com/info.php (其中 info.php 包含 <?php phpinfo(); ?>)来查看 PHP 配置信息,确认 file_uploads 是否为 On

修改 php.ini

  • 找到您的 php.ini 文件。
  • 确认以下配置项:
    ini
     
    file_uploads = On upload_max_filesize = 2M post_max_size = 8M max_file_uploads = 20
  • 保存文件并重启 Web 服务器。

3. 检查上传脚本

确保上传脚本正确处理文件上传。

示例上传脚本

php
 
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); // Check if image file is a actual image or fake image if (isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if ($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } } ?>

4. 检查上传目录

确保上传目录存在并且具有适当的权限。

创建目录

bash
 
mkdir -p /path/to/your/uploads

设置目录权限

bash
 
chmod -R 755 /path/to/your/uploads

设置目录所有权

bash
 
chown -R www-data:www-data /path/to/your/uploads

5. 检查 PHP 错误日志

查看 PHP 错误日志以获取更多详细信息。

查看 PHP 错误日志

bash
 
tail -f /var/log/apache2/error.log

6. 检查表单提交

确保表单中的 name 属性正确。

示例表单

html
 
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form>

7. 检查 PHP 脚本中的变量

确保 PHP 脚本中使用的变量名称与表单中的 name 属性匹配。

示例 PHP 脚本

php
 
if ($_SERVER["REQUEST_METHOD"] == "POST") { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 其他代码... }

8. 检查 $_FILES 变量

确保 $_FILES 变量中有数据。

示例 PHP 脚本

php
 
if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_FILES["fileToUpload"]) && $_FILES["fileToUpload"]["error"] === UPLOAD_ERR_OK) { // 处理上传 } else { echo "No file specified."; } }

9. 检查服务器配置

确保服务器配置允许文件上传。

Apache 配置

  • 确认 AllowOverride All 已经启用。
    apache
     
    <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory>

10. 检查防火墙和安全软件

确保防火墙或安全软件没有阻止文件上传。

检查防火墙

bash
 
sudo ufw status

通过以上步骤,您可以逐步排查并解决“No input file specified.”的问题。如果问题仍然存在,请提供更多具体信息以便进一步排查。