2

私は Amazon Product Advertising API に参加しています。彼らの条件には、少なくとも 1 時間ごとにデータを更新する必要があると書かれています。問題ありません。mysql db の 800 個のオブジェクトを簡単に一括更新できます。しかし、もう 1 つポイントがあります。1 秒あたり 1 つの Amazon クエリしか作成できないため、各クエリをタイムアウトして、PHP の実行を約 15 分間持続させたいと考えています。私のプロバイダーはphpスクリプトの最大実行時間を20秒に設定しており、変更できないため、これは私にとって問題です。

そこで、phpスクリプトをそれ自体にhttpリダイレクトすることを考えました。繰り返しますが、今のところ問題ありません。しかし、問題は次のとおりです。スクリプトを htaccess-password-protect したいのですが、cronjobs のプロバイダーは htaccess pw 保護を処理できます。スクリプトが悪用された場合、大量の DB トラフィックが発生する可能性があるため、保護がなければ安全ではありません。

質問: ログイン プロセスを実行できる人間がいないため、php を使用して htaccess ログイン ダイアログにログインすることは可能ですか? または、この問題を解決するための他のアイデアはありますか? ありがとうございました。

4

3 に答える 3

4

最初の問題への対処:実行時間

これを設定できる場所は 2 つあります。

  1. 設定- どうやらアクセスしたり変更したりすることはできません

  2. ランタイム- ランタイムの最大実行時間の変更を禁止する可能性を知りません

スクリプトで、これを先頭に追加します。set_time_limit実行時間を無制限に設定します。他のすべての整数値は秒単位です

<?php
set_time_limit(0);
于 2012-11-27T19:20:56.317 に答える
3

2 番目の質問への対処: http auth 資格情報をプログラムで提供する

これは興味のある読者のためだけのものです。その場合にこれが必要になるとは思いません(あなたのために)

TCPソケット接続を開くことができるあらゆる種類のクライアントと言語で使用できるように、生のHTTPを送信します

私の情報源:基本アクセス認証

<?php
$username = 'myuser';
$password = 'mypass';

// computing authorization digest
$httpAuthDigest = base64_encode( "{$username}:{$password}" );

// connecting to the remote server
$fp = fsockopen( 'www.zappos.com', 80, $errno, $errstr, 60 );
if (!$fp) {
    die( "{$errstr} ({$errno})\n" );
}

// send headers
fputs( $fp, "HEAD /womens-clothing HTTP/1.1\r\n" );
fputs( $fp, "Host: www.zappos.com\r\n" );
fputs( $fp, "Authorization: Basic {$httpAuthDigest}\r\n" );
fputs( $fp, "Connection: close\r\n" );
fputs( $fp, "\r\n" );

// receive result ( optional )
while (!feof($fp)) {
    echo fgets($fp, 128);
}
fclose($fp);

これは、私が知っている最もエキサイティングな応答ヘッダーを返しました:)

HTTP/1.1 200 OK
Server: nginx/1.1.17
Content-Type: text/html; charset=utf-8
X-ZFC-Metadata: KjYIExIJCgNuaWQSAjQ1EhYKBmxheW91dBIMdGhyZWVfY29sdW1uEg8KA3pjMRIIQ2xvdGhpbmc=
X-Powered-By: Ponies!
X-Varnish-TTL: 60m
X-Varnish: 248743314 248742997
X-Cache-Hits: 4
X-Varnish-Host: varnish04.zappos.net
X-Varnish-ID: drupal
X-Core-Value: 5. Pursue Growth and Learning
X-Recruiting: If you're reading this, maybe you should be working at Zappos instead.  Check out jobs.zappos.com
X-UUID: 9dc901f6-38ca-11e2-be29-00145e157f03
Cache-Control: max-age=3085
Date: Tue, 27 Nov 2012 19:50:38 GMT
Connection: close
于 2012-11-27T19:51:14.643 に答える
1

max_execution_timeOPは、設定されたものを無制限に上書きしましたが、特定の時間が経過してもタイムアウトが発生していると述べました。phpinfo()

worker scriptブラウザ経由でを呼び出すのは悪い習慣だと考えてください。これにより、制御不能な状態が発生し、現在発生しているような他の問題が発生する可能性があります-他の誰かが URL を手に入れたときに発生する可能性のある問題は別として.

また、1 時間ごとのインポートは、ブラウザーで手動で行うのは非常に不快ですよね?

あなたの問題は、タイムアウトのためにphpが実行を停止するのではなく、Webサーバーが停止することです。GET または POST パラメーターを渡さないと言いました。コマンドラインのphp-cliで実行するだけです

php yourscript.php

すべての出力はコンソールに記録されます。必要に応じて、次のようにログファイルに書き込むことができます

php yourscript.php > log.txt

これはまだ自動的に何もしません。任意の UNIX で、必要な時間と間隔でこのジョブを実行する cronjob を簡単に設定できます。

例えば

crontab -e

設定した cronjobs を編集するには

* */2 * * * /usr/bin/php /yourpath/yourscript.php > ~/yourlog.txt 2>/dev/null

これは 2 時間ごとに実行され、スクリプトの出力を に記録し~/yourlog.txt、エラーをリダイレクトします。/dev/null

これをチェックして、スケジュール表がどのように機能するかを確認して ください http://www.adminschoice.com/crontab-quick-reference

また、スクリプトを Web サーバーの外に移動してdocument root、Web からアクセスできないようにすることもお勧めします。

于 2012-11-28T18:56:09.860 に答える