インターネットには、「X PHPコードスニペット」タイプのさまざまな記事がたくさんあります。なぜ別の記事を書く必要があるのですか?その理由は簡単です。記事のコードスニペットのほとんどは光沢がありません。ランダムな文字列を生成するか、$_SERVER["REMOTE_ADDR"]
を返してクライアントIPアドレスのようなフラグメントを取得することは、本当に楽しくて実用的ではありません。この記事では、PHPコードの5つの実用的で興味深いスニペットを共有し、その背後にあるインスピレーションを紹介します。うまくいけば、これらのクリエイティブコードスニペットが、毎日のプログラミングでより優れた、より創造的なコードを書くように促すことを願っています。
キーポイント
fputcsv()
関数を使用して固定長を解析します。データ、および単純なPHPクラスを使用して、HTMLテンプレートを実行し、unpack()
を使用してCurlの代替として使用して、HTTP GETおよびPOSTリクエストを発行します。 file_get_contents
1 このようなコードがよく見られ、多次元配列データをCSVに変換しようとしています。
問題は、各要素が正しく逃げられないことであり、単一の値に引用符またはコンマを含めると、CSVデータのその後の解析にエラーが発生する可能性があります。組み込み関数を使用するのが最善です。次のコードは、データ配列からCSV出力を構築するロジックをカプセル化します。タイトル列の使用を可能にするオプションのパラメーターと、CSVをブラウザに直接更新するか、文字列として出力を返すかどうかが含まれています。それについての巧妙なことは、機能が操作するために開いたファイルハンドルが必要であるため、
でストリームを使用することです。<?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?>
fputcsv()
fputcsv()
関数を使用すると、CSVの生成はシンプルで信頼性が高くなります。
<?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?>
2クラスを自動的にロードします
Autoloadクラスファイルは一般的ですが、さまざまなPHPフレームワークが提供する肥大化したヘビー級オートローダーが好きではないかもしれません。幸いなことに、独自の最小限のローダーを書いても、PHP Standards Working Groupが採用したPSR-0標準に従うことができます。この標準では、PSR-0互換性のあるオートローダーが提供する必要があるサポート機能(登録方法、構成オプションなど)は説明していません。クラスの定義を<vendor name>(<namespace>)
モードで自動的に見つけることができる場合、PSR-0互換性があります。また、<vendor name>
の親ディレクトリを指定しません。ほとんどのオートローダーによって実装される追加の「塗りつぶし」は、コードを介して場所を指定する必要がある場合に便利ですが、PHPに既にインクルードパスに既にディレクトリを使用している場合は必要ありません。
<?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?>
$match[2]
$match[1]
3を使用して、固定長データを解析します
Cなどの言語では、メモリにロードされるとアクセスデータ構造と完全に整合するため、固定長データは比較的簡単に処理できます。しかし、一部の人々にとって、PHPなどの動的な言語で固定長データを処理することは、このメモリアクセスを不可能にします。したがって、このようなコードがよく表示されます 不快に感じるかもしれません。それは大丈夫です、私も私のアプリケーションでこのようなコードを使用したくありません!それは長く、インデックスはエラーになりやすいです。幸いなことに、より良い代替手段があります:
。PHPマニュアルの
のドキュメントには、「指定された形式に従ってバイナリ文字列を配列に開梱する」と述べ、バイナリデータエスケープの使用の使用例を示しています。すぐに明白ではないかもしれないことは、形式の仕様 "a"は文字を意味するため(結局のところ、文字列は一連のビットとバイトではありませんか?)、この関数を使用して固定長の文字列を解析できることです。
<?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?>
unpack()
この場合、形式の文字列は一連のAのシリーズであり、特定のフィールドの文字数を指定する一連のAであり、取得したデータは最終配列に割り当てられ、スラッシュで区切られます。たとえば、
として提供します。 unpack()
4
PHPコミュニティでは、テンプレート化に関するコンセンサスはあまりありませんでした。私たちは皆、HTMLとPHPを分離することが望ましいことに同意しますが、SmartyやTwigなどのテンプレートライブラリを使用することの適用性に関する競合があります。一部の人々は、PHP自体がテンプレートエンジンであり、ライブラリの速度、構文などに反対することを指摘しています。他の人は、テンプレートシステムによって提供されるDSLを使用することで大きな利益を得ると主張しています。トレードオフの1つは、コードを簡潔に保つために、PHPで記述された非常に小さなクラスでHTMLをテンプレートすることです。
<?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?>
成熟したテンプレートエンジンではありません。これは、テンプレートとして指定されたファイルにアクセスできるキー/値データペアを収集する「バケツ」として機能するきちんとした補助クラスです。まず、ビュー内のTemplate
クラスのインスタンスを作成し、ディレクトリ名を渡して後続のテンプレートファイルを見つけることを選択できます(関連するファイルをグループ化できます)。次に、テンプレートで満たされる値は、set()
メソッドまたは裸の属性として提供されます。すべての値が指定されたら、テンプレートをレンダリングするためにout()
メソッドを呼び出すことができます。
<?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?>
の例のmytemplate.php
ファイルは次のようになるかもしれません:
<?php spl_autoload_register(function ($classname) { $classname = ltrim($classname, "\"); preg_match('/^(.+)?([^\]+)$/U', $classname, $match); $classname = str_replace("\", "/", $match[1]) . str_replace(["\", "_"], "/", $match[2]) . ".php"; include_once $classname; }); ?>
テンプレートファイルでは、PHP関数の全範囲にアクセスして、必要に応じてフォーマット値、フィルター値などにアクセスできます。
2番目のオプションのパラメーターは、ブラウザに直接更新する代わりに、テンプレートコンテンツが文字列として返されることを指定できます。
out()
の代替として使用します Curlは、さまざまなプロトコルを通信するための強力なライブラリです。それは本当に非常に強力であり、時にはそれをする他の方法がありません。タスクを達成するためにCurlによって公開される機能が明示的に必要な場合は、Curlを使用してください!ただし、PHPでの毎日のカールの使用のほとんどは、HTTPのGETおよびPOSTリクエストの作成を中心に展開します。これは、PHPビルトイン機能を使用して簡単に実行できます。
HTTPリクエストを発行するためにCurlに依存することに2つの問題があります。1)最も単純なトランザクションでもセットアップする多くのオプションがあり、2)ホスティングとインストールに応じて、利用可能である可能性がありますが、デフォルトでは有効になっていません。
およびは、バージョン4.3以降利用可能な2つのネイティブPHP関数です。併せて、彼らは通常、カールが実行するのと同じタイプの多くのリクエストを実行できます。 file_get_contents()
stream_context_create()
基本的なGet Requestsについては、
file_get_contents()
HTTPヘッダーを指定する必要があるリクエスト(取得または他のHTTPメソッド)の場合、特別なキー付き配列を
<?php // 解析NACHA报头记录 $row = fread($fp, 94); $header = array(); $header["type"] = substr($row, 0, 1); $header["priority"] = substr($row, 1, 2); $header["immDest"] = substr($row, 3, 10); $header["immOrigin"] = substr($row, 13, 10); $header["date"] = substr($row, 23, 6); $header["time"] = substr($row, 29, 4); $header["sequence"] = substr($row, 33, 1); $header["size"] = substr($row, 34, 3); $header["blockFactor"] = substr($row, 37, 2); $header["format"] = substr($row, 39, 1); $header["destName"] = substr($row, 40, 23); $header["originName"] = substr($row, 63, 23); $header["reference"] = substr($row, 86, 8); print_r($header); ?>
stream_context_create()
file_get_contents()
上記の例は、投稿を介してファイルをアップロードするために必要な文字を示しています。コンテキスト配列はキー「メソッド」、「ヘッダー」、および「コンテンツ」を使用してトランザクションを指定します
<?php // 解析NACHA报头记录 $row = fread($fp, 94); $header = unpack("A1type/A2priority/A10immDest/A10immOrigin/" . "A6date/A4time/A1sequence/A3size/A2blockFactor/A1format/" . "A23destName/A23originName/A8reference", $row); print_r($header); ?>
複雑なリクエスト(ファイルアップロードなど)にfile_get_contents()
を使用する場合、最初に模擬Webフォームを作成し、FirefoxまたはFireBugが有効になった同様のツールを実行してから、リクエストに含まれるものが少し助けになる可能性があります。そこから、重要なヘッダー要素を含めることができます。
概要
この記事で紹介されたコードスニペットが興味深いと思うことを願っています。彼らは、創造的な問題解決と、新しい効果のためにPHPの組み込み機能を使用することを紹介します。私はあなたがそれらが便利で刺激的なものだと思うことを願っています。あなたがあなた自身の刺激的なコードスニペットを持っている場合は、以下のコメントでそれをお気軽に共有してください。
(フォトリアからの写真)
(PHPコードスニペットに関するFAQ)
(FAQパーツは、元のFAQパーツのコンテンツがコードスニペット自体とはほとんど関係がなく、補足的な説明であるため、ここでは省略されています。実際のニーズに応じて自分で追加または変更できます。)以上がPHPマスター| 5インスピレーション(そして有用な)PHPスニペットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。