Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не могу запустить exe через php на windows server 2008 r2.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
gadalov
Отправлено: 12 Июня, 2013 - 16:29:07
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Здравствуйте. Прошу помощи от Вас. Стоит Windows Server 2008 R2, php, mysql, IIS веб-сервер. Пытаюсь через php документ запустить файл exe, но увы ничего не происходит (должен создаться файл output.txt). У меня есть обработчик на php, который отправляет файл на сервер (в моём случаи exe), и выполняет его. Как выше сказано результата нет. Я изначально закачал файл exe на сервер и указал его путь в php документе. Файл закачивается моментально, но тот exe, который я указал не выполняется. Общий доступ к папке с exe-шником есть. Вот код этого обработчика:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(isset($_POST['upload'])){
  3.    
  4.     $whitelist = array(".exe",".bat");        
  5.     $data = array();
  6.     $error = true;
  7.    
  8.  
  9.     foreach  ($whitelist as  $item) {
  10.         if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false;
  11.     }
  12.  
  13.     if(!$error) {
  14.                  
  15.         $folder =  'upload/prog/';    //директория в которую будет загружен файл
  16.        
  17.         $uploadedFile =  $folder.basename($_FILES['userfile']['name']);
  18.                
  19.         if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
  20.        
  21.             if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){
  22.        
  23.                 $data = $_FILES['userfile'];
  24.             }
  25.             else {    
  26.                 $data['errors'] = "Во время загрузки файла произошла ошибка.";
  27.             }
  28.         }
  29.         else {    
  30.             $data['errors'] = "Файл решения не загружен.";
  31.         }
  32.     }
  33.     else{
  34.        
  35.         $data['errors'] = 'Вы загружаете неправильный тип файла. Для проверки задачи необходим файл формата .exe';
  36.     }
  37.    
  38.    
  39.     $res = '<script type="text/javascript">';
  40.     $res .= "var data = new Object;";
  41.     foreach($data as $key => $value){
  42.         $res .= 'data.'.$key.' = "'.$value.'";';
  43.     }
  44.     $res .= 'window.parent.handleResponse(data);';
  45.     $res .= "</script>";
  46.    
  47.     echo $res;
  48.  
  49. }
  50. else{
  51.     die("ERROR");
  52. }
  53.  
  54. exec("upload/prog/program21.exe"); //запуск exe-шника  
  55.  
  56.  
  57. ?>
 
 Top
DelphinPRO
Отправлено: 12 Июня, 2013 - 17:07:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




gadalov пишет:
exec("upload/prog/program21.exe");

я так думаю нужно указывать полный путь, начиная с буквы диска


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 12 Июня, 2013 - 17:11:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




gadalov пишет:
должен создаться файл output.txt

Где? Внимание, вопрос с подвохом.

PS: 39-45 строки - о json не слышали?


-----
PostgreSQL DBA
 
 Top
gadalov
Отправлено: 12 Июня, 2013 - 18:29:15
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Мелкий пишет:
gadalov пишет:
должен создаться файл output.txt

Где? Внимание, вопрос с подвохом.

PS: 39-45 строки - о json не слышали?


Файл output.txt создаётся самим exe-шником, т.е. он выполняется и создаёт текстовый файл в папке где он и запускается. P.S. Паскаль, операции ввода-вывода.

(Отредактировано автором: 12 Июня, 2013 - 18:47:00)

 
 Top
Мелкий Супермодератор
Отправлено: 12 Июня, 2013 - 18:51:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




gadalov пишет:
в папке где он и запускается

Вы в этом уверены? Что этот бинарник нормально переопределяет рабочий каталог или корректно определяет своё местоположение в иерархии файловой системы?


-----
PostgreSQL DBA
 
 Top
gadalov
Отправлено: 12 Июня, 2013 - 19:03:36
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Мелкий пишет:
gadalov пишет:
в папке где он и запускается

Вы в этом уверены? Что этот бинарник нормально переопределяет рабочий каталог или корректно определяет своё местоположение в иерархии файловой системы?


Ещё раз объясню, если вы запускаете этот exe-шник самостоятельно, то он создаёт текстовый файл без помощи обработчика. Я хочу добится того, чтобы этот обработчик запускал exe-шник с нажатия кнопки (использую форму на HTML). См. код обработчика выше.

