2010-04-15 104 views
1

在PHP 5.2.3中,「fdopen」用於讀取/寫入由另一個應用程序打開的文件描述符。從文件描述符獲取文件指針

fdopen(<fileDescriptorId>,"rw"); //It worked fine with PHP 5.2.3 

升級PHP 5.3.2之後,它拋出 「undefined reference to 'fdopen' function」。

請在PHP 5.3.2或任何解決方法建議什麼是替代。

+1

僅供參考,截至PHP/5.3.6,'php:// fd' wrapper [支持](http://php.net/manual/en/wrappers.php.php)。 – DaveRandom 2012-03-30 11:44:47

回答

0

fdopenC語言。 PHP中沒有這樣的功能。我認爲你錯誤地輸入了PHP的fopen函數,對吧?糾正我。謝謝

+0

是的,我也在PHP 5.2.3 API中搜索「fdopen」,但找不到這個。 但是它沒有報告任何與PHP 5.2.3 [錯誤檢查並沒有錯誤類型]的錯誤可能是因爲VolkerK建議可能已經使用該版本構建了一些其他擴展。 – 2010-04-15 15:52:35

2

你的這個fdopen()是否由自定義php擴展提供?
在Linux/Unix服務器

function fdopen($id, $mode) { 
    return fopen("/proc/self/fd/".(int)$id, $mode); 
} 

威力工作。

編輯:見http://linux.die.net/man/5/proc

+0

謝謝。 PHP-cgi binary由在jail目錄(沙箱)中運行的web服務器調用。因此,它無法訪問文件(套接字)路徑(「/ proc/self/fd /」。(int)$ id ,$模式)直接。 有沒有什麼方法可以在PHP中讀/寫給定的文件描述符編號[假設文件路徑不知道在這種情況下是不可訪問的]。 請讓我知道您的意見。 – 2010-04-16 12:08:40

0

由於PHP 5.3.6(並且仍然有效,並與PHP 7.2.1工作),正確的方法來訪問文件的描述符是使用fopenphp://fd

$fd = 3; 
$pipe = fopen("php://fd/{$fd}", 'w'); 
fwrite($pipe, 'hello!');