ウィキペディアのアカウントに「リンク」されているニックネームを保存するためにデータベースを使用するPHPIRCボットのモジュールを作成しました。これを行うために、私は次のコードを持っています:
$pudb_wnas = file('cache.ucb');
foreach ($pudb_wnas as $lineNumber => $line) {
if (preg_match("/" . p_chars($ex[4]) . "~!/i", $line) != false) {
$found = true;
break;
}
}
if ($found) {
echo "!!!!!!!!!!!!!!!!FOUND!!!!!!!!!!!!!!!!!!\n";
$lines = file('cache.ucb', FILE_IGNORE_NEW_LINES);
$wnas_bu = $lines[$lineNumber];
$lines[$lineNumber] = trim($wnas_bu) . "~!" . $mask[0];
file_put_contents('cache.ucb', implode("\n", $lines));
} else {
$udb_wnas = fopen("cache.ucb", "a+");
fwrite($udb_wnas, "\n" . p_chars($ex[4]) . "~!" . $mask[0]);
fclose($udb_wnas);
}
このp_chars
関数は、とともにdp_chars
、いくつかの特殊文字に円記号を追加または削除するカスタム関数です。
function p_chars( $text ) {
$m_text = str_replace("(", "\(", $text);
$m_text = str_replace(")", "\)", $m_text);
return $m_text;
}
// Función para descodificar p_chars
function dp_chars( $text ) {
$m_text = str_replace("\(", "(", $text);
$m_text = str_replace("\)", ")", $m_text);
return $m_text;
}
cache.ucbファイル(実際にはnas.udbですが、これは別の話です)の内容はここにあります。ここで完全なコードを確認することもできます。
このコンテキストでは、変数$ ex [4]は、次のようにIRCから使用される%nasコマンドに渡される引数を意味します%nas Test
。
コマンドを呼び出すと、cache.ucbファイルで。で始まる行が検索されます$ex[4]."~!"
。~!
セパレーターとして使用しています。たとえば、コマンド引数が。の場合、 。%nas Testing
を検索しTesting~!
ます。行が見つかった場合は、それ自体にプラス "~!".$mask[0]
を置き換えます。$mask[0]
コマンドを呼び出したユーザーのニックネームです。
行が見つからない場合は、次の構造に従って新しい行を追加します$ex[4]~!$mask[0]
。したがって、例として、Bousieが実行した場合、%nas Testing
を検索しTesting~!
ます。行がであると仮定するとTesting~!Test
、それは。に置き換えられTesting~!Test~!Bousie
ます。それ以外の場合は、行を追加しますTesting~!Bousie
。
問題は、Bousieが実行した場合%nas UnRar
、正しく機能することです。しかし、Bousieがそうした場合%nas I(L)Verano
、新しい行が追加されます。しかし、すでにI(L)Veranoラインがあります。引数をアーカイブする前にに変換する必要があることに注意してください。そのため、このコードで何が間違っているのかわかりません。I(L)Verano
I\(L\)Verano
あなたは私が間違っていることを私に話すのを本当に助けてくれるでしょう。ああ、ここで見たたくさんのコードを試してみました。それらを混ぜてみました...おそらく問題はp_chars関数とdp_chars関数にありますか?でも見えない!