(Отредактировано автором: 12 Июня, 2013 - 19:07:30)

 
 Top
Мелкий Супермодератор
Отправлено: 12 Июня, 2013 - 19:09:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ещё раз спрошу:
Этот бинарник переопределяет рабочий каталог? Или же этот бинарник определяет собственное местоположение и пишет файл с учётом оного? Или тупым относительным адресом, закономерно оказываясь черти где, будучи вызванным черти откуда же?

CODE (cmd):
скопировать код в буфер обмена
  1. cd "директория, где расположен ваш скрипт" # скрипт, а не бинарник!
  2. ./upload/prog/program21.exe

Что будет?


-----
PostgreSQL DBA
 
 Top
gadalov
Отправлено: 12 Июня, 2013 - 19:11:52
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Мелкий пишет:
Ещё раз спрошу:
Этот бинарник переопределяет рабочий каталог? Или же этот бинарник определяет собственное местоположение и пишет файл с учётом оного? Или тупым относительным адресом, закономерно оказываясь черти где, будучи вызванным черти откуда же?

CODE (cmd):
скопировать код в буфер обмена
  1. cd "директория, где расположен ваш скрипт" # скрипт, а не бинарник!
  2. ./upload/prog/program21.exe

Что будет?


А можно на более понятном языке? Радость Я просто Вас не понимаю.

Вот код HTML, который вызывает скрипт.

CODE (html):
скопировать код в буфер обмена
  1. <form action="upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();"> <input type="file" id="userfile" name="userfile" /> <input type="submit" name="upload" id="upload" value=" Загрузить решение.. " /> </form>
  2. <p> </p>
  3. <div id="res"></div>
  4. <p><iframe id="hiddenframe" name="hiddenframe" style="width: 0px; height: 0px; border: 0px;"></iframe></p>

(Отредактировано автором: 12 Июня, 2013 - 19:15:51)

 
 Top
DelphinPRO
Отправлено: 12 Июня, 2013 - 19:55:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




gadalov пишет:
если вы запускаете этот exe-шник самостоятельно, то он создаёт текстовый файл
когда вы запускаете файл самостоятельно, он получает текущий каталог тот из которого его запустили. Если запустить файл скриптом из другого каталога, он получит в качестве текущего именно тот другой каталог. и если программа на паскале написана без определения каталога своего расположения, то она создаст файл в том самом текущем каталоге, из которого была запущена.
т.е. более коректно будет в скрипте сначала установить текущим каталогом тот, в котором лежит экзешник, а потом его запускать.

PHP:
скопировать код в буфер обмена
  1. chdir('каталог-с-экзешником');
  2. exec('каталог-с-экзешником\экзешник.exe');

На случай, если программа на паскале написана не совсем корректно с точки зрения определения своего каталога.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
gadalov
Отправлено: 12 Июня, 2013 - 22:45:50
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
gadalov пишет:
если вы запускаете этот exe-шник самостоятельно, то он создаёт текстовый файл
когда вы запускаете файл самостоятельно, он получает текущий каталог тот из которого его запустили. Если запустить файл скриптом из другого каталога, он получит в качестве текущего именно тот другой каталог. и если программа на паскале написана без определения каталога своего расположения, то она создаст файл в том самом текущем каталоге, из которого была запущена.
т.е. более коректно будет в скрипте сначала установить текущим каталогом тот, в котором лежит экзешник, а потом его запускать.

PHP:
скопировать код в буфер обмена
  1. chdir('каталог-с-экзешником');
  2. exec('каталог-с-экзешником\экзешник.exe');

На случай, если программа на паскале написана не совсем корректно с точки зрения определения своего каталога.


Эхх... Всё равно, без результата.. Вот как указал:

PHP:
скопировать код в буфер обмена
  1.  
  2. chdir('http://localhost/mod/page/upload/prog/');
  3. exec('http://localhost/mod/page/upload/prog/program21.exe');
  4.  
 
 Top
DelphinPRO
Отправлено: 12 Июня, 2013 - 22:59:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




