Я переношу небольшой фрагмент кода, который я написал из Linux, в Windows, мне в основном нужно отправить код ZPL на принтер Zebra, подключенный через USB. Никаких проблем с shell_exec и lp в linux.
В Windows я сопоставил usb-принтер с LPT1, и здесь нет проблем, и если я повторяю свой код (или копирую файл) на LPT1 (в cmd), все работает. Нравиться:
copy C:\zplcode.txt LPT1 *or* echo "zplcode here" > LPT1
мой материал печатается.
Теперь, как я уже сказал, это работает безупречно в cmd, но если я использую shell_exec, это не работает. Я думал, что shell_exec вообще не работает, но он работает. На самом деле echo shell_exec('ver')
возвращает мою версию Windows. И где copy C:\zplcode.txt LPT1
возвращает «1 файл скопирован» в cmd, echo shell_exec('copy c:\zplcode.txt LPT1')
возвращает «0 файлов скопировано». Это также происходит, если я пытаюсь скопировать любой нормальный файл или повторить их.
Это похоже на то, что у apache нет прав на запись или что-то в этом роде, но все же это не как в Linux, где у него есть собственный пользователь, это служба, работающая как система ... вы можете помочь? Спасибо
edit2: я решил свою проблему, отключив UAC и заставив службу apache работать от имени администратора, а затем выполнив shell_exec("echo zplcode here > ///localhost//printer")
, где принтер — это имя, которое я присвоил своему принтеру при совместном использовании. Я предполагаю, что проблема все еще существует, так как я не мог отправить данные на LPT1, если мне нужно (если только не поделиться ими и не сделать то, что я сделал здесь).
system
по-прежнему технически является учетной записью в Windows. - person Jonathan Kuhn   schedule 21.06.2014exec('echo %USERNAME%')
иshell_exec('echo %USERNAME%')
, посмотрите, есть ли между ними какие-либо различия. Непонятно как, но кто знает... Иногда Windows может быть странной. - person Marc B   schedule 21.06.2014