Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как из ПХП-скрипта запустить задание пл-ка виндовс


Автор: Win MK 32 1.4.2009, 19:30
Это возможно?

П.С. У меня английский язык сломался на компьютере. Прошу извинить.

Добавлено через 1 минуту и 4 секунды
Речь идет о запуске задания вот этого самого планировщика: http://setegnom.com/node/925

Автор: skyboy 1.4.2009, 20:54
когда выяснишь, как из командной строки безо всякого PHP "запустить задание планировщика", обрати внимание на функции http://ua.php.net/system, http://php.net/shell_exec, http://php.net/exec или http://php.net/passthru

Автор: Win MK 32 1.4.2009, 22:06
Сумел вроде. Но когда жму энтр вылезает окошко с примерно таким же текстом, как и тот, что пишется в консоле:
Цитата

Microsoft Windows [Версия 6.0.6001]
© Корпорация Майкрософт, 2006. Все права защищены.

C:\Users\Администратор>W:\server\usr\bin\php.exe W:\server\home\192.168.55.1\www
\forums\i63\fwrite.php
PHP Warning:  Unknown(): Unable to load dynamic library '/usr/local/php/extensio
ns\php_gd2.dll' - ═х эрщфхэ єърчрээ√щ ьюфєы№.
 in Unknown on line 0
Content-type: text/html
X-Powered-By: PHP/4.4.0

╙Ёр! ╟ряшёрыш (─юсртшЄ№ ¤Єю ъ Їрщыє
) т Їрщы (test.txt)
C:\Users\Администратор>

Если на это можно забить, то замечательно. Но что-то у меня сомнения.

Добавлено @ 22:07
fwrite.php
Код

<?php
$filename = 'test.txt';
$somecontent = "Добавить это к файлу\n";
if(is_writable($filename)){
    if(!$handle = fopen($filename, 'a')){
         echo "Не могу открыть файл ($filename)";
         exit;
    }
    if(fwrite($handle, $somecontent) === FALSE) {
        echo "Не могу произвести запись в файл ($filename)";
        exit;
    }
    echo "Ура! Записали ($somecontent) в файл ($filename)";    
    fclose($handle);
}else{
    echo "Файл $filename недоступен для записи";
}
?>


Добавлено @ 22:18
Цитата

W:\server\usr\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
W:\server\usr\local\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
W:\server\usr\local\php\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
W:\server\usr\local\sbin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php

X:\usr\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\php\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\sbin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php

X:\usr\bin\php.exe X:\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\bin\php.exe X:\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\php\php.exe X:\home\192.168.55.1\www\forums\i63\fwrite.php
X:\usr\local\sbin\php.exe X:\home\192.168.55.1\www\forums\i63\fwrite.php

Как только не пробовал - во всех вариантах ответ один - как на скриншоте. Но при этом скрипт выполняется, что интересно.

Может быть подскажите?

Автор: skyboy 1.4.2009, 22:20
Цитата(Win MK 32 @  1.4.2009,  21:06 Найти цитируемый пост)
PHP Warning:  Unknown(): Unable to load dynamic library '/usr/local/php/extensions\php_gd2.dll'

невозможно загрузить расширение php_gd2.dll, указанный в php.ini
fwrite.php нормально отрабатывает-то? 
кроме прочего, рекомендую прочитать про http://ua.php.net/cli. навряд ли использование этой версии даст другой результат, но работать с ней из консоли должно быть проще.

Автор: Win MK 32 1.4.2009, 23:08
Цитата(skyboy @  1.4.2009,  20:20 Найти цитируемый пост)
fwrite.php нормально отрабатывает-то? 

Да.

Приступая ко второму этапу, не понирмаю как вызвать то же самое из PHP. Перепробовал все эти функции.

Автор: skyboy 2.4.2009, 00:19
я вот перечитал сообщение твое первое и глубоко задумался.
есть PHP-скрипт.
есть планировщик, в определенное время выполняющий этот PHP-скрипт.
это работает.
а чего не хватает?

