小编Tra*_*Guy的帖子

将ob_start指向类内的函数以捕获致命错误

我正在尝试在PHP中创建一个通用类,该类将提供一种调用Web服务,解析返回的XML并返回JSON对象的方法。

我在不支持CURL和/或JSON的服务器上遇到致命错误,并寻找一种方法来正常地将JSON对象中的错误返回给客户端,而不是崩溃。
经过一番搜索,我发现了一篇文章,建议我可以调用ob_start("fatal_error_handler")并提供处理程序函数:

function fatal_error_handler($buffer) {
    if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
        $err = preg_replace("/<.*?>/","",$regs[2]);
        $buffer = json_encode(array("errorMessage" => "Fatal error occurred", "exceptionMessage" => $err));
    }
    return $buffer;
} 
Run Code Online (Sandbox Code Playgroud)

ob_end_flush在脚本末尾调用。
这种运作良好,但我现在想的是功能添加到我的课。我尝试并成功添加了以下构造函数和析构函数:

    function __construct() {
        ob_start("fatal_error_handler");
    }

    function __destruct() {
        ob_end_flush();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将处理程序函数移入类时,无法将其添加到ob_start()调用中。我尝试了ob_start("$this->fatal_error_handler")ob_start("WebService::fatal_error_handler")(WebService是我的班级名称)-无济于事。

我的问题是,如何将类函数的名称传递到ob_start构造函数中?

一个额外的问题:我是在正确地做这件事,还是有一种更好的方法来处理客户可以处理的致命错误?

php fatal-error

2
推荐指数
1
解决办法
2993
查看次数

如何将提示集中在WP8 Toolkit PhoneTextBox中

我正在使用WP8工具包PhoneTextBox控件.我希望提示在垂直和水平方向上居中.下面的代码得到了垂直部分,但我似乎无法削弱水平对齐.

这是文本框块:

<toolkit:PhoneTextBox Name="textLongUrl" TextWrapping="Wrap" InputScope="Url" Height="150" MaxLength="250" 
                      DisplayedMaxLength="250" LengthIndicatorVisible="True" FontSize="20" 
                      Hint="Type or paste URL" HintStyle="{StaticResource HintCustomStyle}" 
                      ActionIcon="Assets\Images\icon-button-32.png"
                      ActionIconTapped="textLongUrl_ActionIconTapped" KeyDown="textLongUrl_KeyDown"  />
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的提示样式:

<Style TargetType="ContentControl" x:Key="HintCustomStyle">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontSize" Value="36"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

xaml windows-phone-8

2
推荐指数
1
解决办法
1399
查看次数

使用MacPort切换PHP版本

我使用MacPorts安装了PHP 5.4,使用了当前PHP 5.3上的所有端口.然后我(愚蠢地)跑了命令sudo port select --set php php54并收到了Selecting 'php54' for 'php' succeeded. 'php54' is now active.

但是,我无法运行任何当前的PHP页面,从Apache收到"Forbidden"错误.我决定切换回5.3,然后sudo port select --set php php5才开始接收Selecting 'php5' for 'php' failed: The specified version 'php5' is not valid..我尝试使用php53 - 并得到相同的消息.

为了验证我安装了什么,我port installed php*得到了:

php5 @5.3.28_0+apache2+pear (active) php5-apc @3.1.9_1 (active) php5-curl @5.3.28_0 (active) php5-iconv @5.3.28_0 (active) php5-mbstring @5.3.28_0 (active) php5-mcrypt @5.3.28_0 (active) php5-memcache @2.2.7_0 (active) php5-mysql @5.3.28_0+mysqlnd (active) php5-openssl @5.3.28_0 (active) php5-xdebug @2.2.5_0 (active) php54 @5.4.30_0+libedit (active) …

php versions macports

2
推荐指数
1
解决办法
1392
查看次数

将Javascript函数绑定到变量

我试图绑定其中一个toLowerCasetoUpperCase一个变量,我错过了一些步骤.这是我的代码的简化版本:

for(let i = 0; i < arr.length; i++) {
    if(flag) {
        arr[i] = arr[i].toUpperCase();
    }
    else {
        arr[i] = arr[i].toLowerCase();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以这样做:

let func = flag  ? String.prototype.toUpperCase : String.prototype.toLowerCase;
arr = arr.map(x=>func(x));
Run Code Online (Sandbox Code Playgroud)

虽然我可以设置功能,看起来我没有正确使用它,因为我得到了Uncaught TypeError: String.prototype.toLowerCase called on null or undefined.我在这里错过了什么?

javascript arrays

2
推荐指数
1
解决办法
48
查看次数

Github API:确定用户还是组织

给定 URL https://github.com/foo/bar,我希望能够获取 foo 的所有存储库。如果 foo 是用户,我需要调用api.repos.getForUser({username: 'foo'}),如果是组织,我需要调用api.repos.getForOrg({org: 'foo'}).

我的问题是:如何判断“foo”是组织还是用户?

现在,我以昂贵的方式“解决”它,试图获得一个名为“foo”的组织,如果我得到了它,我会尝试获取它的存储库;如果我最终得到一个异常(我使用 Promise)并且异常的代码是“404”,我假设“foo”是一个用户,并尝试获取用户存储库。

这显然是低效的,并且具有添加可能触发速率限制的调用的副作用。

有没有更简单的方法来知道“foo”是用户还是组织?

github-api

2
推荐指数
1
解决办法
1334
查看次数

使用JavaScript和PHP来使用JSON

2个简短的问题.我会很感激答案或指向回答问题的指针(我在询问前搜查:)).

  1. 我想使用一个返回JSON对象的TRYNT Web服务(例如这个).我是否正确地推断,如果他们没有指定JSONP,由于跨站点脚本限制,我无法从客户端使用这些服务而没有服务器端代理?
  2. 好的,所以我尝试实现一个PHP代理来使用服务并将JSON返回给HTML,但发现我的(免费)网络托管服务阻止了CURL图书馆.作为一个新手PHP开发人员(ASP.Net是我通常的专业知识,但我决定是时候分支:)) - 我还有什么其他选择来获取PHP的JSON结果?

任何帮助表示赞赏.

php json jsonp web-services

0
推荐指数
1
解决办法
4572
查看次数

在Chrome中,Ajax调用无故失败

我有一个非常简单的Ajax调用,以1秒的间隔运行,用匹配状态更新我的页面:

var getMatches = function() {
        $.ajax({
            url: '/match',
            type: 'GET',
            success: function(data) {
                avm.matches(data);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log('Error occured: ' + errorThrown);
            }
        });
    };
Run Code Online (Sandbox Code Playgroud)

从项目一开始就运行良好,但最近开始行为不端 - 仅限Chrome.

该调用不会触发 - 我在服务器端有Log :: debug,并且调用没有到达它.Developer Tools中的网络面板不显示呼叫.该textStatus是"错误",errorThrown是空的,并且jqXHR.status是0.当发生这种情况,如果我只是运行http://localhost/match,甚至在Firefox中打开同一个页面-我得到正确的结果.所以这不是服务器或路由问题 - 它纯粹是在客户端.

这种行为昨天开始了,现在我也在生产服务器上观察它.它是零星的 - 如果我关闭Chrome,清理缓存等,它会再次工作 - 一段时间.缓存中是否存在阻止呼叫的内容?

有任何想法如何解决这个问题?

ajax jquery google-chrome

0
推荐指数
1
解决办法
5923
查看次数