我刚刚上传了我在主机上构建的新项目的第一个版本。要清楚,一切都准备好开始工作,但最后我得到的是:
HTTP ERROR 500
我的项目 100%手工制作PHP ,没有WP或其他CMS /平台,并且没有Apache文件(稍后会添加.htaccess)。<登记/> 但是有一个 error_log 文件,它总是有相同的行:
[19-Jan-2017 12:59:06 America/Chicago]
PHP Parse error: syntax error, unexpected '$sgbd' (T_VARIABLE)
in /path/to/the/file.php on line 1
它指的是我的数据库连接文件:
<?php
$sgbd = "mysql";
$host = "localhost";
$database = "dont_worry";
$charset = "utf8";
$user = "this_is_not";
$password = "my_infos";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
];
try {
$bdd = new PDO('' . $sgbd . ':host=' . $host . ';dbname=' . $database . ';',
'' . $user . '', '' . $password . '', $options);
} catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
?>
这是session_start();
之后我的网页调用的第一个文件。我真的不明白什么是错的
我不准备这个,谢谢你的帮助!
编辑:我“解决”了这个问题,但不知道是怎么回事。该文件在上传时自动修改,删除了PHP代码开头和我的第一个变量之间的空格:
1 | <?php$sgbd = "mysql";
我验证了这个文件并对其进行了多次修改以尝试找到解决方案。唯一的方法是删除并重新上传整个项目。
答案 0 :(得分:3)
引用的源代码中没有语法错误,但如果您在PHP 5.3或更早版本上运行此代码,那么:
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
];
将导致语法错误short array syntax is available since 5.4。
除上述内容外,还有以下一行:
$bdd = new PDO('' . $sgbd . ':host=' . $host . ';dbname=' . $database . ';',
'' . $user . '', '' . $password . '', $options);
过度使用了。你输入''
绝对没有意义,因为这只是等于空字符串。第二行还表明您在理解变量和变量值之间的差异时遇到了问题。这应该很容易写成:
$bdd = new PDO("{$sgbd}:host={$host};dbname={$database};", $user, $password, $options);
除此之外,它不应该是你面临的500的原因。
修改强>
如果你可以从命令行调用PHP(在大多数linux上它是单独的包(即php-cli
,所以你可能需要先安装它)),然后你可以使用{{{}来检查文件的语法。 1}}开关:
-l
如果有任何问题,那么您将看到错误消息。如果您只看到$ php -l file.php
但没有详细信息,请将Errors parsing file.php
添加到参数列表中:
-d error_reporting=E_ALL
或者,您可以直接尝试在浏览器中访问您的文件(如果它不在文档根目录中,只需将其复制以使其可用 - 无论单独调用它都没关系 - 您只需要确保正在查看正确的文件 - 如果你这样做,那么将记录语法错误。如果这是错误的文件,那么真的不会发生任何事情。