Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> php.exe и передача параметров скрипту 
V
    Опции темы
SABROG
  Дата 1.4.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Предположим есть штук 200 url такого вида: http://myserver.com/myScript.php?one=1&two=2&three=3

Если запускать через браузер все 200, то сервак (наш) "захлебывается", начинается борьба IIS с MSSQL. Для firefox'a я не нашел никаких плагинов, которые могли бы поставить в очередь запросы (не говорю про POST, хотябы GET).

Скриптов подобных на самом деле тьма, они писались не один год и сейчас их переписывать, чтобы их все скоординировать очень долго, а на это уже нет времени, завал. Если 200 запросов поставить на ночь выполняться по очереди то всё будет нормально и утром всё будет обработано. Если ставить сразу 200, то SQL сервак в один прекрасный момент становится в позу и начинает бычить, то ему таймаута не хватило, чтобы увеличить файл базы данных, то других таймаутов.

Как один из вариантов хотел использовать php.exe с передачей параметров в .php скрипт. Написал .bat'ник, который вызывает по очереди каждый скрипт, но вот как я не изгалялся - передать параметры в него не получается. Наверно способов 5 перепробовал. Может кто-нибудь подскажет на рабочем примере? Самый популярный вариант в интернете:

Код

php.exe c:\scripts\myscript.php "&one=1&two=2&three=3"


Не работает. Пытался экранировать амперсанд "^&", пытался его конвертить "%%26", пытался передавать параметра так "--one=1 --two=2". Пытался без имен параметров передавать "1 2 3". Пытался и с ключами через пробел "one=1 two=2 three=3"В общем нивкакую. Скрипт работает и честно выдает Warning, что переменная пуста.

Варианты типа скачай через downthemall отпадают, если в этих вариантах нет настройки для установки таймата ответа от сервера в несколько часов. В downthemall этот таймаут 15 минут, несмотря на то, что в firefox можно выставить любое значение.

Это сообщение отредактировал(а) SABROG - 1.4.2010, 20:52


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ksnk
Дата 1.4.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SABROG
Дата 1.4.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(ksnk @ 1.4.2010,  20:41)
тынц

Я был там сегодня уже, читал комментарии. Может быть кто-нибудь скажет на какой именно комментарий обратить внимание, так как предлагаемые там варианты (о которых я написал в первом посте) я уже испробовал и они не работают.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Fortop
Дата 1.4.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(SABROG @  1.4.2010,  20:48 Найти цитируемый пост)
и они не работают. 

Что за бред?

Цитата(SABROG @  1.4.2010,  20:36 Найти цитируемый пост)
 Скрипт работает и честно выдает Warning, что переменная пуста.

Какая переменная пуста?



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
SABROG
Дата 1.4.2010, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(Fortop @  1.4.2010,  21:41 Найти цитируемый пост)
Какая переменная пуста?

Начиная с самой первой - "one"

Цитата(Fortop @  1.4.2010,  21:41 Найти цитируемый пост)
Что за бред?

Мне сейчас хотелось бы услышать не встречные вопросы, которые ни к чему не приведут, я до завтрашнего дня все равно ничего перепроверить не смогу, а вариант который был лично вами испробован под Windows и который действительно работал, желательно с версией php. Людей отсылающих в гугл и по статьям прошу даже не писать. На это сегодня был убит целый час и обилие неработающих вариантов только усугубляет дело. Прошу ответить того кто лично сам вбивал эти параметры в командной строке Windows и у него все работало.

В качестве уточнения. PHP скрипт это скрипт сайта, не консольная альтернатива с параметрами argc/argv. Он не ожидает, что ему будут передавать параметры никак кроме как по ссылке с html страницы (get) и менять его никто не будет.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
IgorIV
Дата 2.4.2010, 01:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(SABROG @  1.4.2010,  21:50 Найти цитируемый пост)
На это сегодня был убит целый час

Так мало smile И уже руки опустил smile
Из первого поста не все было ясно, потому такие ответы. По сути получается.

Код

         $aa = isset($_GET['a']) ? $_GET['a'] : '';

        if (empty($aa)) echo "var aa is empty\n\r";

Потому переменная и пуста, что её нет в гет массиве. Раз нет надо поместить. В дополнении к шелл-скрипту допиши простой php-скрипт.
Код

    $one = isset($_GET['one']) ? $_GET['one'] : '';

    if (empty($one)) echo "var one is empty\n\r";
        
    if ($argv) { 
    parse_str($argv[1], $it);    

}
   $_GET = $it;
   
   var_dump($_GET);

   $one = isset($_GET['one']) ? $_GET['one'] : '';

   if (empty($one)) {echo "var one is empty\n\r";} else {echo "var one = $one\n\r";}