яя выше по-моему ясно написал - полный путь, начиная с буквы диска
путь в файловой системе! а не URL

т.е. примерно так
C:\server\localhost\mod\page\upload\prog\
выделенная часть - это физическая папка на компьютере, где у вас располагаются файлы сайта.

(Отредактировано автором: 12 Июня, 2013 - 23:01:16)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
gadalov
Отправлено: 13 Июня, 2013 - 08:33:04
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
яя выше по-моему ясно написал - полный путь, начиная с буквы диска
путь в файловой системе! а не URL

т.е. примерно так
C:\server\localhost\mod\page\upload\prog\
выделенная часть - это физическая папка на компьютере, где у вас располагаются файлы сайта.


Сделал всё как Вы сказали, в общем результата опять нет, и перестал работать тот скрипт, который загружал файл на сервер из-за строчки


Вот как полностью получилось:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. if(isset($_POST['upload'])){
  5.    
  6.     $whitelist = array(".exe",".bat");        
  7.     $data = array();
  8.     $error = true;
  9.    
  10.  
  11.     foreach  ($whitelist as  $item) {
  12.         if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false;
  13.     }
  14.  
  15.     if(!$error) {
  16.                  
  17.         $folder =  'upload/prog/';//директория в которую будет загружен файл
  18.        
  19.         $uploadedFile =  $folder.basename($_FILES['userfile']['name']);
  20.                
  21.         if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
  22.        
  23.             if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){
  24.        
  25.                 $data = $_FILES['userfile'];
  26.             }
  27.             else {    
  28.                 $data['errors'] = "Во время загрузки файла произошла ошибка.";
  29.             }
  30.         }
  31.         else {    
  32.             $data['errors'] = "Файл решения не загружен.";
  33.         }
  34.     }
  35.     else{
  36.        
  37.         $data['errors'] = 'Вы загружаете неправильный тип файла. Для проверки задачи необходим файл формата .exe';
  38.     }
  39.    
  40.    
  41.     $res = '<script type="text/javascript">';
  42.     $res .= "var data = new Object;";
  43.     foreach($data as $key => $value){
  44.         $res .= 'data.'.$key.' = "'.$value.'";';
  45.     }
  46.     $res .= 'window.parent.handleResponse(data);';
  47.     $res .= "</script>";
  48.    
  49.     echo $res;
  50.  
  51. }
  52. else{
  53.     die("ERROR");
  54. }
  55.  
  56. chdir('E:\web\mod\page\upload\prog\');
  57. exec('E:\web\mod\page\upload\prog\program21.exe');
  58.  
  59.  
  60. ?>
  61.  


Что посоветуете?
 
 Top
DelphinPRO
Отправлено: 13 Июня, 2013 - 08:40:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




gadalov пишет:
Что посоветуете?
екли пакли, это просто ошибка синтаксиса... Улыбка Обратный слэш в строках - управляющий символ, его экранировать надо.

PHP:
скопировать код в буфер обмена
  1. chdir('E:\\web\\mod\\page\\upload\\prog\\');
  2. exec('E:\\web\\mod\\page\\upload\\prog\\program21.exe');


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
gadalov
Отправлено: 13 Июня, 2013 - 08:50:27
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
gadalov пишет:
Что посоветуете?
екли пакли, это просто ошибка синтаксиса... Улыбка Обратный слэш в строках - управляющий символ, его экранировать надо.

PHP:
скопировать код в буфер обмена
  1. chdir('E:\\web\\mod\\page\\upload\\prog\\');
  2. exec('E:\\web\\mod\\page\\upload\\prog\\program21.exe');


Как странноУлыбка Я написал как Вы, скрипт начал запускаться, а программа до сих пор нет..
(Добавление)
DelphinPRO пишет:
gadalov пишет:
Что посоветуете?
екли пакли, это просто ошибка синтаксиса... Улыбка Обратный слэш в строках - управляющий символ, его экранировать надо.

PHP:
скопировать код в буфер обмена
  1. chdir('E:\\web\\mod\\page\\upload\\prog\\');
  2. exec('E:\\web\\mod\\page\\upload\\prog\\program21.exe');


Я так думаю проблема в доступе..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Операционная система и системные вызовы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB