首先,抱歉我的英语不好!
您好,我正在独自学习 Web 开发,因此我实际上并不是了解所有知识。
我的问题是,在我使用已编辑的(我不认为这有错误)表单下载和编辑文件之后。之后,我的所有 .php 文件(在此之前运行良好)现在都出现 http 500 错误,我不知道问题出在哪里。
我没有.htaccess。
我知道我没有发送任何信息,但我不知道哪些信息与这个案例相关,哪些不相关,所以我希望大家能告诉我应该向你们发送哪些信息。
然后我会编辑这篇文章,并将其发送至评论中。
感谢大家的帮助!
编辑1:
我发现了一些 php 错误日志,但我不太理解:
我发现了一些非常奇怪的事情......
文件(/var/www/html/index.php)不在允许的路径内:(1)位于未知的第 0 行
它对我所有的 .php 文件都这么说,但我不知道为什么,因为我唯一做的事情就是使用我的表单输入来测试某些东西,然后就出现了这个错误......
编辑2:
在错误出现之前,我修改了两个 .php 文件。
这个:
<?php
$levelID = $_POST["levelid"];
$description = $_POST["description"];
$levelCreator = $_POST["creator"];
shuffle($array);
$arrayLength = count($array) - 1;
$folder_name = $levelID;
$rand = 3;
$directoryFile = "/var/www/html/ng/mm/levels/" . $folder_name . "/";
$directoryCache = "/var/www/html/ng/mm/cache/";
$file = $directoryCache . basename($_FILES["FileToUpload"]["name"]);
$allowed = array('image/jpeg','image/png' ,'image/gif', 'image/x-icon', 'image/bmp');
$counter = 0;
for($i = 0; $i <= sizeof($allowed) - 1; $i++){
if($_FILES["FileToUpload"]["type"] == $allowed[$i]){
if(move_uploaded_file($_FILES["FileToUpload"]["tmp_name"], $file)){
if(!mkdir($directoryFile, 0700, true)){
echo "<h2>Das erstellen des Ordners schlug fehl!</h2>";
}
else{
echo "<h2>Level erfolgreich hochgeladen!</h2>";
$levelidfFile = fopen($directoryFile . "levelID.txt", "w");
fwrite($levelidfFile, $levelID);
fclose($levelidfFile);
$descriptionFile = fopen($directoryFile . "description.txt", "w");
fwrite($descriptionFile, $description);
fclose($descriptionFile);
$creatorFile = fopen($directoryFile . "creator.txt", "w");
fwrite($creatorFile, $levelCreator);
fclose($creatorFile);
rename($directoryCache . $_FILES["FileToUpload"]["name"], $directoryFile . "thumbnail.png");
echo "Level ID: " . $levelID . " Beschreibung " . $description . " DateiName: " . $_FILES["FileToUpload"]["name"];
break;
}
}
else{
echo "<h2>Du hast kein Level-Thumbnail hochgeladen!</h2>";
}
}
else{
$counter++;
if($counter == sizeof($allowed) - 1){
echo "<h2>Lade ein Bild/GIF hoch, keine andere Dateien!";
}
}
}
?>
我添加了此代码
$creatorFile = fopen($directoryFile . "creator.txt", "w");
fwrite($creatorFile, $levelCreator);
fclose($creatorFile);
和:
<body>
<form method="post" action="mm.php" enctype="multipart/form-data">
<input type="file" name="FileToUpload"> <br>
<input type="text" name="creator" placeholder="Level-Creator.."> **ADDED** <br>
<input type="text" name="levelid" placeholder="Level-ID.."> <br>
<input type="text" name="description" placeholder="Beschreibung.."> <br>
<input type="submit" value="Verschicken">
</form>
</body>
此外,这里是包含我的 php 错误日志的 pastebin 链接:https://pastebin.com/f96LyNrZ
我非常感谢您的帮助!
编辑3:
我已经找到了如何使错误直接显示在我的网站上的方法,结果如下:
警告:未知:open_basedir 限制生效。文件 (/var/www/html/ng/mm/index.php) 不在允许的路径内:(1) 位于未知的第 0 行
警告:未知:无法打开流:第 0 行未知中不允许操作
致命错误:未知:无法打开所需的‘/var/www/html/ng/mm/index.php’(include_path=‘.:/usr/share/php’)在第 0 行的未知位置
在我的 php.ini 中 open_basedir 处于开启状态:
open_basedir = On
编辑4:
我在我的 Raspberry Pi B+ 上测试了我的脚本并且它运行良好,所以这个脚本不是导致我的整个 php 现在出现这个问题的原因。
所以我查看了我的 php.ini,然后我看到 open_basedir 应该被注释,但是我和真正的白痴不知道我应该重新启动 apache2,我的服务器将使用新的保存...
感谢所有帮助过我的人!
答案1
当网络服务器由于严重错误而无法处理文件时,它会给出 500 内部服务器错误。
根据服务器的配置方式,如果您有一个简单的拼写错误,它可能会抛出错误,以避免在屏幕上显示错误。在这种情况下,错误通常会记录在某处。
解释器也可能无法理解该文件。如果您使用文本编辑器打开文件并以不同的布局保存,例如 UTF-8 BOM 与纯文本、Unix 与 Windows 等,就会发生这种情况。
您将需要使用以下简单命令创建一个新的文本文件:
<?php
echo 'Hello World';
?>
排除任何 php 配置错误并测试布局是否正确。如果可行,请将不再起作用的脚本复制到该文件并保存。如果不起作用,则说明脚本中存在拼写错误。您需要以某种方式启用错误以查看错误是什么。
编辑:您现在给出了错误,以前没有出现过。实际上是 apache(或任何正在运行的 Web 服务器)引发了 500 内部服务器错误。这可能是由于 php 的配置方式造成的,但也可能是因为 php 根本没有运行。
您需要验证您的安装和配置。Web 服务器是否真的在运行?它是否显示 html 文件?诸如此类。重新启动实际上也可以,您可能想尝试一下。