最近のプロジェクトでは、REST サービス用のクライアントを作成する必要があり、署名検証では HTTP ヘッダーに RFC 1123 形式の日付を生成する必要があります。
この問題は、PHP ドキュメントを読んで gmstrftime 関数を使用するだけで比較的簡単に解決できます。
コードをコピーします コードは次のとおりです:
string gmstrftime ( string $format [, int $timestamp = time() ] )
呼び出しコードは次のとおりです:
code コードは次のとおりです:
echo gmstrftime("%a, %d %b %Y %T %Z",time());
//出力: 火曜日、01 4月 2014 16:16: 07 GMT
デバッグ プロセス中に、別のコンピューターでは出力が期待どおりではないことが判明し、中国語が生成されます:
コードをコピーします コードは次のとおりです:
2 つ、 01 4 2014 16:20:02 GMT
ドキュメントを読み続けてください。ドキュメントのコメントに、この関数の結果は setlocale の結果の影響を受け、現在のシステムのデフォルト言語の影響を受けることが記載されていることがわかりました。 。現在のシステムにインストールされている言語を表示するには、次のコマンドを使用します。
コードをコピーします。 コードは次のとおりです。
locale -a
次に、分析した結果に基づいて、次のようになります。 setlocale を英語に強制しても問題ありません。コードは次のとおりです:
コードをコピーします コードは次のとおりです:
setlocale(LC_TIME, 'en_US');
echo gmstrftime("%a, % d %b %Y %T %Z",time()) ;
この記事は終了するはずでしたが、残念ながら、テストに使用した Ubuntu マシンでは、Live CD バージョンであるため、en_US 言語がありませんでした。 , しかし、en_US.UTF-8があります。この時点では、コードを実行しているクライアント コンピューターに en_US と en_US.UTF-8 があるかどうかを判断できず、このアプローチは安全ではないと考えていました。幸いなことに、ドキュメント内に gmdate で置き換えることができるコメントがありました。この関数は setlocale の結果の影響を受けません:
コードをコピーします コードは次のとおりです:
gmdate('D, d M Y H:i:s' ) . 'GMT';
事件は解決しました〜需要は少ないですが、うまく書くのは簡単ではないので、今後さらに努力する必要があります。
http://www.bkjia.com/PHPjc/802222.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/802222.html技術記事最近のプロジェクトでは、REST サービスのクライアントを作成する必要があり、署名検証では HTTP ヘッダーに RFC 1123 形式の日付を生成する必要があります。 この問題は、PH を読むだけで比較的簡単に解決できます。