命令行運行php報錯(PHP報錯)

本文目錄一覽:

執行php.exe程序cli提示錯誤如何解決

#!/usr/local/bin/php –q

?php

//Windows平台上,上行應該為:#!C:\php\php.exe -q

echo “你好 PHP CLI!”;

?

不要忘了給該文件設置為可執行的許可權:

$ chmod 755 myfile.php

然後直接輸入以下命令,按回車鍵即可以運行:

$ ./myfile.php

如果要在Windows系統下運行該腳本,則不需要設置文件屬性,

可以直接運行該腳本。

Microsoft Windows [版本 6.0.6000]

版權所有 (C) 2006 Microsoft Corporation。保留所有權利。

C:\ myfile.php

你好 PHP CLI!

再重申一次:如果在Windows平台,CLI腳本的第一行一定要寫正確php.exe所在的位置,像這樣(另外,如果要在CLI腳本中加註釋語句,則要把注釋寫在PHP標籤裡面,因為CLI解釋只認識第一行,不在PHP標籤里認為是語法錯誤):

#!C:\php\php.exe -q

這樣,可以看到在命令行下信息已經列印出來,證明該CLI腳本已經成功運行。

2.從命令行上讀取參數

如果想從命令行獲取參數,CLI可以從$_SERVER[‘argc’]和$_SERVER[‘argv”]取得參數的個數和值。我們再建立一個文件,名字為testargs.php,腳本代碼如下:

#!C:\php\php.exe –q

?php

//UNIX和Linux平台下應該為#!/usr/local/bin/php –q

echo “測試獲取參數:\n”;

echo $_SERVER[“argc”].”\n”;

//顯示傳入的參數值,從索引1開始顯示

echo $_SERVER[“argv”][1].”\n”;

echo $_SERVER[“argv”][2].”\n”;

echo $_SERVER[“argv”][3].”\n”;

echo $_SERVER[“argv”][4].”\n”;

?

在命令行輸入如下代碼:

C:\Users\Johntestargs.php Always To Be Best

測試獲取參數:

4

Always

To

Be

Best

因為我們輸入了一串單詞,為「Always To Be Best」,腳本參數以空格分隔。因此,PHP將其計為4個參數,下面對此說明。

$_SERVER[“argc”]數組返回一個整型的數,代表從命令行上回車後一共輸入了幾個參數。

從上例的結果已經看出,要訪問已經傳入的參數值,需要從索引1開始。因為腳本本身的文件已經佔用了索引0,即$_SERVER[“argv”][0]。

3.處理I/O通道

PHP最初設計不是用於與用戶直接的鍵盤輸入或文本輸出結合使用。了解這一設計是至關重要的,因為如果需要在命令行中執行任何操作,都必須能夠與用戶來回通信。

輸入輸出(I/O)通道這個思想來源於UNIX系統,UNIX系統提供3個文件句柄,用以從一個應用程序及用戶終端發送和接收數據。

我們可以把一個腳本的輸出重定向到一個文件:

php world.php outputfile

如果是在UNIX系統下,也可以使用通道定向到另一個命令或應用程序中。例如:

php world.php | sort.

在PHP 5 CLI中,有一個文件流句柄,可以使用3個系統常量,分別為STDIN、STDOUT和STDERR。下面我們分別介紹。

(1)STDIN

STDIN全稱為standard in或standard input,標準輸入可以從終端取得任何數據。

