什么可能导致字符串连接失败?

时间:2015-01-16 19:44:34

标签: php curl

以下代码存在于我的一台服务器上:

    $curl = curl_init();
    $url = "http://www.example.com/controller/action?param1=" . $value1 . "&param2=" . $value2;
    $url = str_replace(" ","%20",$url);
    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => $url
    ));

    $result = curl_exec($curl);

大部分时间,这都很好。但是,今天在example.com的访问日志中,我注意到第二个参数完全丢失的条目。不只是值,整个参数。所以日志行是

  

GET / controller / action?param1 = 36838242 HTTP / 1.1

我无法想到会导致param2从查询字符串中完全丢失的任何条件。然而,显然它发生了。并且只有一个代码块可以进行此curl调用,因此这绝对是负责访问日志条目的代码。

所以我的问题是,在什么条件下连接的一部分会失败,但其余的代码是否继续运行?由于代码在99%的时间内都有效,所以我喜欢把它写成侥幸,但这真的让我烦恼。

1 个答案:

答案 0 :(得分:3)

正如其他人所指出的,字符串连接不会失败。

我猜测$value1包含一些未正确编码的不可打印字符。您的str_replace仅处理空格。你可以更安全地做这样的事情:

$params = array( 'param1' => $value1,
                 'param2' => $value2 );

$url = 'http://www.example.com/controller/action?' . http_build_query($params);

将当前通话发送至str_replace