PHP shell_exec в Windows не пишет в LPT1

Я переношу небольшой фрагмент кода, который я написал из 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, если мне нужно (если только не поделиться ими и не сделать то, что я сделал здесь).


person didrocks66    schedule 20.06.2014    source источник
comment
system по-прежнему технически является учетной записью в Windows.   -  person Jonathan Kuhn    schedule 21.06.2014
comment
неопределенный тест отладки: exec('echo %USERNAME%') и shell_exec('echo %USERNAME%'), посмотрите, есть ли между ними какие-либо различия. Непонятно как, но кто знает... Иногда Windows может быть странной.   -  person Marc B    schedule 21.06.2014
comment
странно... оба возвращают имя компьютера, за которым следует $   -  person didrocks66    schedule 21.06.2014
comment
@JonathanKuhn: технически это примитив безопасности; в нем отсутствуют некоторые свойства учетной записи (например, без пароля, без даты истечения срока действия, без полного имени). Однако в данном случае это различие не имеет особого значения. :-)   -  person Harry Johnston    schedule 22.06.2014
comment
Вы говорите, что сопоставили USB-принтер с LPT1; такие сопоставления являются локальными для сеанса входа пользователя или, возможно, для сеанса удаленного рабочего стола, я не уверен. В любом случае служба не увидит его, даже если он настроен для работы под той же учетной записью пользователя.   -  person Harry Johnston    schedule 22.06.2014
comment
@HarryJohnston Теперь все ясно, спасибо.   -  person didrocks66    schedule 23.06.2014


Ответы (1)


Вы говорите, что «сопоставили USB-принтер с LPT1»; такие сопоставления являются локальными для сеанса входа пользователя (или, возможно, для сеанса удаленного рабочего стола, я не уверен).

В любом случае служба не увидит его, даже если он настроен для работы под той же учетной записью пользователя. Каждая служба получает отдельный сеанс входа в систему, а в Windows Vista в сеансе удаленного рабочего стола 0 работают только службы.

person Harry Johnston    schedule 23.06.2014