【问题标题】:PHP cause the page HTTP Error 500 (Internal Server Error):PHP导致页面HTTP Error 500(Internal Server Error):
【发布时间】:2013-06-14 15:17:50
【问题描述】:

我在 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. 我做错了什么?

【问题讨论】:

  • heredoc 语法要求结束行的第一件事是结束标记 - 你不能在它前面放置空格或制表符。

标签: php error-handling


【解决方案1】:

您应该查看web-server错误日志以了解错误的详细信息,但从您发布的代码来看,问题可能是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 来生成正确的输出。

【讨论】:

    【解决方案2】:

    删除JSON 周围的双引号并删除使PHP heredoc syntax 无效的多余空格

     $json = <<<"JSON"
    

    应该是

    $json = <<<JSON
    

    喜欢

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

    【讨论】:

      【解决方案3】:
      1. 如果您有 500 内部服务器错误,则几乎可以肯定您在 PHP 中遇到了致命错误。根据您的代码,您可能会在错误日志中发现错误,或者您可能必须使用例如xdebug 来调试您的代码。
      2. 您不需要在 JSON 周围加上引号。除此之外,您的代码没有任何问题。但是,您应该使用 json_encode 生成 JSON。

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 2017-02-18
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多