PHP.SU

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


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

> Описание: Некоторые команды exec выполняет, а некоторые нет. при этом в консоли выполняются все.
eos12
Отправлено: 02 Июля, 2016 - 14:42:08
Post Id


Новичок


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


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




Добрый день
система DEBIAN. установлены конвертеры xls2csv и xlsx2csv (из консоли работают корректно на 100%). Но из php
exec("xls2csv /dir1/file1.xls > /dir2/file1.csv"); отрабатывается нормально
exec("xlsx2csv /dir1/file2.xlsx /dir2/file2.csv"); не дает результата.
при этом если в консоли запустить xlsx2csv /dir1/file2.xlsx /dir2/file2.csv то все нормально. Права на папки 777. Пробовал все аналоги (shell_exec, system...) - та же хрень.

Пока ковырялся, заметил что даже не все классические примеры работают:
<?php
echo "тестируем ls<br>";
echo exec('ls', $res) . '<br>';
var_dump($res);

unset($res);
echo "<br><br>тестируем whoami<br>";
echo exec('whoami', $res);
var_dump($res);
?>
результат:
тестируем ls
z_arch
array(22) { [0]=> string(17) "00_print_help.php" [1]=> string(9) "0_tst.php" [2]=>
...
[20]=> string(3) "tmp" [21]=> string(6) "z_arch" }

тестируем whoami
array(0) { }

в консоли естесно whoami работает. Подозреваю, что если whoami вылечить, то и исходная проблема снимется...

Кто-нить сталкивался с таким поведением exec?
 
 Top
armancho7777777 Супермодератор
Отправлено: 02 Июля, 2016 - 21:12:59
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




PHP:
скопировать код в буфер обмена
  1. exec('echo $PATH && which xls2csv', $res);
  2. var_dump($res);

Что выводит ?

И какой результат в консоли?

(Отредактировано автором: 02 Июля, 2016 - 21:15:58)



-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
eos12
Отправлено: 03 Июля, 2016 - 07:23:17
Post Id


Новичок


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


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




armancho7777777 пишет:
PHP:
скопировать код в буфер обмена
  1. exec('echo $PATH && which xls2csv', $res);
  2. var_dump($res);

Что выводит ?

array(2) { [0]=> string(60) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" [1]=> string(16) "/usr/bin/xls2csv" }

armancho7777777 пишет:

И какой результат в консоли?

/usr/bin/xls2csv

с xlsx2csv результат аналогичный
array(2) { [0]=> string(60) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" [1]=> string(17) "/usr/bin/xlsx2csv" }
/usr/bin/xlsx2csv
 
 Top
andrewkard
Отправлено: 03 Июля, 2016 - 10:48:51
Post Id


Участник


Покинул форум
Сообщений всего: 1088
Дата рег-ции: Нояб. 2014  


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




eos12 пишет:
exec("xls2csv /dir1/file1.xls > /dir2/file1.csv"); отрабатывается нормально
exec("xlsx2csv /dir1/file2.xlsx /dir2/file2.csv"); не дает результата


а наоборот?
 
 Top
eos12
Отправлено: 03 Июля, 2016 - 12:12:31
Post Id


Новичок


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


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




andrewkard пишет:
eos12 пишет:
exec("xls2csv /dir1/file1.xls > /dir2/file1.csv"); отрабатывается нормально
exec("xlsx2csv /dir1/file2.xlsx /dir2/file2.csv"); не дает результата


а наоборот?

Что наоборот? Не врублюсь что можно сделать наоборот.
если xls2csv 1.xlsx 1.csv то говорит is not OLE file or Error
что вполне ожидаемо.

Господа, а какой у вас на debian результат выполнения
echo exec('whoami', $res);
var_dump($res);
?
Я подозреваю, что если разобраться в чем здесь собака порылась, то и с конвертерами будет понятно...
Я находил где-то похожую тему. Что половина команд нормально отрабатывалась, а вторая глючила. Но там топикстартер устал разбираться и закрыл тему.

(Отредактировано автором: 03 Июля, 2016 - 12:14:58)

 
 Top
armancho7777777 Супермодератор
Отправлено: 03 Июля, 2016 - 14:56:20
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




PHP:
скопировать код в буфер обмена
  1. exec("xlsx2csv /dir1/file2.xlsx /dir2/file2.csv", $out, $res);
  2. var_dump($out, $res);

Что выводит?


-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
eos12
Отправлено: 03 Июля, 2016 - 15:30:05
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. exec("xlsx2csv /dir1/file2.xlsx /dir2/file2.csv", $out, $res);
  2. var_dump($out, $res);

array(0) { } int(1)
PHP:
скопировать код в буфер обмена
  1. exec("xlsx2csv -h", $out, $res);
  2. var_dump($out, $res);

array(0) { } int(1)

в консоли xlsx2csv -h выводит help как и положено

(Отредактировано автором: 03 Июля, 2016 - 15:37:24)

 
 Top
armancho7777777 Супермодератор
Отправлено: 03 Июля, 2016 - 21:21:25
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




eos12 пишет:
int(1)

Команда завершается с ошибкой.
(Добавление)
Файлы существуют?
Как указываете путь?
Кто владелец директории куда пишется файл и от чьего имени выполняется команда ?

(Отредактировано автором: 03 Июля, 2016 - 21:22:17)



-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
eos12
Отправлено: 04 Июля, 2016 - 07:32:27
Post Id


Новичок


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


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




Команда завершается с ошибкой.
-- я не сомневаюсь в этом )))
Файлы существуют?
Как указываете путь?
Кто владелец директории куда пишется файл и от чьего имени выполняется команда ?

