我的Twitter应用为什么会返回端口错误?

8
我已经制作了一个Twitter应用程序,可以通过“twitteroauth”和“oauth” PHP脚本(此处)简单地从我的网站发布推文。

一切正常,但我的错误日志给出了以下错误:

未定义索引:port OAuth.php 383

虽然这似乎没有阻止我的脚本运行,但我想保持我的错误日志不被噪音打扰,并避免可能的未来问题。

有任何想法为什么会发生这种情况吗?

供参考,OAuth.php中的代码是:

public function get_normalized_http_url() {
$parts = parse_url($this->http_url);
$port = @$parts['port'];       <-- Line 383
$scheme = $parts['scheme'];
$host = $parts['host'];
$path = @$parts['path'];
$port or $port = ($scheme == 'https') ? '443' : '80';
if (($scheme == 'https' && $port != '443')
|| ($scheme == 'http' && $port != '80')) {
$host = "$host:$port";
}
return "$scheme://$host$path";
}

$parts["port"] 包含什么?我不知道这个库,但如果它为空,也许你需要添加一个值吗? - Pekka
3个回答

7

这是在OAuth.php文件中的一个错误,它在没有执行索引检查的情况下访问数组的索引。

显然,编写此代码的程序员使用了错误抑制运算符@,而不是进行正确的索引检查 - 他们懒惰地假设一切都是最好的。

向上报告此问题,修复很简单:

$parts = parse_url($this->http_url) + array('port'=>NULL, 'path'=>NULL);

并且移除这两个 @ 操作符。


5
这是因为parse_url()不能保证返回端口号(强调我的):

如果省略组件参数,则返回一个关联数组。数组中至少有一个元素。

如果你不想修改error_reporting,可以尝试使用类似于$port = (array_key_exists('port', $parts) ? $parts['port'] : 80);的方法来隐藏提示信息。

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接