Автор: Win MK 32 2.4.2009, 00:49
skyboy, надо, чтобы не планировщик выполнял, а тот же PHP.


Только не иклюдом, а через сервер. Как бы чтобы сервер сам запускал скрипт. Это нужно для того, чтобы трафик тратился на сервере, а не в браузере...

Автор: skyboy 2.4.2009, 09:30
Цитата(Win MK 32 @  1.4.2009,  23:49 Найти цитируемый пост)
Только не иклюдом, а через сервер. Как бы чтобы сервер сам запускал скрипт. Это нужно для того, чтобы трафик тратился на сервере, а не в браузере... 

*делает большие глаза* если под "инклюдом" ты понимаешь include(сложно представить, как ещё можно понимать "include") из одного php-файла другого, то при чем тут траффик браузера? 

Автор: IZ@TOP 2.4.2009, 13:17
skyboy, ему, скорее всего, просто нужно запустить на сервере по расписанию скрипт - т.е. по крону. Здесь же, он пытается, опять же, как я понял, запустить на виндовой машине скрипт при помощи шедулера, который, в свою очередь, вызывает скрипт на сервере...?  smile Если я правильно все понял, тогда это просто невероятное извращение  smile 

Автор: Win MK 32 2.4.2009, 15:24
IZ@TOP, спасибо что вы прониклись моей затеей!!! smile
Помогите пожалуйста. Не обращайте внимание на то, что звучит это странно smile


Но последний скрипт не обязательно шелдур должен вызывать. Сойдет просто запуск скрипта. Но сервером от его имени как бы!!!

Автор: IZ@TOP 2.4.2009, 15:38
Win MK 32, я скорее проникся не самой идеей, а ее ужасающей надуманностью. 

Надеюсь, под сервером Вы понимаете хостинг-площадку, которая работает под управлением *nix систем. Если да, тогда все, что Вам нужно, это написать заявку на крон или создать задание смамостоятельно в панели администрирования Вашего хостинга.

Что такое крон, читайте на http://ru.wikipedia.org/wiki/Crontab.

Автор: Win MK 32 2.4.2009, 23:31
Цитата(IZ@TOP @  2.4.2009,  13:38 Найти цитируемый пост)
Надеюсь, под сервером Вы понимаете хостинг-площадку, которая работает под управлением *nix систем. Если да, тогда все, что Вам нужно, это написать заявку на крон или создать задание смамостоятельно в панели администрирования Вашего хостинга.

Я хостер. Сервер под управлением Windows. В локальной сети.
Крон мне не нужен, ибо не расписание должно инициировать запуск скрипта, а пользователь!!!

Вы мне поможете? :(

Автор: elCreator 3.4.2009, 00:11
т.е., запуск скрипта должен происходить через некоторое время после действия пользователя? тогда 
Код

userDo(){
sleep(SKOLKO_TO_SEKUND);
doingsomething();
}


Автор: Win MK 32 3.4.2009, 05:58
elCreator, нет!!!

Нужно чтобы пользователь дал команду запустить скрипт через другой IP, то есть через сам сервер. Я уже просто не знаю как еще говорить.

Что-то вроде 
Код

shell("W:\server\usr\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php")


Добавлено через 39 секунд
Помогите пожалуйста.

Автор: lelik133 3.4.2009, 08:20
говорить надо так чтобы другие понимали, вам пытаются же объяснить что задача ваша неверна еще на этапе формулировке.
как вы себе представляете php должен обратиться к apache на другом хосте, тот ему должен отдать код, именно исходный код (!), а не сгенерированный вывод как обычно, а php его должен интерпетировать.
ИМХО бред, хотя возможно я не что-то недопонял, т.к. ясно у вас объяснить не получается.

Автор: Win MK 32 5.4.2009, 21:58
Я очень старался объяснить.

Не надо вникать в разумность этой задачи. Мне очень нужно ее решить. Но как?

1) Пользователь загружает run.php
2) <?PHP shell("W:\server\usr\bin\php.exe W:\server\home\192.168.55.1\www\forums\i63\fwrite.php"); ?>
3) На сервере сразуже выполняется fwrite.php

