ファーストを助けてください。このを実行するとはシステムを侵害する攻撃者につながりますが、それは時間がかかることの唯一の質問です。
つまり、コードにはいくつかの問題があります。その第一は、外部の第三者(シェル)コマンドへの依存です。代わりに純粋なPHPで行うことができます。
テキストを編集することは、結局はPHPの主な強みの1つであり、コードは非常に簡単です。例として...これの
if (!$content = file_get_contents ($filename)) {
// Handle errors opening/reading the file here.
}
// Assuming case-sensitive search and replace here, as per the `sed` used.
$content = str_replace ("old text", "new text", $content);
if (!file_put_contents ($filename, $content)) {
// Handle errors with writing to the file here.
}
主な利点は、あなたが(sed
はかなりユビキタスであっても)存在することが関係のない第三者のプログラムに頼る必要がないことです。これにより、コードは理解しやすく、自己完結型であり、プラットフォームには無関心です(可能な限り)。
あなたのコードがうまくいかない理由については、これもファイルのアクセス許可と関係があると思われます。コメントに記載されているように、www-data
ユーザーにはデフォルトで/etc/
フォルダーに書き込む権限がありません。したがって、ファイルをそこで編集できるようにするには、まずroot対応のユーザーでファイルを作成し、所有権をwww-data
に変更する必要があります。
ただし、ではなく、は、このフォルダ内の既存のファイルに対してこれを行います。意図しない致命的な副作用の可能性はあまりにも大きいです!
PHPスクリプトでシステムファイルを変更する必要がある場合は、シェルスクリプトを作成し、crontab
などのような方法で呼び出すことができます。 の後に入力が100%虐待から安全であることを100%保証しました。 (IE:印刷可能な文字のみ、好ましくはASCII。)
あなたの 'www-data'のようなものか、それともどんなユーザでもそのディレクトリに書き込む権限がありません。引用:_ Apacheユーザ(www-データ)が/ etcを書き込んだり修正することができれば、すべてのシステムが妥協しています。 –
PHPスクリプトからアクセスするには、ファイルのグループ(chown参照)を同じグループに変更する必要がありますapache/phpが動作し、chmodを介して適切なグループ権限を与えます。セキュリティのために、apacheは/ etc内のファイルだけにアクセスする必要があります。 –
正規表現を閉じる必要がある一重引用符がない場合は、誤植ですか? –