You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP环境下exiftool基础使用问题求助

解决PHP调用ExifTool返回空数组的问题

让我帮你一步步排查并解决这个问题,你的代码里确实存在几个基础问题,我们逐个拆解:

1. 纠正PHP脚本的Shebang错误

你在PHP脚本开头写了#!/usr/bin/exiftool,这是完全错误的——Shebang是用来告诉系统用什么解释器来执行当前脚本,这是PHP脚本,所以应该写成:

#!/usr/bin/php

如果你的PHP解释器路径不是/usr/bin/php,可以用which php命令在终端确认正确路径。

2. 确保ExifTool的调用路径正确

你提到Perl模块安装在/bin/exiftool目录,那ExifTool的可执行文件大概率是这个目录下的exiftool脚本,所以调用时必须指定完整路径,不能只写exiftool(系统可能找不到这个命令)。

3. 修正Eval的用法逻辑

你当前的eval写法有语法问题,ExifTool的-php参数会直接输出PHP数组的代码,正确的做法是先获取命令输出,再通过eval把输出转为PHP变量,还要注意转义$符号避免PHP提前解析。

4. 确保图片路径正确且有权限

不要用相对路径test.jpg,而是使用绝对路径(比如/bin/exiftool/test.jpg),同时要确认PHP运行的用户(比如www-data)对该图片有读取权限(你有root权限的话,可以用chmod o+r /bin/exiftool/test.jpg临时开放权限测试)。

完整修正后的代码

#!/usr/bin/php
<?php
// 指定ExifTool和图片的绝对路径
$exiftoolCmd = '/bin/exiftool/exiftool';
$imagePath = '/bin/exiftool/test.jpg';

// 执行命令并捕获输出,同时捕获错误信息
$exifOutput = `$exiftoolCmd -php -q $imagePath 2>&1`;

if (empty($exifOutput)) {
    echo "Error: ExifTool returned no output. Check if the image exists or has EXIF data.";
} else {
    // 转义$符号后执行eval,把输出转为数组
    eval("\$exifArray = $exifOutput;");
    print_r($exifArray);
}
?>

额外排查步骤

  • 先在终端直接执行命令:/bin/exiftool/exiftool -php -q /bin/exiftool/test.jpg,看看是否有正常的PHP数组输出。如果终端都没有输出,说明图片本身没有EXIF数据,或者ExifTool安装有问题。
  • 检查PHP是否禁用了shell_exec(反引号语法本质是调用shell_exec):可以在脚本里添加var_dump(function_exists('shell_exec'));,如果返回false,需要修改php.ini解除禁用。

内容的提问来源于stack exchange,提问作者yello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:33:25