0

これは初心者の質問になりますが、ソリューションを実装するための唯一の目的(atm)でphpを学習しています。phpについて学習したことはすべて、過去18時間で学習しました。

目標は、別のWebサイトへのクロスドメインアクセスを可能にするために、JavaScriptのgetリクエストに間接参照を追加することです。また、このWebサイトを抑制したくないので、安全策を講じたいと思います。他のピアがリクエストを送信することを説明できないため、JavaScriptに含まれていることを信頼することはできません。

だから今、私は次の間に合わせのコードを持っていますが、スロットル対策はありません:

<?php

  $expires = 15;

  if(!$_GET["target"])
    exit();
  $fn = md5($_GET["target"]);
  if(!$_GET["cache"]) {
    if(!array_search($fn, scandir("cache/")) ||
      time() - filemtime($file) > $expires)
      echo file_get_contents("cache/".$fn);
    else
      echo file_get_contents(file);
  }
  else if($_GET["data"]) {
    file_put_contents("cache/".$fn, $_GET["data"]);
  }
?>

私が知る限り、それは完全に機能します(ありそうもないチェックサムの衝突を考慮していません)。今私が知りたいのは、そしてグーグルでの私の検索クエリが私のために調達することを拒否することは、phpが実際にどのように起動し、いつ終了するかです。

明らかに、私が自分のWebサーバーを実行している場合、これについてもう少し洞察が得られます。私はそうではなく、シェルアクセスもありません。

基本的に、スクリプトがコードで終了するタイミングを制御できるかどうか、phpファイルへのすべての「get」リクエストがスクリプトの新しいインスタンスを起動するかどうか、または同じように「ウェイクアップ」できるかどうかを判断しようとしています。脚本。その理由は、たとえば、過去nミリ秒以内に「target」にリクエストを送信したかどうかを追跡したいので、値をセーブファイルにダンプしてから、何かのために何度も何度もリカバリするのは少し無駄に思えますそれは非常に長い間メモリに保持する必要はありません。

4

2 に答える 2

2

phpは接続ごとに実行されます。IE:phpファイルに対する各リクエストは新しいインスタンスと見なされます。通常、接続が閉じられると、各インスタンスは終了します。ただし、セッションを使用して、特定のユーザーの接続間のデータを保存することはできます

セッションの基本的な使用法については、以下を調べてください。

session_start()
$_SESSION
session_destroy()
于 2012-08-07T00:30:38.923 に答える
2

すべてのHTTPリクエストは、インタープリターの新しいインスタンスを開始します。これがまったく新しいプロセスであるか、既存のプロセスの再利用であるかは、基本的に実装の詳細です。

これにより、通常、優れたシンプルでスケーラブルな設計に移行できます。複数のサーバープロセスとスレッドを実行でき、リクエストが同じインスタンスに戻るかどうかによって動作が変化することはありません。

最近変更されたファイルのロードは、キャッシュから直接行われるため、Linuxでは非常に高速になります。ご心配なく。

パスにリクエストパラメータを直接追加することで、深刻なセキュリティホールが発生するという事実を心配する必要はありませんdata=../../../etc/passwdhttp://www.php.net/manual/en/security.variables.phpなどをお読みください。(この特定の例では、入力をパスに配置する前にハッシュしているため、実際的な問題ではありませんが、注意が必要です。)

より一般的には、複数のリクエストにまたがってキャッシュを保持したい場合、最近の典型的なことはmemcachedを使用することです。

于 2012-08-07T00:36:11.977 に答える