【问题标题】:Running commandline applications with PHP使用 PHP 运行命令行应用程序
【发布时间】:2014-08-30 10:18:12
【问题描述】:

如何在 linux/Mac 系统上通过 PHP 成功运行命令行应用程序。

我正在使用 mac 并尝试运行 optipng。我已经从这里下载了 optipng

http://sourceforge.net/projects/optipng/files/OptiPNG/optipng-0.7.5/optipng-0.7.5.tar.gz/download?use_mirror=softlayer-sng&download=

下载后,我通过命令行通过CD'ing到下载文件夹安装它,并相应地安装它:

cd path/to/optipng
sudo ./configure
sudo make install

我现在可以运行它并像这样压缩图像:

optipng path/to/example/file.png

一切正常,因此它已安装并在我的系统上运行。

我想通过一个 php 页面运行它,所以我试试这个:

<?php
echo "origional size =". filesize(path/to/example/file.png)."\n";

$compress = shell_exec('optipng path/to/example/file.png');

echo "<pre>$compress</pre>";

echo "new size =". filesize(path/to/example/file.png)."\n";

?>

但它什么也没做。我在这里想念什么?如何成功使用 shell_exec() 或 exec()?

【问题讨论】:

  • var_dump($compress); 在 shell_exec 之后。里面有什么?
  • optipng 需要任何环境变量吗?
  • 它只需要文件的路径。
  • 很可能,您需要指定可执行文件shell_exec('/path/to/optipng /path/to/target/file.png')的完整路径
  • 即使您运行了make install,它可能将其放置在类似/usr/local/bin 的位置,但PHP 可能没有定义$PATH,因此无法找到它。

标签: php command-line


【解决方案1】:
<?php
exec('/dev/null > /tmp/optipng.log');
echo "origional size =". filesize('/tmp/steve-jobs.png')."\n";

shell_exec('/usr/local/bin/optipng -log /tmp/optipng.log /tmp/steve-jobs.png');
$compress = file_get_contents('/tmp/optipng.log');

echo "<pre>$compress</pre>";

echo "new size =". filesize('/tmp/steve-jobs.png')."\n";

?>

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 2020-07-12
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2015-04-19
    相关资源
    最近更新 更多