чтоб не быть голословным:
PHP:
скопировать код в буфер обмена
  1.  
  2. exec("ls -l /var/tst", $out, $res);
  3. echo 'ls -l /var/tst -> ';
  4. var_dump($out, $res);
  5.  
  6. unset($out, $res);
  7. exec("ls -l /var/tst/files", $out, $res);
  8. echo '<br>ls -l /var/tst/files -> ';
  9. var_dump($out, $res);
  10.  
  11. unset($out, $res);
  12. exec("xlsx2csv /var/tst/files/1.xlsx /var/tst/files/1.csv", $out, $res);
  13. echo '<br>xlsx2csv /var/tst/files/1.xlsx /var/tst/files/1.csv -> ';
  14. var_dump($out, $res);
  15.  
  16. unset($out, $res);
  17. echo '<br>whoami -> ';
  18. exec("whoami", $out, $res);
  19. var_dump($out, $res);
  20.  


ls -l /var/tst -> array(2) { [0]=> string(7) "total 4" [1]=> string(48) "drwxrwxrwx 2 33 www-data 4096 Jul 4 06:12 files" } int(0)
ls -l /var/tst/files -> array(2) { [0]=> string(10) "total 4776" [1]=> string(52) "-rw-rw-rw- 1 33 www-data 4888658 Jun 30 18:58 1.xlsx" } int(0)
xlsx2csv /var/tst/files/1.xlsx /var/tst/files/1.csv -> array(0) { } int(1)
whoami -> array(0) { } int(1)

про whoami я писал уже - не работает через exec. Как достоверно узнать под кем выполняется php из по апача?
top показывает, что apache крутится из под www-data.
жирное выделение копирую в консоль - делается 1.csv.
(Добавление)
Народ, кто-нибудь может подсказать в чем принципиальное отличие LS и WHOAMI?
Почему первая отрабатывается через exec, а вторая нет!!!???
Еще раз выскажу предположение, что косяки whoami и xlsx2csv имеют общие корни. Но WHOAMI есть у всех, что нельзя сказать про xlsx2csv
 
 Top
armancho7777777 Супермодератор
Отправлено: 04 Июля, 2016 - 12:53:48
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




В логи загляните.


-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
eos12
Отправлено: 04 Июля, 2016 - 17:32:27
Post Id


Новичок


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


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




что-то я этого никогда не делал ))
в error.log ничего нет
а в auth.log есть
Jul 2 12:27:07 Debian-82-jessie-64-LAMP sudo: pam_unix(sudo:auth): conversation failed
Jul 2 12:27:07 Debian-82-jessie-64-LAMP sudo: pam_unix(sudo:auth): auth could not identify password for [www-data]
Jul 2 12:27:07 Debian-82-jessie-64-LAMP sudo: www-data : user NOT in sudoers ; TTY=unknown ; PWD=/var/www/rtt.priv ; USER=root ; COMMAND=/usr/bin/xlsx2csv /var/tst/files/1.xlsx /var/tst/files/1.csv

понимаю что собака порылась именно здесь, но нихрена не понимаю.
Для проверки добавил www-data в sudorers - тот же результат.
В логи посмотреть не могу - они похоже с запозданием сбрасываются на диск(самые свежие от вчерашнего числа).

чо делать то?
 
 Top
armancho7777777 Супермодератор
Отправлено: 04 Июля, 2016 - 23:21:51
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




Я имел в виду логи утилиты этой, если они есть.
Можно ещё глянуть в /var/log/syslog


-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
eos12
Отправлено: 05 Июля, 2016 - 15:07:26
Post Id


Новичок


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


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




armancho7777777 пишет:
Я имел в виду логи утилиты этой, если они есть.
Можно ещё глянуть в /var/log/syslog

Я по всему диску шарил - нет вхождений кроме этих. И эти относятся похоже к тому периоду, когда я разрешения на папку 777 еще не выставил.

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

я не шарю в дебиан, но мне кажется, что проблема в чем-то банальном. Учитывая, что штатная утилита whoami глючит.
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Июля, 2016 - 17:51:08
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




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

Ну так это потому, что - пальцем в небо )
Вы же за консолью сидите, а не я )
(Добавление)
По любому есть какие-нибудь логи.
Пройдитесь grep-ом.
CODE (text):
скопировать код в буфер обмена
  1. grep -rn 'xlsx2csv' /var/log

CODE (text):
скопировать код в буфер обмена
  1. grep -rn '1.xlsx' /var/log

(Отредактировано автором: 05 Июля, 2016 - 17:56:49)



-----
Болтовня ничего не стоит. Покажите мне код.
-Linus Torvalds
 
 Top
armancho7777777 Супермодератор
Отправлено: 12 Октября, 2016 - 10:18:47
Post Id



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


Покинул форум
Сообщений всего: 4646
Дата рег-ции: Февр. 2011  
Откуда: Иркутск, Россия


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




Сам столкнулся с этой проблемой.
Решение - выставить переменную окружения.

А для получения текста ошибки (2>&1):
PHP:
скопировать код в буфер обмена
  1. exec("xlsx2csv ~/file.xlsx ~/file.csv 2>&1", $output, $errno);
  2.  
  3. if($errno) {
  4.     $msg = join("<br>\n", $output);
  5.     throw new RuntimeException($msg);
  6. }

(Отредактировано автором: 12 Октября, 2016 - 11:07:53)



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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB