PHPの`file_exists`でファイルが存在するのに`false`

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

PDOでSQLite3を使っていた時にDBをunlinkして削除したかったができない

SQLiteの検証というか復習をしている際、その過程でDBのファイルが沢山できてしまうため、テスト・プログラムを走らせたのち作成されたDBファイルを削除するという単純な機能を盛り込むのに、ちょっとしたミスでかなりの時間のロスをしてしまいました。久しぶりにDB触るとこれだ。戒めのためにも記録。

`$ cd`でディレクトリ移動して`$ ls`を見ても、ちゃんとファイルは存在する。パーミッションや権限も問題ない。FTPで覗いて見てもファイルは存在する。

しかし、PHPの`file_exists`関数で調べると「false(負)」の値が返って来てしまう。`realpath(‘./DB名’)`で同階層にあるスクリプトからチェックしてもNG。`ls -la`で確認してもシンボリック・リンクでもハードリンクでもディレクトリでもない。

困った。

何か疲れたので、テレビを観ながら一服して、かるく家族と口喧嘩して、ヤクルトを飲んで部屋に帰って来たら、神の声が・・・

DB作成時のファイル名を再確認。スペースが入ってませんか?

下記のシンプルなコードにバグがあります。 PDOでDB名を指定しているところに「スペース」があるため、作成されたDB名にもスペースがついてしまい、一見すると気づかない状態になります。


$name_db = 'sample.db';
$this->db = new PDO( "sqlite: ${name_db}");
// ....なにか処理する
// DBが不要になったので削除する
$path_db = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . $name_db;
if( file_exists( $path_db ) ){
unlink( $path_db );
} else {
echo "DBの削除に失敗しました。ファイルがナッシングです。" . PHP_EOL;
}

スポンサーリンク
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク
レクタングル(大)広告