2010-06-30 197 views
0

我想将tif文件的文件夹转换为jpeg,以便它们可以显示在我的网站上。我目前的方法是行不通的。我写了一个Perl脚本将tiff文件从php转换为jpg

#!/usr/bin/perl 

opendir(DIR, $ARGV[0]); 
@files = readdir(DIR); 
closedir(DIR); 

foreach $file (@files){ 
if($file =~ /(.*?)\.tif/){ 
    print "converting $file\n"; 
    `convert -auto-level -depth 12 -type grayscale $ARGV[0]$file $ARGV[1]$1.jpg`; 
} 
} 

但是,这永远不会进入for循环,因为opendir失败。该文件夹确实存在。

我打电话给exec(“perl test.pl arg1 arg2”);在php

这是我应该怎么做,因为它不工作?

而且我给需要访问或写于chmod 777个

感谢

+0

您是使用相对路径还是绝对路径?如果你从shell调用它,转换命令是否正确工作?你可以很容易地重写相同的代码在PHP – Ivan 2010-06-30 15:29:51

+0

什么是确切的路径? – 2010-06-30 15:34:18

+1

总是测试打开结果: opendir(DIR,$ ARGV [0])或死“不能打开'$ ARGV [0]':$!”; – Toto 2010-06-30 15:38:23

回答

6

首先的几乎一切,你应该总是有这两条线在每个脚本和模块:

use strict; 
use warnings; 

这些行会给你很多错误和线索,会告诉你你错过了什么。

其次,您需要检查opendir命令的返回值,因为如果无法打开目录(例如,如果它不存在),它会返回错误。变量$!包含最新的错误消息。如果您打印在你试图打开错误消息的确切的文件名,你可以看到,如果你的文件的说明是不正确的:

opendir (my $dir, $ARGV[0]) or die "Cannot open $ARGV[0]: $!"; 
my @files = readdir($dir); 
closedir($dir); 

如果目录规范是相对的,而你是在错误的目录,你可以用chdir更改目录。

opendir命令的规格在perldoc -f opendir。你可以阅读关于perldoc perlvar中的特殊变量。