shell - Это я например пишу, эта функция не работает в таком виде, как я написал.

Неужели плохо объяснил?
Неужели это не возможно? Ответьте пожалуйста.

Автор: skyboy 5.4.2009, 22:29
Цитата(Win MK 32 @  3.4.2009,  04:58 Найти цитируемый пост)
запустить скрипт через другой IP, то есть через сам сервер

не, ну, правда, непонятно.
ты можешь более абстрактно, без технических подробностей пояснить?
пока что у меня сложилась такая картина:
есть отдельный сервер(в интернете?), на котором планировщиком ренулярно запускается какой-то скрипт.
есть другой сервер(в локальной сети?), к которому может обратиться пользователь.
надо чтоб пользователь, обратившись ко второму серверу в локальной сети, запустил таким образом тот же скрипт, что запускает планировщик на первой сервере?

Автор: Win MK 32 6.4.2009, 04:17
skyboy, все даже еще проще. Сервер один и он локальный. 
А так, все остально - верно.  smile 

Автор: lelik133 6.4.2009, 08:19
если сервер один и run.php и fwrite.php расположены на нем, то что мешает сделать ссылку с site.ru/run.php  на site.ru/wfrite.php ? или они на разных виртуальных хостах? или  run.php выполняется вообще вне apache, а из консоли?

Автор: skyboy 6.4.2009, 09:16
тогда спрошу ещё раз: что мешает из скрипта, к которому обращается пользователь, делать include скрипта, который содержит некоторое выполняемое регулярно задание? твои слова насчет "траффика" ничего не объясняют и вообще наводят на мысль, что ты не понимаешь, как работает include.

Автор: Win MK 32 6.4.2009, 13:14
Цитата(lelik133 @  6.4.2009,  06:19 Найти цитируемый пост)
если сервер один и run.php и fwrite.php расположены на нем, то что мешает сделать ссылку с site.ru/run.php  на site.ru/wfrite.php ?

Цитата(skyboy @  6.4.2009,  07:16 Найти цитируемый пост)
тогда спрошу ещё раз: что мешает из скрипта, к которому обращается пользователь, делать include скрипта, который содержит некоторое выполняемое регулярно задание?

Если сделать Include, то пользователь вызвавший "родительский" URL на локальнмо сервере заинклюдит скрипт, который будет обращаться в интернет исходящим соединением. А у пользователя гарантированно не будет интернета. Поэтому не сработает.

Вместо этого надо, чтобы сервер сам запустил скрипт fwrite.php, но не по расписанию, а тогда, когда пользователь войдет в run.php.

Добавлено через 2 минуты и 57 секунд
Это возможно?

Автор: bars80080 6.4.2009, 13:24
Цитата(Win MK 32 @  6.4.2009,  13:14 Найти цитируемый пост)
который будет обращаться в интернет исходящим соединением

почему? и почему этого не будет, если: 
Цитата(Win MK 32 @  6.4.2009,  13:14 Найти цитируемый пост)
сервер сам запустил скрипт fwrite.php, но не по расписанию, а тогда, когда пользователь войдет в run.php


Автор: skyboy 6.4.2009, 13:34
Цитата(Win MK 32 @  6.4.2009,  12:14 Найти цитируемый пост)
А у пользователя гарантированно не будет интернета.

это твой второй скрипт, который и по расписанию тоже выполняется, будет обращаться к ресурсам в интернете? если нет, то объясни понятнее, в отрыве от технических подробностей. если да, то при чем тут интернет-доступ клиента, если скрипт будет выполняться на сервере?

Автор: Win MK 32 6.4.2009, 13:57
bars80080, почему будет обращаться в интернет исходящим соединением? Потому что так я сделал... Не понял к чему вопрос...


