在PHP CLI下使用类似GET的方法传参
Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无
Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无法正确执行——GET多参数分隔符&会妨碍命令的执行。
1、PHP CLI的参数传递方式
PHP CLI下参数的传递是使用Linux命令行的方式进行,将参数值按照指定的先后顺序依次排列,一旦顺序错误,最终传送的结果也将错误,而且,如果程序要支持命令行参数,还需要专门的分析和拆开$argv数组,如果是修改现有程序,工作量将会更大。
2、捕获参数,组装伪$_GET和$_REQUEST数组
命令行下是没有$_GET等变量的,但如果使用GET进行参数传递,程序中肯定会有对诸如$_GET和$_REQUEST数组的调用。如果要降低修改的工作量,最简单的办法就是,抓获CLI传递的参数,再将参数组装成一个$_GET和$_REQUEST数组。
为了避开cli中对参数的先后顺序的要求,让命令执行使用更容易分辨更让人熟悉的URL参数传递方式,可以按如下的格式来传递参数并捕获:
<p class="line">1</p> ログイン後にコピー ログイン後にコピー |
<p class="line">php filename.php "name=Roges&height=187.96&weight=99.79"</p> ログイン後にコピー ログイン後にコピー |
注意,命令行中使用&
符号时,必须要将其用引号括住,否则你会有意外的惊喜。
3、实现
想到了过程,实现起来就比较简单了,一个比较简单的实现如下:
<p class="line">1</p> ログイン後にコピー |
<p class="line">// if file was executed by php cli, cli paramertes will be convert</p><p class="line">// to $_GET and $_REQUEST array.</p><p class="line">if(isset($argv) AND count($argv) </p><p class="line"> // GET paramertes are always follow the page url with ? symtax,</p><p class="line"> // it show be removed.</p><p class="line"> $argv[1] = str_replace("?", '', $argv[1]);</p><p class="line"> $params = explode('&', $argv[1]);</p><p class="line"> $_REQUEST = array();</p><p class="line"> foreach($params as $p) {</p><p class="line"> //get the location of the '='</p><p class="line"> $eq_loc = strpos($p, '=');</p><p class="line"> $_REQUEST[substr($p, 0, $eq_loc)] = substr($p, $eq_loc + 1, strlen($p) - $eq_loc);</p><p class="line"> }</p><p class="line"> $_GET = $_REQUEST;</p><p class="line">}</p> ログイン後にコピー |
将这个代码存储为文件,再在需要使用的文件头部进行引用即可。当在命令行下执行脚本时,使会进行转换,否则是不会进行任何操作的。
4、执行效果
将上面的代码保存然后在最后加上如下的两句,便可查看参数传递的效果:
<p class="line">1</p> ログイン後にコピー |
<p class="line">echo '$_REQUEST: ';</p><p class="line">print_r($_REQUEST);</p><p class="line">echo '$_GET: ';</p><p class="line">print_r($_GET);</p> ログイン後にコピー |
将文件命令为cli_get.php,在命令行中执行,结果如下:
<p class="line">1</p> ログイン後にコピー |
<p class="line">Roges@US:~/www$ php cli_get.php "name=Roges&height=187.96&weight=99.79"</p><p class="line">$_REQUEST: Array</p><p class="line">(</p><p class="line"> [name] => Roges</p><p class="line"> [height] => 187.96</p><p class="line"> [weight] => 99.79</p><p class="line">)</p><p class="line">$_GET: Array</p><p class="line">(</p><p class="line"> [name] => Roges</p><p class="line"> [height] => 187.96</p><p class="line"> [weight] => 99.79</p><p class="line">)</p> ログイン後にコピー |
手机选来选去,还是黑莓靠谱,大屏幕目前只是玩具而已。
Linux下为了方便,有时候会直接使用命令行的方式来执行php程序,比如一些crontab任务之类,但通常写出来的大部分php程序,都没有考虑到命令行下的一些情况,直接使用GET进行参数传递也是常态,但这在命令行下却很无奈,尤其是传递多个GET参数时,连命令都无法正确执行——GET多参数分隔符&会妨碍命令的执行。
1、PHP CLI的参数传递方式
PHP CLI下参数的传递是使用Linux命令行的方式进行,将参数值按照指定的先后顺序依次排列,一旦顺序错误,最终传送的结果也将错误,而且,如果程序要支持命令行参数,还需要专门的分析和拆开$argv数组,如果是修改现有程序,工作量将会更大。
2、捕获参数,组装伪$_GET和$_REQUEST数组
命令行下是没有$_GET等变量的,但如果使用GET进行参数传递,程序中肯定会有对诸如$_GET和$_REQUEST数组的调用。如果要降低修改的工作量,最简单的办法就是,抓获CLI传递的参数,再将参数组装成一个$_GET和$_REQUEST数组。
为了避开cli中对参数的先后顺序的要求,让命令执行使用更容易分辨更让人熟悉的URL参数传递方式,可以按如下的格式来传递参数并捕获:
<p class="line">1</p> ログイン後にコピー ログイン後にコピー |
<p class="line">php filename.php "name=Roges&height=187.96&weight=99.79"</p> ログイン後にコピー ログイン後にコピー |
原文地址:在PHP CLI下使用类似GET的方法传参, 感谢原作者分享。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

Linuxは、豊富なツールとコミュニティサポートを提供するネイティブプラットフォームであるため、LinuxでDockerが重要です。 1. docker:sudoapt-getupdateとsudoapt-getinstalldocker-cedocker-ce-clicotainerd.ioを使用します。 2。コンテナの作成と管理:Dockerrun-D-Namemynginx-P80:80NginxなどのDockerrunコマンドを使用します。 3。DockerFileを書き込み:画像サイズを最適化し、マルチステージ構造を使用します。 4。最適化とデバッグ:DockerLogsとDockerexを使用します

IISとPHPは互換性があり、FastCGIを通じて実装されています。 1..phpファイル要求を構成ファイルを介してFastCGIモジュールに転送します。 2. FASTCGIモジュールは、PHPプロセスを開始して、パフォーマンスと安定性を改善するための要求を処理します。 3。実際のアプリケーションでは、構成の詳細、エラーデバッグ、パフォーマンスの最適化に注意する必要があります。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

Laravelは、次のようなWeb開発プロセスを最適化します。1。ルーティングシステムを使用してURL構造を管理します。 2。ブレードテンプレートエンジンを使用して、ビュー開発を簡素化します。 3.キューを介して時間のかかるタスクを処理します。 4. Eloquentormを使用して、データベース操作を簡素化します。 5.ベストプラクティスに従って、コードの品質と保守性を向上させます。

CのDMAとは、直接メモリアクセステクノロジーであるDirectMemoryAccessを指し、ハードウェアデバイスがCPU介入なしでメモリに直接データを送信できるようにします。 1)DMA操作は、ハードウェアデバイスとドライバーに大きく依存しており、実装方法はシステムごとに異なります。 2)メモリへの直接アクセスは、セキュリティリスクをもたらす可能性があり、コードの正確性とセキュリティを確保する必要があります。 3)DMAはパフォーマンスを改善できますが、不適切な使用はシステムのパフォーマンスの低下につながる可能性があります。実践と学習を通じて、DMAを使用するスキルを習得し、高速データ送信やリアルタイム信号処理などのシナリオでその効果を最大化できます。

AIは、作曲家の使用を最適化するのに役立ちます。特定の方法には次のものが含まれます。1。依存関係管理の最適化:AIは依存関係を分析し、最適なバージョンの組み合わせを推奨し、競合を減らします。 2。自動コード生成:AIは、ベストプラクティスに準拠したComposer.jsonファイルを生成します。 3.コードの品質を改善する:AIは潜在的な問題を検出し、最適化の提案を提供し、コードの品質を向上させます。これらの方法は、開発者が効率とコードの品質を向上させるのに役立つ機械学習および自然言語処理技術を通じて実装されています。
