PHP - параметры командной строки в Windows

На основе кода Teste. Я могу подтвердить следующие работы. Я не могу сказать, является ли это «хорошим» кодом, но он, безусловно, работает, и вы можете быстро и быстро восстановить работоспособность, если у вас возникли проблемы с GCM для сервера FCM!

public AndroidFCMPushNotificationStatus SendNotification(string serverApiKey, string senderId, string deviceId, string message)
{
    AndroidFCMPushNotificationStatus result = new AndroidFCMPushNotificationStatus();

    try
    {
        result.Successful = false;
        result.Error = null;

        var value = message;
        WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", serverApiKey));
        tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));

        string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceId + "";

        Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;

        using (Stream dataStream = tRequest.GetRequestStream())
        {
            dataStream.Write(byteArray, 0, byteArray.Length);

            using (WebResponse tResponse = tRequest.GetResponse())
            {
                using (Stream dataStreamResponse = tResponse.GetResponseStream())
                {
                    using (StreamReader tReader = new StreamReader(dataStreamResponse))
                    {
                        String sResponseFromServer = tReader.ReadToEnd();
                        result.Response = sResponseFromServer;
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        result.Successful = false;
        result.Response = null;
        result.Error = ex;
    }

    return result;
}


public class AndroidFCMPushNotificationStatus
{
    public bool Successful
    {
        get;
        set;
    }

    public string Response
    {
        get;
        set;
    }
    public Exception Error
    {
        get;
        set;
    }
}
7
задан 9 revs, 4 users 66%johanc 1 July 2012 в 15:08
поделиться

8 ответов

Почему у Вас есть ожидание, что параметрический усилитель будет установлен на значение? Вы ответственны за парсинг командной строки способом, которого Вы требуете от массива $argv.

7
ответ дан 6 December 2019 в 12:56
поделиться

Передача параметров обрабатывается в Примечании справки онлайн: Если необходимо передать аргументы сценариям, необходимо передать - как первый аргумент при использовании переключателя-f. Это, казалось, работало под PHP4, но не под PHP5.

Но PHP все еще не анализирует те аргументы. Это просто передает их сценарию в массиве $argv.

Единственная причина - состоит в том так, чтобы PHP мог сказать, какие аргументы предназначены для исполняемого файла PHP и какие аргументы предназначены для Вашего сценария.

Это позволяет Вам сделать вещи как это:

php -e -n -f myScript.php -- -f -n -e

(-f,-n, и-e после - передаются myScript.php. Те прежде передаются самому PHP).

3
ответ дан 6 December 2019 в 12:56
поделиться

PHP не параметризовал Ваши параметры командной строки для Вас. Посмотрите вывод, где Ваша 2-я запись в ARGV является "param=test".

То, что Вы, скорее всего, хотите, должно использовать ГРУШЕВЫЙ пакет http://pear.php.net/package/Console_CommandLine: "Полнофункциональный синтаксический анализатор параметров командной строки и аргументов".

Или можно быть мазохистскими и добавить код, чтобы пройти ARGV и установить параметры сами. Вот очень упрощенный отрывок для получения Вас, запустился (это не будет работать, если первая часть не будет допустимым именем переменной или существует больше чем 1 '=' в части ARGV:

foreach($argv as $v) {
    if(false !== strpos($v, '=')) {
        $parts = explode('=', $v);
        ${$parts[0]} = $parts[1];
    }
}
1
ответ дан 6 December 2019 в 12:56
поделиться

$argv является массивом, содержащим все Ваши параметры командной строки... Необходимо проанализировать тот массив и установить $param сами.

$tmp = $argv[1];             // $tmp="param=test"
$tmp = explode("=", $tmp);   // $tmp=Array( 0 => param, 1 => test)

$param = $tmp[1];            // $param = "test";
0
ответ дан 6 December 2019 в 12:56
поделиться

Можно сделать что-то как:

if($argc > 1){
    if($argv[1] == 'param=test'){
        $param = 'test';
    }
}

Конечно, можно стать намного более сложными, чем это по мере необходимости.

0
ответ дан 6 December 2019 в 12:56
поделиться

можно использовать массив $argv. как это:

<?php
 echo  $argv[1];
?>

помните, что первый член массива $argv (который является $argv [0]) является названием самого сценария, поэтому для использования параметров для приложения, необходимо начать использовать членов $argv [] от '1'th индекс. при вызове приложения используйте этот синтаксис:

php myscript.php -- myValue

нет никакой потребности поставить имя для параметра. как Вы видели, что Вы назвали var_dump () на $argv [], второй участник (который является первым параметром), была строка PARAM=TEST.правильно? таким образом, нет никакой потребности поставить имя для параметрического усилителя. просто введите значение параметрического усилителя.

-1
ответ дан 6 December 2019 в 12:56
поделиться

Вы могли использовать что-то как

if (isset($argv[1]) {
 $arg1 = $argv[1];             
 $arg1 = explode("=", $arg1);   
 $param = $arg1[1];            
}

(как обработать отсутствие parameter/s, ваше дело), или если Вы нуждаетесь в более сложном сценарии, изучаете библиотеку синтаксического анализатора командной строки, такую как та от Груши.

использование ${$parts[0]} = $parts[1]; отправленный в другом решении позволяет Вам переопределить любую переменную в своем коде, который действительно не звучит безопасным.

0
ответ дан 6 December 2019 в 12:56
поделиться

Если вам нравится жить на передовой, в PHP 5.3 есть getOpt () команда, которая позаботится обо всем этом за вас. В некоторой степени.

0
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: