PHP bug:使用fopen函式經由SSH2連接SFTP失效
原文請參閱參考資料1,此Bug發生於PHP 5.6.28與7.0.14以上版本,舉例來說下面這段語法是連接SFTP,準備開啟一個檔案做上傳寫入:
PHP程式碼 紅色是帶入的變數 |
… $sftp = ssh2_connect($host, $port); $stream = fopen(“ssh2.sftp://" . $sftp . “/path/" . $filename, ‘w’); … |
以這個例子為例,程式執行到第二行程式碼就停止無反應,嘗試echo測試時會得到如下結果:
輸出結果 紅色是帶入的變數 |
ssh2.sftp://Resource id #NNN/path/abc.xml |
這個結果是無法取得連線資源並繼續執行的,須修改程式碼為以下的方式:
PHP程式碼 紅色是帶入的變數 |
… $sftp = ssh2_connect($host, $port); $stream = fopen(“ssh2.sftp://" . intval($sftp) . “/path/" . $filename, ‘w’); … |
增加intval函式後將$sftp的結果轉為數字,原程式碼才可以正常執行。
這問題可能會發生在更新PHP版本到上述的版本以上時發生,造成原本SFTP可以運作的程式失效。
參考資料:
Bug #73561 opendir() using a ssh2.sftp:// resource does not work
我要留言