PHP readdir (): 3 não é um recurso de diretório válido

&1"; $exec=shell_exec($toexec); //display message from payroll.sh //echo $exec; //echo ('
'); } 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 ("
"); $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 ('
'); //echo ('six'); $count++; } else if($count==30) { $employeeDate = substr($line,71,10); echo 'employee Date: '; echo $employeeDate; echo ('
'); //echo ('seven'); $count++; } else { //echo ('eight'); //echo ('
'); $count++; } } fclose($fp); closedir($dh); } } } } } convert(); process(); ?>

Eu estou configurando um script php que levará uma taxa em formato pdf, convertê-lo em html e, em seguida, importá-lo para o Drupal depois de obter a data e o ID do funcionário.

O código só parece processar o primeiro arquivo no diretório e isso me dá isso:

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

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

Aviso: readdir (): 3 não é um recurso de diretório válido em /var/www/html/pay.mistequaygroup.com/payroll.php on line 29

O ‘3’ no erro realmente me confunde, e o google não está ajudando muito. Poderia ser a 3ª iteração do loop? Os únicos arquivos no diretório reddir () são a varredura são os arquivos .html aguardando ser processados. Alguma ideia?

Além disso, como meu código parece? Eu sou bastante novo em fazer qualquer programação real e não recebo muita contribuição em torno do trabalho.

Parece que você está fechando o diretório antes de terminar. Mova esta linha:

 closedir($dh); 

Fora do seu loop while:

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

em vez disso:

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

Além disso, como meu código parece? Eu sou bastante novo em fazer qualquer programação real e não recebo muita contribuição em torno do trabalho.

Seu código é um pouco difícil de ler por alguns motivos. Primeiro, sua recuo é todo o lugar. Tente mantê-lo consistente. Além disso, você deve ficar com um único estilo e não misturar:

 while ($foo) { } 

ou

 while ($foo) { } 

Eu acho que o erro do seu programa teria sido mais óbvio se seu código fosse melhor formatado.

Ah, e bem vindo ao mundo da “programação real”. 🙂