将linux shell脚本命令转换为php

时间:2015-10-07 10:29:17

标签: php linux shell

我面临一个可能有一个简单解决方案的问题,但由于我不是一个PHP专家,我找不到它。我通常这样做,我必须从php调用一个shell命令:

cmd = "convert file.pdf image.jpg";
shell_exec($cmd);

但是现在我有一个在shell上工作的命令,我不能让它从php运行,所以我认为可能有一种方法来发出相同的命令但是用php语言,

命令:

for i in $(seq --format=%3.f 0 $nf); do echo doing OCR on page $i; tesseract '$imgdir/$imgdir-$i.ppm' '$imgdir-$i' -l eng; done

我的php尝试:

<?php
$imgdir = "1987_3";
$nf = count(new GlobIterator('filesup/'.$imgdir.'/*'));
$cmd = "for i in $(seq --format=%3.f 0 $nf); do echo doing OCR on page $i; tesseract '$imgdir/$imgdir-$i.ppm' '$imgdir-$i' -l eng; done"
shell_exec($cmd);
?>

我得到的是:

PHP Notice:  Undefined variable: i in count.php on line 7

建议非常受欢迎...谢谢

更新

我已经从我标记为可能重复的那个问题中读到了问题,而我从中得知的是我的&#34;我&#34;必须有一个引用,对于shell命令,它有,但是从php执行时它不起作用。

关于这一点,我也尝试了这个不成功:

<?php
$imgdir = "1987_3";
$nf = count(new GlobIterator('filesup/'.$imgdir.'/*'));
$cmd ="seq --format=%3.f 0 $nf";
$i = shell_exec($cmd);
$cmd = "tesseract 'filesup/$imgdir/$imgdir-$i.jpg' 'filesup/$imgdir/$imgdir-$i' -l eng; done";
shell_exec($cmd);
?>

1 个答案:

答案 0 :(得分:3)

PHP 将使用双引号评估字符串中的所有变量,例如:

<?php
    $i=5;
    echo "Your i is: $i";
?>

输出Your i is: 5

如果您想避免这种行为,请使用简单的引用:

<?php
    $i=5;
    echo 'Your i is: $i';
?>

输出Your i is: $i

像这样更新你的代码:

<?php
    $imgdir = "1987_3";
    $nf = count(new GlobIterator('filesup/'.$imgdir.'/*'));
    $cmd = 'for i in $(seq --format=%3.f 0 $nf); do echo doing OCR on page $i; tesseract \'' . $imgdir/$imgdir . '-$i.ppm\' \'' . $imgdir . '-$i\' -l eng; done';    
    shell_exec($cmd);
?>