我正在研究一些PHP框架的PHP cli工具,並有一種情況下,我的腳本或者從文件讀取或STDIN
。由於並非所有操作(如fseek()
)在STDIN
上都有效,因此我正在尋找一種方法來檢測此問題。如何確定一個流是否是在STDIN PHP
0
A
回答
4
原來,功能stream_get_meta_data()
提供了一個解決方案,在標準的時候,結果是:
array(9) {
["wrapper_type"]=>
string(3) "PHP"
["stream_type"]=>
string(5) "STDIO"
["mode"]=>
string(1) "r"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
["uri"]=>
string(11) "php://stdin"
["timed_out"]=>
bool(false)
["blocked"]=>
bool(true)
["eof"]=>
bool(false)
}
所以,你可以做一個簡單的字符串的URI比較:
function isSTDIN($stream) {
$meta = stream_get_meta_data($stream);
return strcmp($meta['uri'], 'php://stdin') == 0;
}
該解決方案將工作流恆定STDIO
是否被使用,或者舊fopen('php://stdin', 'r')
,它仍然隱藏在舊代碼中。
1
只需選中if($fp === STDIN)
+0
我想到了這一點,但我正在使用舊的'fopen('php:// stdin..'語法,使比較失敗的遺留代碼。這應該工作,如果使用常量代替。 – 2011-04-06 20:17:21
相關問題
- 1. 是否有可能有多個STDIN流?
- 2. php is_function(),以確定一個變量是否是一個函數
- 3. 如何確定一個點是否是一個四邊形
- 4. 如何確定一個url是否是一個圖像?
- 5. 如何確定一個多邊形是否在另一個內?
- 6. 確定是否一個iframe是屏幕
- 7. 確定一個點是否在路上
- 8. 確定行是否在一個DataGridView
- 9. PHP:確定類是否是另一個類的擴展
- 10. 如何確定一個目錄是否在同一分區
- 11. SPARQL:給定一個dbpedia url,如何確定實體是否是一個人?
- 12. 如何確定一個字符串是否是ksh的數字
- 13. 如何確定一個組是否是安全組?
- 14. 如何確定一個頁面是否是模式
- 15. 如何確定對象是否是一個NSNumber
- 16. 如何確定一個類是否是其他類的子類?
- 17. 如何確定一個特定的資源是否有數據
- 18. 如何確定一個句子是否在談論某個特定主題?
- 19. 如何確定URL是否在PHP中重定向?
- 20. 如何確定一個變量是否爲小數,在PHP中小於0.01?
- 21. 如何確定一個座標是否在mutilpolygon內?
- 22. 如何確定是否存在另一個Chrome(ium)擴展?
- 23. 如何確定Task.Run是否在一個循環內完成
- 24. 如何確定一個網頁是否有RSS或不在C#
- 25. 如何確定一個視圖在ListView中是否可見?
- 26. 如何確定System.Object是否是System.Type
- 27. PHP - 如何確定是否請求從一個特定的文件
- 28. 如何確定一個字符串是否有效JSON?
- 29. 如何確定它是否是使用PHP的移動設備?
- 30. 如何確定值是否是PHP中的日期
我不明白。當然,你必須知道你是否將stdin或標準文件傳遞給特定的函數?你的意思是你不知道'stdin'是否對應於一個TTY或一個正在傳入的文件? – 2011-04-06 20:12:52
因爲'stdin'上的數據來自於tty或者關於尋找能力的文件並不重要,所以我相信他不需要一個相當於'isatty()'的PHP。我猜他有一個接受fd的函數,他希望使他的代碼具有通用性,因此可以使用常規文件和stdin。 – ThiefMaster 2011-04-06 20:19:02
@ThiefMaster就是這樣。 – 2011-04-06 20:21:22