鍍金池/ 問答/PHP  Linux  網(wǎng)絡(luò)安全  HTML/ Shell 腳本執(zhí)行 PHP 命令

Shell 腳本執(zhí)行 PHP 命令

使用 Shell 腳本管理執(zhí)行 PHP 的定時(shí)任務(wù)
shell 腳本如下
   cro_file=$dir_or_file"/crontab_php"
    #文件是否存在
   if [ -f $cro_file ]
   then
      # 這里實(shí)際操作不是cat 
       cat $cro_file
   else
      echo "$cro_file not found."
   fi
crontab_php 內(nèi)容格式(使用Tp5 框架結(jié)構(gòu))
# 這里有個(gè)疑問,就是是否所有定時(shí)任務(wù)都得另外寫入口?不需要登錄驗(yàn)證
# 因?yàn)橛行┒〞r(shí)任務(wù)是寫在后臺(tái)的,前臺(tái)沒有入口
application\index\index\index.php


實(shí)際執(zhí)行命令
 php  application\\index\\index\\index.php
 #這里應(yīng)該是執(zhí)行不了的,因?yàn)闆]有從框架入口進(jìn)來
 #怎么才能直接執(zhí)行?

有兩個(gè)問題:

  1. 是否所有定時(shí)任務(wù)都得另外寫入口?
  2. 怎么才能直接執(zhí)行框架內(nèi)寫的定時(shí)任務(wù),不走 http ?
回答
編輯回答
乞許

tp可以寫個(gè)cli入口,假設(shè)為cli.php,然后可以執(zhí)行php cli.php 控制器/方法

2017年8月7日 06:51
編輯回答
純妹

1、定時(shí)任務(wù)另外寫入口比較方便管理。
2、PHP用框架的話是統(tǒng)一了入口文件,用框架寫可以新起一個(gè)入口文件,在這個(gè)入口文件中可定義$_GET這樣可以直接定位到對(duì)應(yīng)方法

2018年4月9日 22:20
編輯回答
別逞強(qiáng)

所謂 web 框架就是一個(gè) http 請(qǐng)求框架, 無論多輕量級(jí)的框架, 也會(huì)包括 路由, MVC, html 模板
等功能. 具體到 php 的框架, 就是面對(duì)一次會(huì)話的.
所以按我理解定時(shí)任務(wù)沒法寫在框架里面: 你要寫在哪一層呢? 寫在 Controller 里面? 那不還是得模擬一個(gè)請(qǐng)求出來. 模擬請(qǐng)求對(duì) 負(fù)載均衡, 反向代理, cron 日志查看 等都會(huì)帶來麻煩. 與其自找麻煩, 不如另起一個(gè)項(xiàng)目了.
cron 任務(wù)可以單獨(dú)寫在一個(gè)項(xiàng)目里, 不和 http 請(qǐng)求框架關(guān)聯(lián). 比如就叫 php_cron 項(xiàng)目, 里面就是按照單純的腳本來維護(hù)的. 如果有需要連接數(shù)據(jù)庫等資源的地方, 就統(tǒng)一 include 一個(gè)專用的 php 文件進(jìn)來, 比如 mysql_connect.php . 這樣就相當(dāng)于在這個(gè)項(xiàng)目中單獨(dú)維護(hù)若干個(gè)公共 php 文件即可. 這比硬模擬一個(gè)請(qǐng)求去走框架要省性能, 也清晰的多. 對(duì)于小點(diǎn)的項(xiàng)目, 這樣做就足夠了. 大點(diǎn)的項(xiàng)目得考慮把定時(shí)任務(wù)管理起來.
另外, cron 定時(shí)任務(wù)為什么需要用戶登錄鑒權(quán)? 系統(tǒng)內(nèi)部的定時(shí)任務(wù)為什么還要具體用戶登錄? 即使是為了分角色管理權(quán)限, 也應(yīng)該是在數(shù)據(jù)庫上去設(shè)置具體權(quán)限吧, 覺得不應(yīng)該和登錄系統(tǒng)參合在一起.

2018年5月30日 06:30