試す
foreach(glob("*.pdf") as $src) {
// Manually remove file extension because glob() may return a dir path component
$parts = explode('.', $src);
$parts[count($parts) - 1] = 'txt';
$dest = implode('.', $parts);
// Escape shell arguments, just in case
shell_exec('pdftotext '.escapeshellarg($src).' '.escapeshellarg($dest));
}
基本的に、ディレクトリ内のPDFファイルをループし、ファイル名の名前コンポーネント(で抽出pathinfo()
)のみを使用して、各ファイルに対してコマンドを実行します。出力ファイルの編集を参照test.pdf
してください(したがってtest.txt
)。
の結果をglob()
直接使用するforeach
と、上記のコードで発生した変数の名前の衝突を簡単に回避できます。
編集
上記のコードを変更して、出力ファイル名を生成するときにファイル拡張子を手動で削除しました。これはglob()
、ファイル名だけでなく、パス文字列のディレクトリコンポーネントを返す可能性があるためです。pathinfo()
またはを使用basename()
すると、これが削除されます。ファイル名にaが含まれることがわかっているため.
(これを指示するために渡されるルールglob()
)、最後のファイル以降のすべてを安全に削除できます。また、適切な対策として追加escapeshellarg()
しました。すでに存在するファイル名がこれに反する可能性はほとんどありませんが(不可能ではないにしても)、安全であることが最善です。