电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

將PHP作為Shell腳本語言使用

瀏覽:3日期:2024-01-27 14:21:10

--英文原著:Darrell Brogdon,發表于 http://www.phpbuilder.com/columns/darrell20000319.php3) 可能很多人都想過使用PHP編寫一些定時發信之類的程序,但是卻沒有辦法定時執行PHP;一次去PHPBuilder的時候,發現了這一篇文章,于是想給大家翻譯一下(同時做了一些修改),希望對大家有用。第一次翻譯文章,不好請多多見諒。

我們都知道,PHP是一種非常好的動態網頁開發語言(速度飛快,開發周期短……)。但是只有很少數的人意識到PHP也可以很好的作為編寫Shell腳本的語言,當PHP作為編寫Shell腳本的語言時,他并沒有Perl或者Bash那么強大,但是他卻有著很好的優勢,特別是對于我這種熟悉PHP但是不怎么熟悉Perl的人。 要使用PHP作為Shell腳本語言,你必須將PHP作為二進制的CGI編譯,而不是Apache模式;編譯成為二進制CGI模式運行的PHP有一些安全性的問題,關于解決的方法可以參見PHP手冊(http://www.php.net)。 一開始你可能會對于編寫Shell腳本感到不適應,但是會慢慢好起來的:將PHP作為一般的動態網頁編寫語言和作為Shell腳本語言的唯一不同就在于一個Shell腳本需要在第一行生命解釋本腳本的程序路徑: #!/usr/local/bin/php -q 我們在PHP執行文件后面加入了參數“-1”,這樣子PHP就不會輸出HTTPHeader(如果仍需要作為Web的動態網頁,那么你需要自己使用header函數輸出HTTPHeader)。當然,在Shell腳本的里面你還是需要使用PHP的開始和結束標記: <?php 代碼 ?> 現在讓我們看一個例子,以便于更好的了解用PHP作為Shell腳本語言的使用: #!/usr/local/bin/php -q <?php print('Hello, world!n'); ?> 上面這個程序會簡單的輸出“Hello, world!”到顯示器上。

一、傳遞Shell腳本運行參數給PHP: 作為一個Shell腳本,經常會在運行程序時候加入一些參數,PHP作為Shell腳本時有一個內嵌的數組“$argv”,使用“$argv”數組可以很方便的讀取Shell腳本運行時候的參數(“$argv[1]”對應的是第一個參數,“$argv[2]”對應的是第二個參數,依此類推)。比如下面這個程序: #!/usr/local/bin/php -q <?php $first_name = $argv[1]; $last_name = $argv[2]; printf('Hello, %s %s! How are you today?n', $first_name, $last_name); ?> 上面的代碼在運行的時候需要兩個參數,分別是姓和名,比如這樣子運行: [dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon Shell腳本在顯示器上面會輸出: Hello, Darrell Brogdon! How are you today? [dbrogdon@artemis dbrogdon]$ 在PHP作為動態網頁編寫語言的時候也含有“$argv”這個數組,不過和這里有一些不同:當PHP作為Shell腳本語言的時候“$argv[0]”對應的是腳本的文件名,而當用于動態網頁編寫的時候,“$argv[1]”對應的是QueryString的第一個參數。

二、編寫一個具有交互式的Shell腳本: 如果一個Shell腳本僅僅是自己運行,失去了交互性,那么也沒有什么意思了。當PHP用于Shell腳本的編寫的時候,怎么讀取用戶輸入的信息呢?很不幸的是PHP自身沒有讀取用戶輸入信息的函數或者方法,但是我們可以效仿其他語言編寫一個讀取用戶輸入信息的函數“read”: <?php function read() { $fp = fopen('/dev/stdin', 'r'); $input = fgets($fp, 255); fclose($fp); return $input; } ?> 需要注意的是上面這個函數只能用于Unix系統(其他系統需要作相應的改變)。上面的函數會打開一個文件指針,然后讀取一個不超過255字節的行(就是fgets的作用),然后會關閉文件指針,返回讀取的信息。 現在我們可以使用函數“read”將我們前面編寫的程序1修改一下,使他更加具有“交互性”了: #!/usr/local/bin/php -q <?php function read() { $fp = fopen('/dev/stdin', 'r'); $input = fgets($fp, 255); fclose($fp); return $input; } print('What is your first name? '); $first_name = read(); print('What is your last name? '); $last_name = read(); print('nHello, $first_name $last_name! Nice to meet you!n'); ?> 將上面的程序保存下來,運行一下,你可能會看到一件預料之外的事情:最后一行的輸入變成了三行!這是因為“read”函數返回的信息還包括了用戶每一行的結尾換行符“n”,保留到了姓和名中,要去掉結尾的換行符,需要把“read”函數修改一下: <?php function read() { $fp = fopen('/dev/stdin', 'r'); $input = fgets($fp, 255); fclose($fp); $input = chop($input); // 去除尾部空白 return $input; } ?>

三、在其他語言編寫的Shell腳本中包含PHP編寫的Shell腳本: 有時候我們可能需要在其他語言編寫的Shell腳本中包含PHP編寫的Shell腳本。其實非常簡單,下面是一個簡單的例子: #!/bin/bash echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF <?php print('This is the PHP section of the coden'); ?> EOF 其實就是調用PHP來解析下面的代碼,然后輸出;那么,再試試下面的代碼: #!/bin/bash echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF <?php $myVar = 'PHP'; print('This is the $myVar section of the coden'); ?> EOF 可以看出兩次的代碼唯一的不同就是第二次使用了一個變量“$myVar”,試試運行,PHP竟然給出出錯的信息:“Parse error: parse error in - on line 2”!這是因為Bash中的變量也是“$myVar”,而Bash解析器先將變量給替換掉了,要想解決這個問題,你需要在每個PHP的變量前面加上“”轉義符,那么剛才的代碼修改如下: #!/bin/bash echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF <?php $myVar = 'PHP'; print('This is the $myVar section of the coden'); ?> EOF

好了,現在你可以用PHP編寫你自己的Shell腳本了,希望你一切順利。如果有什么問題,可以去http://www.PHPBuilder.com或者http://www.zPHP.com上面討論。

標簽: PHP
主站蜘蛛池模板: 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | IP检测-检测您的IP质量| 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 至顶网| 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 |