【问题标题】:amfPHP Function Input TroubleamfPHP 函数输入问题
【发布时间】:2009-12-04 15:27:01
【问题描述】:

我正在编写一个 amfPHP 函数,它应该接受字符串输入。它采用字母数字字符没有问题,但不幸的是,如果我发送“2.UgnFl4kAWovazp_tVo6fHg__.86400.1260025200-571701419”作为参数,它将返回数据为“2”。

这是函数(如您所见非常简单)

function checkOpenSession($guid, $session_key) {
        return $session_key;
}

【问题讨论】:

  • 这看起来很简单。您可能希望显示调用该方法的代码以及打印结果的代码。

标签: php flash amf amfphp


【解决方案1】:

要绕过此服务浏览器错误,如果您希望参数中有一个字符串并且此字符串以数字开头,请在服务浏览器上对您的条目进行双引号。我在通过服务浏览器测试某些方法时遇到了同样的问题,并且效果很好。

【讨论】:

    【解决方案2】:

    我只是尝试了一个简单的设置,然后将结果从服务浏览器写入文件,这对我来说似乎没问题。所以问题似乎出在调用端。

    另一种可能是 amfphp 将返回值的数据类型从字符串更改为 int,因为前导整数。尝试在返回字符串的开头放置一个字母数字字符,看看会发生什么。

    【讨论】:

    • 你是对的 amfphp,它将字符串更改为整数,当我将 alpha char 放在字符串的开头时,它会返回正确的值以及我添加的字符串。您知道避免这种情况的解决方案或设置吗? (如果我找不到任何解决方案,我会放一个 char 作为临时解决方案)
    • 我做了一个快速测试回显具有该格式的字符串,php 似乎没有转换它们。因此,您需要从 amfphp 中找到一个将其关闭的设置。我不认为有一个。也有可能是 AS 前端进行了转换。您使用的是 AS2 还是 AS3? AS3 应该是类型安全的。
    【解决方案3】:

    这种行为实际上存在于 AMFPHP 服务浏览器中(bug),因此很容易将其误认为是 AMFPHP 将数字前导字符串转换为 int。但是问题出在发送代码中。例如,通过 json 网关发送 urlencoded 字符串可以正常工作(目标 C 代码):

    NSString *theUrl = [[NSString alloc] initWithFormat:@"%@/modules/amfphp/amfphp/json.php/MysqlRemoting.checkAuth/%@/%@/1", kServerBaseUrl, userName, passMD5];
    NSString *encodedUrl = [theUrl stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
    

    其中 passMD5 可能有一个前导数字。但是,如果我在服务浏览器中为 checkAuth 方法输入适当的值,它就会损坏。

    [编辑]

    $value = urldecode($value);
    if($value != "") {
    if($value[0] != '[' && $value[0] != '{' && $value != "null" && $value != "false" && $value != "true") {
    $hasAlpha = false;
    //check to see if it is a number
    $sl = strlen($value);
    for ($i = 0; $i < $sl; $i++) {
        $char1 = ord($value[$i]);
        if($char1 >= 0x30 && $char1 <= 0x39) {
        //Then this is a number
        } else { //Else leave value as is */
        $hasAlpha = true;
        }
        }
        if (!$hasAlpha) $value = json_decode($value, true);
    }
            else
            {
                $value = json_decode($value, true);
            }
        }
    

    【讨论】:

    • 2 年后,我将证明上述内容的站点(它在发送代码中)移到了新机器上,结果发现问题出在 amfphp 中(或者可能在 php 5.3 的实现中) json_decode 与 5.2 的对比。无论如何,在 amfphp/core/json/app/actions.php 中,第 48 行它解码参数并仅检查第一个字符以查看它是否应该对其进行 json_decode(即从数字中去除引号) . 如果它是一个数字后跟任何字母,你会得到空值(至少在 php 5.3 上;再次,它在 5.2 上对我有用。下面我评论我对代码的更改以使其工作。
    【解决方案4】:

    双引号你的字符串...这将解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-18
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多