PHP导致页面HTTP错误500(内部服务器错误):

时间:2013-06-14 15:17:50

标签: php error-handling

我在PHP中有一个简单的函数,它给了我

  

HTTP错误500(内部服务器错误):

当我发表评论时,会打印出简单的回声。

这是功能:

error_reporting(E_ALL);
ini_set('display_errors', '1');
function invokeAuthenticationServiceAPI()
{

    $json = <<<"JSON"
            {
                "auth":
                    {
                    "username":"foo",
                    "password":"bar"
                    }
            }
    JSON;


    $data_string = json_decode($json);
    echo $data_string;
    /*
    $ch = curl_init('https://apirestserverdemo/api');                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($data_string))                                                                       
    );                                                                                                                   

    $result = curl_exec($ch);   
    echo $result;
    */
}

我在HTML文件中将其称为:

<?php
    invokeAuthenticationServiceAPI();
?>

如您所见,我需要将其发送到rest api服务器。但它只会在字符串到json格式化时失败。

我有两个问题:

  1. 也许我做过php不喜欢的事情。好的,但是我可以得到某种错误消息而不是“错误500(内部服务器错误)”吗?
  2. 我做错了什么?

3 个答案:

答案 0 :(得分:2)

您应该检查Web服务器错误日志以获取错误的详细信息,但是根据您发布的代码判断,问题可能是在heredoc JSON;结束前有空格使用JSON的时间不应该引用它。

你应该用这个:

    $json = <<<JSON
        {
            "auth":
                {
                "username":"foo",
                "password":"bar"
                }
        }
JSON; // no spaces before JSON;

而不是:

    $json = <<<"JSON"
        {
            "auth":
                {
                "username":"foo",
                "password":"bar"
                }
        }
    JSON;

虽然我个人会在php中生成一个数组或对象,并使用json_encode生成正确的输出。

答案 1 :(得分:1)

删除JSON周围的双引号,并删除使PHP heredoc syntax无效的额外空格

 $json = <<<"JSON"

应该是

$json = <<<JSON

<?php
$str = <<<JSON
{
                "auth":
                    {
                    "username":"foo",
                    "password":"bar"
                    }
            }

JSON;
echo $str;
?>

答案 2 :(得分:0)

  1. 如果您有500内部服务器错误,您几乎肯定会在PHP中出现致命错误。根据您的代码,您可能会在错误日志中找到错误,或者您可能需要使用xdebug调试代码。
  2. 您不需要围绕JSON的引号。除此之外,您的代码没有任何问题。但是,您应该使用json_encode生成JSON。