PHP readdir():3不是有效的目录资源

时间:2010-12-31 20:47:53

标签: php

    <?php

function convert(){

 //enable error reporting for debugging
 error_reporting(E_ALL | E_STRICT);

 //convert pdf's to html using payroll.sh script and
 //pdftohtml command line tool
 $program = "payroll.sh";
 $toexec="sh /var/www/html/tmp/" . $program . " 2>&1";
 $exec=shell_exec($toexec);

 //display message from payroll.sh
 //echo $exec;
 //echo ('<br/>');

}

function process(){

$dir = '/var/www/html/tmp/converted';
//echo ('one');

if (is_dir($dir)) {
//echo ('two');
    if ($dh = opendir($dir)) {
 //echo ('three');
        while (($file = readdir($dh)) !== false) {
  //echo ('four');

   if ($file != "." && $file != ".."){
   echo 'opening file: ';
   echo $file;
   echo ("<br/>");
   $fp = fopen('/var/www/html/tmp/converted/' . $file, 'r+');
   $count = 0;

      //while file is not at the EOF marker
      while (!feof($fp)) 
       {
        $line = fgets($fp);

        if($count==21)
         {
         $employeeID = substr($line,71,4);
         echo 'employee ID: ';
         echo $employeeID;
         echo ('<br/>');
         //echo ('six');
         $count++;
         }
        else if($count==30)
         {
         $employeeDate = substr($line,71,10);
         echo 'employee Date: ';
         echo $employeeDate;
         echo ('<br/>');
         //echo ('seven');
         $count++;
         }
        else 
         {
         //echo ('eight');
         //echo ('<br/>');
         $count++;
         }
         }
   fclose($fp);
   closedir($dh);

}
}
}
}
}

convert();
process();
?>

我正在设置一个php脚本,它将采用pdf格式的paystub,将其转换为html,然后在获取日期和员工ID后将其导入Drupal。

代码似乎只处理目录中的第一个文件然后它给了我:

opening file: dd00000112_28_2010142011-1.html
employee ID: 9871
employee Date: 12/31/2010

Warning: readdir(): 3 is not a valid Directory resource in /var/www/html/pay.mistequaygroup.com/payroll.php on line 29

错误中的'3'确实让我感到困惑,谷歌并没有多大帮助。它可能是循环的第三次迭代吗? reddir()目录中唯一正在扫描的文件是等待处理的.html文件。有什么想法吗?

另外,我的代码看起来如何?对于任何真正的编程我都是新手,我不会在工作中得到太多的输入。

2 个答案:

答案 0 :(得分:9)

在完成目录之前,您似乎正在关闭目录。移动这一行:

closedir($dh);

在你的while循环之外:

while (($file = readdir($dh)) !== false) {
   ....
}
closedir($dh);

而不是:

while (($file = readdir($dh)) !== false) {
   ....
   closedir($dh);
}

答案 1 :(得分:0)

  

另外,我的代码看起来如何?我   做任何真实的新手   编程,我不会太多   关于工作的投入。

由于几个原因,您的代码有点难以阅读。首先,你的缩进遍布各地。尽量保持一致。此外,你应该坚持一个支撑风格,而不是混合:

while ($foo) {
}

while ($foo)
{
}

如果您的代码格式更好,我认为您的程序错误会更明显。

哦,欢迎来到“真正的编程”世界。 :)