格式:stdin (』php://stdin』)

下面的例子是顯示用戶輸入:

#!/usr/local/bin/php -q

?php

$file = file_get_contents(“php://stdin”, “r”);

echo $file;

?

這段代碼的工作原理與cat命令很相似,迴轉提供給它的所有輸入。但是,這時它還不能接收參數。

STDIN是PHP的標準輸入設備,利用它,CLI PHP腳本可以做更多的事情。如下面例子:

#!/usr/local/bin/php -q

?php

//UNIX平台下第一行應該為#!/usr/bin/php –q

/* 如果STDIN未定義,將新定義一個STDIN輸入流 */

if(!defined(“STDIN”)) {

define(“STDIN”, fopen(‘php://stdin’,’r’))

}

echo “你好!你叫什麼名字(請輸入):\n”;

$strName = fread(STDIN, 100); //從一個新行讀入80個字元

echo ‘歡迎你’.$strName.”\n”;

?

該腳本執行後將顯示:

你好!你叫什麼名字(請輸入):

比如,輸入Raymond之後,將顯示:

歡迎你Raymond

(2)STDOUT

STDOUT全稱為standard out或standard output,標準輸出可以直接輸出到屏幕(也可以輸出到其他程序,使用STDIN取得),如果在PHP CLI模式里使用print或echo語句,則這些數據將發送到STDOUT。

格式:stdout (』php://stdout』)

我們還可以使用PHP函數進行數據流輸出。如下面例子:

#!/usr/local/bin/php –q

?php

$STDOUT = fopen(‘php://stdout’, ‘w’);

fwrite($STDOUT,”Hello World”);

fclose($STDOUT);

?

輸出結果如下:

Hello World

例如,echo和print命令列印到標準輸出。

#!/usr/local/bin/php –q

Output #1.

?php

echo “Output #2.”;

print “Output #3.”

?

這將得到:

Output #1.

Output #2.Output #3.

說明:PHP標記外的新行已被輸出,但是echo命令或print命令中沒有指示換行。事實上,命令提示符重新出現在Output #2.Output #3. 所在的行中。PHP擁有的任何其他列印函數將會像此函數一樣運行正常,任何寫迴文件的函數也是一樣的。

#!/usr/local/bin/php -q

?php

$STDOUT = fopen(“php://stdout”, “w”);

fwrite($STDOUT, “Output #1.”);

fclose($STDOUT);

?

以上代碼將把php://stdout作為輸出通道顯式打開,並且php://output通常以與php://stdout相同的方法運行。

(3)STDERR

STDERR全稱為standard error,在默認情況下會直接發送至用戶終端,當使用STDIN文件句柄從其他應用程序沒有讀取到數據時會生成一個「stdin.stderr」。

格式:stderr (』php://stderr』)

下面的腳本表示如何把一行文本輸出到錯誤流中。

#!/usr/local/bin/php –q

?php

$STDERR = fopen(‘php://stderr’, ‘w’);

fwrite($STDERR,”There was an Error”);

fclose($STDERR);

?

PHP 5.2可以直接使用STDOUT作為常量,而不是定義上面使用的變數$STDOUT,為了兼容之前版本,我們仍使用了自定義變數,如果您使用的是PHP 5.2,則可以參考STDIN的第二個例子。

4.後台運行CLI

如果正在運行一個進程,而且在退出賬戶時該進程還不會結束,即在系統後台或背景下運行,那麼就可以使用nohup命令。該命令可以在退出賬戶之後繼續運行相應的進程。

nohup在英文中就是不掛起的意思(no hang up)。該命令的一般形式為:

nohup –f scriptname.php

使用nohup命令提交作業,在默認情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件。

nohup scriptname.php log.txt

這樣,PHP CLI腳本執行後的結果將輸出到log.txt中,我們可以使用tail命令查看該內容:

tail -n50 -f log.txt

現在再來實現兩個例子,第一個是每隔10分鐘自動生成一個靜態HTML文件,並一直執行下去。腳本代碼如下:

#! /usr/local/bin/php

?php

set_time_limit(0);

while(true){

@fopen(“/usr/local/www/data-dist/content/

article_”.time().”.html”,”w”);

sleep(600);

}

?

保存並且退出vi編輯器,然後賦予genHTML.php文件可執行許可權:

#chmod 755 genHTML.php

然後讓腳本在後台執行,執行如下命令:

$nohup genHTML.php –f

執行上述命令後出現如下提示:

[1] 16623

按回車鍵後將出現shell提示符。上面的提示就是說,所有命令執行的輸出信息都會放到nohup.out文件中。

執行上面命令後,每隔10分鐘就會在指定的目錄生成指定的HTML文件,如article_111990120.html等文件。

如何終止CLI程序的後台運行呢?

可以使用kill命令來終止這個進程,終止進程之前要知道進程的PID號,即進程ID,我們使用ps命令:

www# ps

PID TT STAT TIME COMMAND

561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0

562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1

563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2

564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3

565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4

566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5

567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6

568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7

16180 p0 I 0:00.01 su

16181 p0 S 0:00.06 _su (csh)

16695 p0 R+ 0:00.00 ps

16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php

已經看到PHP的進程ID是:16623,於是再執行kill命令:

$ kill -9 16623

[1]+ Killed nohup /usr/local/www/data/genHTML.php

這時該命令的進程就已經被終止了,再使用ps命令:

$ ps

PID TT STAT TIME COMMAND

82374 p3 Ss 0:00.17 -bash (bash)

82535 p3 R+ 0:00.00 ps

剛才的PHP CLI腳本已經沒有了,如果直接運行ps命令無法看到進程,那麼就結合使用ps apos兩個命令來查看。

注意:上面例子必須運行在UNIX或者Linux系統中,如FreeBSD、Redhat Linux等,在Windows環境不支持nohup命令。

PHP 和cli 有什麼關係 運行一個PHP文件 報錯,該如何解決

CLI 是命令行模式,例如在winXP 的命令行窗口cmd 裡邊,php my_script.php 使用php.exe 直接運行php代碼,相當於控制台應用。

不是web伺服器上運行的。

真需要的話,改成 web伺服器上運行的版本就可以。$argv[0] 是從命令行獲取的參數,改成用變數設置或$_GET或$_POST 獲得。

使用php命令行無法運行php文件

要麼是你PHP沒有安裝到系統里;要麼你的PHP文件有語法錯誤.

你先用:php -v 命令看下會不會顯示PHP的版本信息,如果不會就是PHP安裝出了錯;

如果沒出錯,你寫個xx.php 文件,裡面的內容為:?php echo “Hello, world!\n”;? 然後保存,執行php -f xx.php命令,看看是不是正確運行了。

mac 下命令行執行 php a.php 報錯,php擴展貌似沒有載入,怎麼載入

啟動時看到白屏,按command+r,進入恢復磁碟,選擇實用工具的終端,就可以直接在終端里輸入命令了。但修改終端命令是很嚴肅的事情,可能會影響系統的,如果不確認命令的話,建議不要改哦。還有,如果電腦有重要數據的話,記得先備份一下。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244994.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:05
下一篇 2024-12-12 13:05

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python運行不報錯又無任何結果輸出可能產生的原因以及解決方法

    在Python編程過程中,有時候會出現程序運行不報錯但卻沒有任何結果輸出的情況。本文將從多個方面解析這個問題,並提供相應的解決方法。 一、語法錯誤 語法錯誤是Python程序中最常…

    編程 2025-04-29
  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Python切片索引越界是否會報錯

    解答:當對一個字元串、列表、元組進行切片時,如果索引越界會返回空序列,不會報錯。 一、切片索引的概念 切片是指對序列進行操作,從其中一段截取一個新序列。序列可以是字元串、列表、元組…

    編程 2025-04-29
  • 如何解決Grid監控報錯prvg-1205

    Grid監控是Oracle RAC的重要組件,它可以幫助監視RAC集群的運行狀態和性能,對於集群管理非常關鍵。但是,如果在安裝過程中遇到報錯prvg-1205,將會導致安裝失敗,影…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python命令行pip3 install語法錯誤

    對於Python編程開發者而言,安裝和使用第三方模塊是非常頻繁的操作。而pip3作為Python官方推薦的模塊管理工具,具備包括搜索、安裝、卸載和升級等眾多功能,是大家較為常用的方…

    編程 2025-04-27

發表回復

登錄後才能評論