Webhostingpad で Web サイトをホストしていますが、問題が発生しています。ホームページが読み込まれると、現在、ホームページに使用されているコンテンツを返す php スクリプトに対して 8 つの同時 ajax 呼び出しを行っています。8 つの ajax 呼び出しは、run.php というファイルを呼び出しています。このファイルの役割は、amazon.php という別のファイルで定義されている amazon というクラスから関数を呼び出すことだけです。
これは ajax 経由で 8 回呼び出される URL です。8 つの呼び出しの唯一の違いは、クエリ文字列です。
ご覧のとおり、URL の「f」パラメーターで関数名を渡しています。
run.php ファイルは次のようになります。
require_once('amazon.php');
$function_name = $_REQUEST['f'];
$arg_parameter = $_REQUEST['arg'];
$arg_tmp = explode(";", $arg_parameter);
$arg_array = array();
foreach($arg_tmp as $key_value_pair){
$exploded = explode(':', $key_value_pair);
$key = $exploded[0];
$value = $exploded[1];
$arg_array[$key] = $value;
}
$amazon = new amazon();
echo $amazon->$function_name($arg_array);
ご覧のとおり、このファイルは単純に amazon.php から関数を呼び出して結果をエコーしているため、ajax 関数のコールバックで使用できます。
getItemsById()
関数に関する amazon.php の関連コードは次のとおりです。
class amazon {
private $url;
private $accessKey = 'AKIAISJ2OHTBA888311SD';
private $secretAccessKey = 'RM8EG61w3dLwjymtAEVdfsdiesd883711lskdf';
function __construct(){
$this->url = 'http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=' . $this->accessKey . '&AssociateTag=global-18&Version=2011-08-01';
}
public function getItemsById($args = array()){
$itemIds = $args['id'];
$url = $this->url;
$url .= '&Operation=ItemLookup';
$url .= '&ItemId=' . $itemIds;
$url .= '&ResponseGroup=Images,Small,Offers,VariationSummary,EditorialReview';
$signedUrl = $this->amazonSign($url, $this->secretAccessKey);
$returned_xml = file_get_contents($signedUrl);
return $returned_xml;
}
}
上記のように、この関数は amazon.com の API の URL を呼び出し、PHP のfile_get_contents()
関数を使用して XML を返しています。私の問題は、run.php に対して行われた ajax 呼び出しの一部が正常に実行され、他の呼び出しが HTTP 500 内部サーバー エラーを取得していることです。これをローカルサーバーで実行すると、正常に動作します。オフィスの開発サーバーで実行すると、正常に動作します。ただし、Webhostingpad サーバーでは常にこの問題が発生します。一部の ajax 呼び出しは HTTP 500 エラーを返します。
Webhostingpad のサポートに問い合わせたところ、CPU/メモリ リソースの制限を超えているという情報しか得られませんでした。サーバーからのエラーログは、次のことを確認しているようです:
[2013 年 2 月 19 日火曜日 21:36:39] [エラー] [クライアント 68.174.126.115] (12) メモリを割り当てられません: 子プロセスを作成できませんでした: /home/my-server/ の /opt/suphp/sbin/suphp public_html/my-domain.com/run.php、リファラー: http://my-domain.com/
コミュニティへの私の質問は、ここで明らかにメモリを集中的に使用しているものがあるかどうかです。私がやっていることはそれほど普通ではないように感じるので、スクリプトの最適化に集中すべきか、それとも単に別のホスティング プロバイダーを探すべきかを理解しようとしています。