【问题标题】:Why is my Twitter app returning a port error?为什么我的 Twitter 应用程序返回端口错误?
【发布时间】:2011-11-20 03:17:52
【问题描述】:

我制作了一个 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";
}

【问题讨论】:

  • 嗯,$parts["port"] 包含什么?我不知道这个库,但如果它是空的,也许你需要添加一个值?

标签: php twitter oauth


【解决方案1】:

发生这种情况是因为 parse_url() 不能保证返回端口号(强调我的):

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

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

【讨论】:

    【解决方案2】:

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

    很明显,写这篇文章的编码员/ette 非常聪明 - 聪明地使用错误抑制运算符 @ 而不是进行适当的索引检查 - 懒惰(假设最好)。

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

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

    并删除两个@ 运算符。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2012-08-04
      • 2011-02-19
      相关资源
      最近更新 更多