2016-10-31 16 views
0

現在、自動コンテンツ生成スクリプトのサイトマップを作成中です。私は、Googleがラインごとに1つのURLを含む単純なテキストファイルでサイトマップを受け入れることを知る必要があります。文字列がファイルに存在しない場合はfwrite

私は1.txtという名前のファイルを作成し、ユーザーが訪問するときに現在のページURLを1.txtに追加するスクリプトを書いています。

test.phpは次のとおりです。

$file = 'assets/sitemap/1.txt'; 
$url = "http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]."\n"; 
$file = fopen($file, 'a'); 
fwrite($file, $url); 
fclose($file); 

このスクリプトは、1.txtたびに誰かがページをヒットURLtoページを書き込みます。しかし問題は、あまりにも多くの重複したリンクを作成することです。だから私は既に存在する場合は、文字列(この場合はURL)を追加しないフィルタを追加したいと思います。

しばらくサーフィンした後、私は、リソースフレンドリーで、ここで溶液(第二のスニペット)を得た:PHP check if file contains a string

私は、以下の修正をしたが、それは(すべてでは何も追加しない)動作していない:

$file = 'assets/sitemap/1.txt'; 
$url = "http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]."\n"; 
if(exec('grep '.escapeshellarg($url).' assets/sitemap/1.txt')) {} 
else{ 
    $file = fopen($file, 'a'); 
    fwrite($file, $url); 
    fclose($file); 
} 

答えて

0

これがうまくいけば理解しやすいです:

$file = 'assets/sitemap/1.txt'; 
$url = "http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]."\n"; 

$text = file_get_contents($file); 

if(strpos($text, $url) === false) { 
    file_put_contents($file, $url, FILE_APPEND); 
} 
  • は、ファイルの内容を読んで、私$urlstrpos()
  • を使用して、文字列$textである場合$urlが文字列$textにない場合file_get_contents()
  • チェックを使用して文字列$text NTO、総行数をカウントするにはfile_put_contents()

を使用してファイルに$urlを追加file()を使用して、ファイル行を配列にロードすることができます。

$lines = file($file); 
$count = count($lines); // count the lines 

if(!in_array($url, $text)) { 
    file_put_contents($file, $url, FILE_APPEND); 
    $count++; // if added, add 1 to count 
} 
+0

それはまた、文字列の存在を確認するの横に1.TXTへのリンクを追加しない:$urlin_array()を使用して配列している場合は、チェック? – Kubloy

+0

第3弾は何を言いますか? – AbraCadaver

+0

append = writeは可能でしょうか? – Kubloy

関連する問題