Код

php ./noname2.php 'one=1&two=2&three=3'
var one is empty
array(3) {
  ["one"]=>
  string(1) "1"
  ["two"]=>
  string(1) "2"
  ["three"]=>
  string(1) "3"
}
var one = 1

Ах да, забыл про Виндоуз. Извини, у меня php только на сервере с FreeBSD. Так что зря все это расписал ...

Это сообщение отредактировал(а) IgorIV - 2.4.2010, 01:22
PM MAIL   Вверх
Fortop
Дата 2.4.2010, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(SABROG @  1.4.2010,  21:50 Найти цитируемый пост)
В качестве уточнения. PHP скрипт это скрипт сайта, не консольная альтернатива с параметрами argc/argv. Он не ожидает, что ему будут передавать параметры никак кроме как по ссылке с html страницы (get) и менять его никто не будет. 

Это абсолютно неважно.

IgorIV,  правильно сказал, пишется простейший враппер-раннер. И все работает.

Добавлено через 21 секунду
Даже под win smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
SABROG
Дата 2.4.2010, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(IgorIV @  2.4.2010,  01:17 Найти цитируемый пост)
Так мало И уже руки опустил

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

Цитата(Fortop @  2.4.2010,  03:07 Найти цитируемый пост)
IgorIV,  правильно сказал, пишется простейший враппер-раннер. И все работает.

Вот тебе и "че за бред", оказывается не всё так просто.

Код

php ./noname2.php 'one=1&two=2&three=3'


noname2.php, как я понял, и есть wrapper? А в каком месте у него вызывается noname1.php?

В общем нужен require_once("myScript.php"): http://ru2.php.net/manual/en/features.commandline.php#94912

Это сообщение отредактировал(а) SABROG - 2.4.2010, 08:48


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Pfailed
Дата 2.4.2010, 09:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 5
Всего: 39



Вам нужно зайти с другой стороны.
Напишите скрипт, где вызывайте по очереди свои 200 url.
Да на том же php.

Код

$urls = array(...);
foreach($urls as $url)
{
    // тут через curl делайте GET запрос на $url. Не забудьте таймаут curl поставить в бесконечность, т.к. судя по всему ваши скрипты выполняются долго
}


Этот скрипт уже запускайте из командной строки: php.exe test.php



--------------------
PM MAIL   Вверх
SABROG
Дата 2.4.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



На нашем серваке я не обнаружил установленного модуля curl в phpinfo.

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


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Pfailed
Дата 2.4.2010, 11:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 5
Всего: 39



А что у вас за сервер? На Linux/BSD это проще сделать через bash скрипт и wget/curl.


Цитата(SABROG @  2.4.2010,  11:00 Найти цитируемый пост)
не кажется ли вам, что всё это попахивает утопией?

Кажется, но вы сами довели это до утопии. Зачем вообще эти долго выполняющиеся операции было сувать в web скрипты?
Логичнее было создать консольный сценарий и запускать его по крону или еще каким либо образом.


--------------------
PM MAIL   Вверх
SABROG
Дата 2.4.2010, 11:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(Pfailed @  2.4.2010,  11:12 Найти цитируемый пост)
wget

Именно сейчас занимаюсь его установкой, еще вчера была такая мысль.

Цитата(Pfailed @  2.4.2010,  11:12 Найти цитируемый пост)
Кажется, но вы сами довели это до утопии. Зачем вообще эти долго выполняющиеся операции было сувать в web скрипты?

Работа с SQL сервером это очень долгая операция, особенно когда в ней около 5 миллионов INSERT'ов в цикле. Цифры меняются каждый день, это поток. Данные получаются из XML'я.

Цитата(Pfailed @  2.4.2010,  11:12 Найти цитируемый пост)

Логичнее было создать консольный сценарий и запускать его по крону или еще каким либо образом. 

Не получается так. Сотрудники скачивают с сайтов партнеров XML файлы разного формата вручную и выборочно. Выбор может сделать только человек, на машину это перевесить нельзя, она не умеет принимать решения основанные на текстовом описании к файлу сделанном руками других людей. Стандартного формата описания нет, это скорее комментарий.

Сервер MSSQL, соответственно никакие FreeBSD не помогут. Вставка идет через BULK INSERT, на разные сервера web сервер и MSSQL развесить не получается. Файл для BULK INSERT'а очень проблематично передавать между FreeBSD и Windows, SAMBA работает очень не стабильно.
---
В общем решил вопрос через wget:
//list.txt
Код

