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
相关产品推荐
相关产品推荐