Цитата(bars80080 @  6.4.2009,  11:24 Найти цитируемый пост)
и почему этого не будет, если: Цитата(Win MK 32 @  6.4.2009,  13:14 )сервер сам запустил скрипт fwrite.php, но не по расписанию, а тогда, когда пользователь войдет в run.php

Это тоже будет... Только если пользователь не имеет доступа в интернет, а сервер имеет, логично поручиить исходящее соединение серверу...

Цитата(skyboy @  6.4.2009,  11:34 Найти цитируемый пост)
это твой второй скрипт, который и по расписанию тоже выполняется, будет обращаться к ресурсам в интернете?

Да.

Добавлено через 3 минуты и 59 секунд
Цитата(skyboy @  6.4.2009,  11:34 Найти цитируемый пост)
если да, то при чем тут интернет-доступ клиента, если скрипт будет выполняться на сервере?

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

На сервере есть интернет. Я могу на сервере в Опере поставить "обновлять каждые 5 минут". Могу сделать эта планировщиком. А мне нужно, чтобы запуском распоряжался тот, кто зайдет в run.php

Автор: Win MK 32 6.4.2009, 14:19
В дали от технических подробностей...

Пользователь без интернета заходит на локлаьный сервер в run.php. При этом в базу данных/файл на локальном сервере поступает информация из fwrite.php из Интернтета. Сервер сам туда стучиться, но по команде из run.php.
Далее уже не важно. Можно например на там же ajax прикрутить уведомление о том, что данные получены из Интернета.


