2017-08-29 9 views
1

を動作していないが:file_exists&is_file私はこのコードを使用しています

$DataSourceName = "..\Log4OM\Log4OM-Active.SQLite"; 
if(!file_exists($DataSourceName)) 
{ 
    $Msg = sprintf("%s does not exist", $DataSourceName); 
    die($Msg); 
} 

ファイルが実際に存在しない、とこのパスは、今朝まで取り組んできました。これでテストが失敗し、アプリケーションが終了します。 "is_file"の見逃しはありません。

また、私はこのコードを使用します。

$connection = new PDO("sqlite:".$DataSourceName); 
    // Set errormode to exceptions 
$connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 

これは実際にはファイルを開くず、アプリケーションが正常に動作します。私はそれを試して最初のテストを敗北したので、私はこれを知っています。残念ながら、 "$ connection ="行に入る前に、最初のテストが終了しなければなりません。

また、ファイルを開くことができないfopenを試しました。ファイル名は実際には実際のファイルへのハードリンクですが、実際のファイル名の代わりに同じ問題があります。ファイルの権限は数日前と同じで正しいと思われます。

+0

あなたは '$ DataSourceName'が正しいパスであると確信していますか? –

+0

はい私はあります。 $ DataSourceNameは "new PDO"ステートメントでも使用され、動作します。 – Pilot

答えて

5

「ウォーキング」ディレクトリに頼らないでください。 __DIR__

$DataSourceName = __DIR__ . "\..\Log4OM\Log4OM-Active.SQLite"; 
if(!file_exists($DataSourceName)) 
{ 
    $Msg = sprintf("%s does not exist", $DataSourceName); 
    die($Msg); 
} 
+0

私は、 '$ _SERVER ['DOCUMENT_ROOT']'のようにもう少し静的なものを指定する方が簡単だから、すべての単一ディレクトリのパスを再計算する必要はありません。 – aynber

+0

それは例です。 document_rootのどこかに定義された定数があるかもしれませんが、dirname(\ _ \ _ FILE__)を行うことができます。多くのオプションがあります。一番下の行は、_default_ファイルの場所を信頼しないことです。 –

+0

document_rootは[$ _SERVER超大域](http://php.net/manual/en/reserved.variables.server.php)の1つです。ほとんどの場合、ブラウザ経由でスクリプトにアクセスするときには存在しますが、通常はコマンドラインでは使用しません。ファイルパスを指定する簡単なグローバルな方法として、プロジェクト全体に簡単にコピー/ペーストすることができます。 – aynber

関連する問題