http://myserver.com/myscript.php?one=1&two=2&three=3
http://myserver.com/myscript.php?four=4&five=5&six=6
...

Код

@echo off
rem NTLM Authentication
set LOGIN=login
set PASSWORD=password
wget --http-user=%LOGIN% --http-passwd=%PASSWORD% --output-file=messages.txt -i list.txt


Если  wget вызывается с URL'ом в виндовой консоли, то знак амперсанда "&" надо экранировать так "^&" (кавычки убрать).

Это сообщение отредактировал(а) SABROG - 2.4.2010, 13:07


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Fortop
Дата 2.4.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Pfailed @  2.4.2010,  09:06 Найти цитируемый пост)
Напишите скрипт, где вызывайте по очереди свои 200 url.

Как разовое решение этот вариант еще допустим.
Но для постоянного варианта - это полный идиотизм. Может вы сами себя еще и через пару проксисерверов будете вызывать?

Цитата(SABROG @  2.4.2010,  08:45 Найти цитируемый пост)
Вот тебе и "че за бред", оказывается не всё так просто.

Все крайне элементарно.
Но оказывается вы банально не знаете разницы между CLI и WEB приложением. И тот факт что параметры они получают по-разному.
Печально.

А враппер состоит из целых3 строк - мегасложная вещь.

Добавлено через 1 минуту и 51 секунду
Цитата(SABROG @  2.4.2010,  11:27 Найти цитируемый пост)
В общем решил вопрос через wget:

Жесть, забаньте его кто-нибудь и тему закройте, чтобы это не расползлось по сети.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
SABROG
Дата 2.4.2010, 23:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(Fortop @  2.4.2010,  20:35 Найти цитируемый пост)
А враппер состоит из целых3 строк - мегасложная вещь.

Покажи мне такой CLI враппер из трех строк, который поменяет значения в $_GET переменной на нужные мне, вызовит мой WEB скрипт и я тебе подниму репутацию. Пока я от тебя слышу одни оскорбления и никакой конкретики.

Цитата(Fortop @  2.4.2010,  20:35 Найти цитируемый пост)

Но оказывается вы банально не знаете разницы между CLI и WEB приложением.

Я в основном на C++ программирую, видеть PHP скрипт в виде "полноценной программы" для меня дико. Я это не приемлю по религиозным соображениям. На то, чтобы сделать то, что сейчас уже сделано на PHP скриптах ушло очень много времени, в основном на обход багов и недоработок php модуля под windows. Тем не менее мне пришлось заниматься переписыванием и допиливанием скриптов, которые писал другой человек, при этом я почти не знал PHP и после года общения с этим "скриптовым языком" у меня совершенно нет желания продолжать его изучать.

Цитата(Fortop @  2.4.2010,  20:35 Найти цитируемый пост)
Жесть, забаньте его кто-нибудь и тему закройте, чтобы это не расползлось по сети. 

Приведи единственное верное и рабочее решение и расползется по сети правильный вариант, покажи, что ты не просто так получил свои 30 очков репутации (комменты к очкам хорошо отражают вашу суть).

P.S.: сегодня через wget удачно обработал все 200 скриптов, проблема возникла позже, когда я попытался использовать ключ --input-file. NTLM аутентификация с ним не проходит нивкакую, спустя несколько часов понял, что в системе помимо новой стоит еще и старая версия wget...

Это сообщение отредактировал(а) SABROG - 3.4.2010, 10:45


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Fortop
Дата 3.4.2010, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(SABROG @  2.4.2010,  23:18 Найти цитируемый пост)
Покажи мне такой CLI враппер из трех строк, который поменяет значения в $_GET переменной на нужные мне, вызовит мой WEB скрипт и я тебе подниму репутацию.

Бгг... Это дескать - счастье мне привалило - репутация smile

У меня не то настроение, чтобы выполнять Ваше "Сделайте за меня" и у Вас нет сисек smile
Хотите разобраться - не вопрос. Хотите чтобы я сделал за Вас - увольте.

Цитата(SABROG @  2.4.2010,  23:18 Найти цитируемый пост)
Я это не приемлю по религиозным соображениям

Собственно это и есть причина Ваших проблем.

Вам лень и не хочется разбираться.
Решение Вам уже предложил IgorIV, но Вы даже не удосужились разобраться в нем - лентяй.

Раз Вам лень - наймите специалиста, который будет менее щепетилен в "религиозных соображениях".

P.S. про 3 строчки я соврал. Достаточно 2 строчки.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.