Ну неужели я не смог обяснить что хотел? :((((

Автор: bars80080 6.4.2009, 15:12
Цитата(Win MK 32 @  6.4.2009,  14:19 Найти цитируемый пост)
Ну неужели я не смог обяснить что хотел? :(((( 

 smile видать нет...



Цитата(Win MK 32 @  6.4.2009,  14:19 Найти цитируемый пост)
Пользователь без интернета заходит на локлаьный сервер в run.php. При этом в базу данных/файл на локальном сервере поступает информация из fwrite.php из Интернтета.

одновременно? так есть интернет или нет, если одновременно? и зачем тогда планировщик?


не одновременно? т.е. нужен некий сэйвер запросов и ответов? т.е. я захожу на локальную страницу, посылаю запрос, мне в ответ - соединения нет, обратитесь позже. через некоторое время захожу опять, а мне страница открывается с моим запросом и готовым ответом, потому что пока я бродил где-то, сервер по своей инициативе (через планировщик) извлёк из БД мой запрос, обратился и получил ответ, который и сохранил

так что ли?

Автор: Win MK 32 6.4.2009, 18:57
Цитата(bars80080 @  6.4.2009,  13:12 Найти цитируемый пост)
одновременно? 

Ну с некоторым запазданием наверное. Если одновремнно, то совсем хорошо. Это не главное.
Насчет одновременно - пока пользователь не зайдет в run.php, ничего не произойдет.

Цитата(bars80080 @  6.4.2009,  13:12 Найти цитируемый пост)
так есть интернет или нет, если одновременно?

На сервере есть, у пользователя нет.


Цитата(bars80080 @  6.4.2009,  13:12 Найти цитируемый пост)
и зачем тогда планировщик?не одновременно? т.е. нужен некий сэйвер запросов и ответов? т.е. я захожу на локальную страницу, посылаю запрос, мне в ответ - соединения нет, обратитесь позже. через некоторое время захожу опять, а мне страница открывается с моим запросом и готовым ответом, потому что пока я бродил где-то, сервер по своей инициативе (через планировщик) извлёк из БД мой запрос, обратился и получил ответ, который и сохранил

Никакого планировщика. Надо чтобы пользователь сам отдал приказ выполнить fwrite.php на сервере. Без планировщика!

Автор: lelik133 6.4.2009, 21:11
Цитата

Никакого планировщика. Надо чтобы пользователь сам отдал приказ выполнить fwrite.php на сервере. Без планировщика! 

а как по вашему пользователь "отдает приказ" на выполнение run.php? наверное заходит по ссылке http://vash_server/run.php если так то что тогда мешает дать ему ссылку с http://vash_server/run.php  на http://vash_server/fwrite.php или просто подключить fwrite.php инклюдом? если ваш сревер в локалке и на нем выход в инет есть, какая разница есть он у пользователя или нет, это тут вообще не причем.

Автор: Win MK 32 6.4.2009, 21:24
Цитата(lelik133 @  6.4.2009,  19:11 Найти цитируемый пост)
а как по вашему пользователь "отдает приказ" на выполнение run.php? наверное заходит по ссылке http://vash_server/run.php

Конечно.


Цитата(lelik133 @  6.4.2009,  19:11 Найти цитируемый пост)
 так то что тогда мешает дать ему ссылку с http://vash_server/run.php  на http://vash_server/fwrite.php или просто подключить fwrite.php инклюдом?

Мешает то, что у пользователя не будет интернета для выполнения такого рода кода в fwrite.php:
Код

//...
function tcp_send($board, $data) {
    $answer = "";
    $ip = gethostbyname($board);

    $fp = fsockopen($ip, 80);
    if($fp){
        foreach($data as $row){ // Set HTTP header
            fputs($fp, $row);
        }
        while(!feof($fp)){ // Get an answer
            $answer .= fread($fp, 512);
        }
        fclose($fp);
    }
    return $answer;
} 
$host = "www.yandex.ru";
$useragent = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.2)";

echo dump(tcp_send($host,    
    array(
        "GET /yandsearch?text=show+must+go+on HTTP/1.1",
"Host: yandex.ru",
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language: ru,en-us;q=0.7,en;q=0.3",
"Accept-Encoding: gzip,deflate",
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7",
    )
));
//...

Цитата(lelik133 @  6.4.2009,  19:11 Найти цитируемый пост)
если ваш сревер в локалке и на нем выход в инет есть, какая разница есть он у пользователя или нет, это тут вообще не причем.

Но приведенный мной код не дает результатов, если этот пользователь вызывает этот скрипт не имея соединения с интернетом. Я прав?

Другое дело если мне скажут:
- Админ, у тебя на сервере есть интернет. Запусти скрипт, пожалуйста.

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

Автор: lelik133 6.4.2009, 21:35
да причем тут интернет у пользователя!!!
если скрипт выполняется на сервере, а клиенту-браузеру только отдается сгенерированный код? абсолютно все равно есть у него этот самый интернет или нет. 
такое ощущение что вы понимая основ клиент-сервеной технологии, пытаетесь списать на отсутствие интернета у пользователя свое не умение отладить свой же код. 

Автор: skyboy 6.4.2009, 21:45
Цитата(Win MK 32 @  6.4.2009,  20:24 Найти цитируемый пост)
Но приведенный мной код не дает результатов, если этот пользователь вызывает этот скрипт не имея соединения с интернетом.

PHP выпоняется на сервере! соответственно, если PHP-скирпт инициирует запрос к интернет-ресурсу, то важно, чтоб подключение к интернету было у сервера, а не у клиента. нет, ты не прав. с чего ты вообще это взял?

Автор: Win MK 32 6.4.2009, 22:13
Я это взял с того, что у пользователей с медленным интернетом JS подгружается из Интернета в локальный форум на моем сервере медленно. А у тех, у кого интернета нет и вовсе не загружается.

Добавлено через 4 минуты и 3 секунды
Я буду рад, если вы правы, а я нет.

Как убедиться в том, что сервер отправляет GET/POST исходящий запрос за счет своего трафика? Просто чтобы успокоиться...

Автор: Win MK 32 6.4.2009, 23:59
Спасибо большое за потраченое время и проявленное внимание. Теперь все стало понятно.

Автор: skyboy 7.4.2009, 08:16
(надуманная) проблема решена? smile

Автор: Win MK 32 7.4.2009, 08:59
Да  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)