从 PHP 调用“转换”命令时权限被拒绝


Permission denied while calling 'convert' command from PHP

我正在尝试使用PHP的ImageMagick。我在虚拟的 CentOS 服务器上安装了 ImageMagick 和 PHP 扩展。从 bash 执行 convert 命令按预期工作。如果我用内容制作一个 PHP 文件

<?php exec('convert /home/vagrant/test/image.jpg -resize 200x200 /home/vagrant/test/image_converted.jpg'); ?>

并使用命令行在 PHP 中调用它php convert.php它也可以工作。但是,如果我启动我的 Apache 服务器并尝试通过浏览器访问页面,它会返回错误:

convert: unable to open image `/home/vagrant/test/image.jpg': Permission denied @ blob.c/OpenBlob/2480.
convert: missing an image filename `/home/vagrant/test/image_converted.jpg' @ convert.c/ConvertImageCommand/2800.

所以,我认为这可能是关于权限的。调用ps aux | egrep '(apache|httpd)'显示了名为 apache 的用户的进程,所以我假设这是服务器。所以我尝试将所有权更改为该用户

sudo chown -R apache /home/vagrant/test/

再次,致电网站我收到错误消息。然后我尝试授予所有用户完全访问权限

sudo chmod -R 777 /home/vagrant/test/
-

-> drwxrwxrwx. 2 apache vagrant 4096 Dec 21 16:56 test

同样,发生了相同的错误。请问我做错了什么?

您只需更改子目录的权限。如果 apache 没有足够的权限来获取 home 或 home/vargrant,您将无法访问该文件。

您可以使用 sudo 检查用户是否具有足够的权限:

sudo -u apache cp /home/vagrant/test/image.jpg /home/vagrant/test/image_converted.jpg