Проблема с вводом функции amfPHP

Я пишу функцию amfPHP, которая должна принимать строку ввода. Он без проблем принимает буквенно-цифровые символы, но, к сожалению, возвращает данные как «2», если я отправлю «2.UgnFl4kAWovazp_tVo6fHg__.86400.1260025200-571701419» в качестве параметра.

вот функция (очень простая, как видите)

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

person she hates me    schedule 04.12.2009    source источник
comment
Это выглядит довольно просто. Вероятно, вы захотите показать код, вызывающий метод, и код, выводящий результат.   -  person Scott Saunders    schedule 04.12.2009


Ответы (4)


Я только что попробовал это с простой настройкой и просто записал результаты в файл из браузера службы, и мне кажется, что все в порядке. Таким образом, проблема, казалось бы, в вызывающем конце.

Другая возможность заключается в том, что amfphp изменяет тип данных возвращаемого значения со строки на целое из-за ведущего целого числа. Попробуйте поместить какой-нибудь буквенно-цифровой символ в начало возвращаемой строки и посмотрите, что получится.

person Matti Lyra    schedule 04.12.2009
comment
Вы правы насчет amfphp, он изменяет строку на целое число, когда я помещаю альфа-символ в начало строки, он возвращает правильное значение с моей добавленной строкой. Знаете ли вы решение или настройку, чтобы избежать этого? (Если я не могу найти какое-либо решение, я поставлю символ как временное решение) - person she hates me; 04.12.2009
comment
Я сделал быстрый тест, повторяющий строки, которые имеют этот формат, и php, похоже, не конвертирует их. Итак, вам нужно найти параметр amfphp, который отключает это. Я не думаю, что есть один, хотя. Также возможно, что преобразование выполняет внешний интерфейс AS. Вы используете AS2 или AS3? AS3 должен быть типобезопасным. - person Matti Lyra; 04.12.2009

Чтобы обойти эту ошибку обозревателя служб, дважды цитируйте свою запись в обозревателе служб, если вы ожидаете строку в аргументе, и эта строка начинается с числа. У меня была такая же проблема с тестированием некоторых методов через сервисный браузер, и все работало нормально.

person Tolomelli    schedule 10.02.2011

Это поведение фактически присутствует в сервисном браузере AMFPHP (ошибка), поэтому его легко принять за AMFPHP, который преобразует строки, ведущие к числам, в int. Однако проблема в коде отправки. Например, отправка строки в кодировке urlencoded через шлюз json работает правильно (код цели 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);
        }
    }
person ransomweaver    schedule 29.12.2010
comment
2 года спустя я переместил сайт, который доказывает вышеизложенное (что это в коде отправки), на новую машину, и оказалось, что проблема в amfphp (или, возможно, в реализации json_decode в php 5.3 по сравнению с 5.2. в любом случае, в amfphp/core/json/app/actions.php, строка 48, он декодирует параметр и проверяет только первый символ, чтобы увидеть, должен ли он json_decode его (т.е. удалить кавычки из числа).Если это число, за которым следует любой буквы вы получаете null (по крайней мере, на php 5.3; опять же, это работало раньше для меня на 5.2. Ниже я комментирую свои изменения в коде, чтобы заставить его работать. - person ransomweaver; 23.03.2012

двойные кавычки ваших строк... это сработает.

person erik    schedule 21.04.2010