почему рабочий процесс Альфреда не может получить выход shell_exec (функция php)? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь получить изображение из буфера обмена и сохранить его в файл изображения с помощью PHP, к сожалению, PHP не может этого сделать, поэтому я устанавливаю pngpaste на свой Mac и использую php Функция shell_exec() / exec() / popen() для выполнения команды pngpaste для выполнения этой работы.

Сначала я устанавливаю pngpaste на свой Mac:

brew install pngpaste

Затем я пытаюсь скопировать изображение или сделать снимок экрана в буфер обмена, после чего я запускаю следующую команду:

pngpaste ./screenshot.png

работает отлично! screenshot.png успешно сгенерирован.

Затем я пытаюсь скопировать какой-нибудь открытый текст в буфер обмена (что означает, что в буфере обмена больше нет изображения), и снова выполнить команду, приведенную выше, она вернется, как показано на следующем рисунке (что является правильным выводом, поскольку нет изображения в буфере обмена): enter image description here

Затем я пытаюсь выполнить вышеуказанную команду с помощью PHP. Я создаю index.php, код внутри index.php довольно прост:

<?php
    $command = '/usr/local/bin/pngpaste ./screenshot.png';
    $output = shell_exec($command);

    echo $output;

Тогда я бегу:

php index.php

Это тоже работает нормально, если я сделаю снимок экрана в буфер обмена, будет также создан screenshot.png, и если в буфере обмена нет изображения, он возвращает точно некоторые слова в качестве выполняемой команды напрямую.

enter image description here

Все выглядит хорошо, теперь я собираюсь использовать Alfred. Я создал рабочий процесс: enter image description here

Затем дважды щелкните Run Script и введите команду в поле → щелкните save: enter image description here

Как видите, я установил ярлык рабочего процесса на control+command+v, что означает, что когда я нажимаю control+command+v, Альфред выполняет следующую команду:

/usr/local/bin/php /Users/bruce/Downloads/index.php

Затем я делаю скриншот в буфер обмена и нажимаю ярлык control+command+v, угадайте, что произойдет? Правильно! screenshot.png создается снова, он тоже отлично работает.

А потом я пытаюсь нажать control+command+v, когда в буфере обмена нет изображения, должно быть возвращено pngpaste: No image data found on the clipboard, or could not convert! верно? Но угадайте, что, вообще ничего, я не могу получить $output, возвращаемый shell_exec(), после этого я попытался exec() / popen(), но это то же самое, никакого вывода вообще.

Я попытался отредактировать код следующим образом и нажать ярлык control+command+v:

<?php
    $command = '/usr/local/bin/pngpaste ./screenshot.jpeg';
    $output = shell_exec($command);

    $output = 'this is a test ouput' . output;
    echo $output;

Альфред вернул this is a test ouput, что означает, что переменная $output равна NULL или empty string, но она не должна быть пустой, она должна быть возвращена pngpaste: No image data found on the clipboard, or could not convert!, когда в буфере обмена нет изображения.

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

...