在共享服务器上添加额外的 php.ini

问题描述 投票:0回答:1

在共享服务器上为我的网站开发 php 脚本时,我希望在 php.ini 中设置 display_errors=on 以获得更多信息,而不仅仅是“500”。

我了解到这需要修改 php.ini,这在我的情况下是不可能的。

phpinfo 报告

Loaded Configuration File                /etc/php8.2/php.ini
Scan this dir for additional .ini files  (none)

当然我无法修改

/etc/php8.2/

上的文件

至少我可以阅读它并在那里找到

display_errors=off

ini_set 添加自己的目录以扫描其他 php.ini 的语法如何?

我注意到非常愚蠢的语法错误(例如缺少分号)没有被捕获 ini_set("log_errors", 1); ini_set("error_log", getcwd() . "/php-error.log");

或者有不同的方法吗?

php
1个回答
0
投票

感谢@Cyclonecode、@ADyson 和@Nico Haase 的提示。

安装我自己的网络服务器和 PHP,并最终安装一个包含测试数据的数据库,从长远来看当然会更好。我向其他用户隐藏损坏页面的唯一安全措施是临时且尚未链接的页面名称。我承认,不太专业。另一个提示可能是比 notepad++ 具有更好的 php 语法检查功能的编辑器。 @Nico 链接中提到的附加 ini_set 方法只是更改了 HTTP CODE 500 响应的格式,运气不好。

我尝试了迄今为止找到的所有内容,包括 .htaccess 方法但没有成功(可以访问它并且可以配置 404 页面)

但是我找到了另一个解决方案(在 stackoverflow 上的某个地方?),尚未提及:如果语法错误位于包含文件内,则会在屏幕上报告。不管是否调用了错误的函数。

样品:

<!DOCTYPE html> 
<html><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title> PHP Test Environment </title>
</head>
<body>
<?php
ini_set("log_errors", 1);
ini_set("error_log", getcwd() . "/php-error.log");
function shutDownFunction() {
    echo "shutdown_function running";
    $error = error_get_last();
    if ($error['type'] === E_ERROR) print_r ($error);
}
register_shutdown_function('shutDownFunction');

include './db_functions.php';  // supplies connect(), getID(), getTimeSeries() 
try {
  include './error.php';  // Syntax error in there is reported on screen
  $db = connect(); 
  if ($db) echo "Connected ! <br>";
  $ID = getID($db, "Gesamt");
  $pos = 6;
  $time = '2024-06-26';
  echo json_encode(getTimeSeries($db, $ID, $pos, $time, 4));
  $db -> close();
  // x  // if comment removed, error here is not shown, simply reporting `HTTP ERROR 500`
} catch (\Throwable $t) {
     echo $t->getMessage(), " at ", $t->getFile(), ":", $t->getLine(), "<br>";
}
?>
<p>Done</p>
</body>

这是包含的文件

error.php
:

<?php
function wrong_getID(&$db, $name ) {
    xyz // error here
    $ID = 0;
    $q = "SELECT ID FROM Device WHERE Name='".$name."';";
    $result = $db->query($q);
    if ($result && $result->num_rows == 1) 
        $ID =  $result->fetch_array(MYSQLI_NUM)[0];
    return $ID;
}
?>

因此,将所有 php 代码放入包含文件中,然后添加 在页面本身上尝试 {} catch (可抛出)可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.