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

时间:2011-09-19 10:32:33

标签: php twitter oauth

我创建了一个Twitter应用程序,只需使用“twitteroauth”和“oauth”PHP脚本here从我的网站发布推文。

一切正常,但我的错误日志给了我这个错误:

  

未定义索引:端口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";
}

3 个答案:

答案 0 :(得分:7)

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

显然编写这个的编码器/ ette非常聪明地使用错误抑制操作符@而不是进行正确的索引检查 - 是懒惰的(假设最好)。

将此报告为上游错误,修复很简单:

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

并删除两个@运算符。

答案 1 :(得分:5)

这是因为parse_url()无法保证返回端口号(强调我的):

  

如果省略component参数,则返回关联数组。 至少一个   元素将出现在数组中。

如果您不想触摸$port = (array_key_exists('port', $parts) ? $parts['port'] : 80);,请尝试使用error_reporting之类的内容隐藏通知。

答案 2 :(得分:4)