作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在使用FTP的ftp_raw
函数时遇到问题。
我需要获得FTP目录的文件和目录的非常精确和详细的列表(ftp_rawlist
对于datetimes不够精确,因此未指定)。所以我想使用更规范的命令:MLSD
。
我可以获取想要的文件列表,但是从套接字获取数据后,就无法再使用PHP的ftp*
函数了……
这是我的代码的一部分:
//Current folder = "/"
$directory = "/www/";
$currentFolder = ftp_pwd($ftpStream);
echo $currentFolder;
echo ' : ';
ftp_chdir($ftpStream, $directory);
$ret = ftp_raw($ftpStream, 'PASV');
if (preg_match('#^227.*\(([0-9]+,[0-9]+,[0-9]+,[0-9]+),([0-9]+),([0-9]+)\)$#', $ret[0], $matches)) {
$controlIp = str_replace(',', '.', $matches[1]);
$controlPort = intval($matches[2]) * 256 + intval($matches[3]);
$socket = fsockopen($controlIp, $controlPort);
ftp_raw($ftpStream, 'MLSD');
$s = '';
while (!feof($socket)) {
$s .= fread($socket, 4096);
}
fclose($socket);
}
echo ftp_pwd($ftpStream); //line 256
echo ' --> ';
ftp_chdir($ftpStream, $currentFolder); //line 258
echo ftp_pwd($ftpStream); //line 260
/ : <br />
<b>Warning</b>: ftp_pwd(): Transfer complete. in <b>/media/sf_web/x/webService/models/Ftp.class.php</b> on line <b>256</b><br />
--><br />
<b>Warning</b>: ftp_chdir(): "/www" is current directory. in <b>/media/sf_web/x/webService/models/Ftp.class.php</b> on line <b>258</b><br />
<br />
<b>Warning</b>: ftp_pwd(): CWD command successful. in <b>/media/sf_web/x/webService/models/Ftp.class.php</b> on line <b>260</b><br />
/ : /www --> /
*/
$ftpStream
?
最佳答案
从7.2开始,PHP现在就支持MLSD
命令 ftp_mlsd
function。
原始答案:
作为所有FTP数据传输命令,MLSD
发出多个响应。
通常是一个或多个1xx
初步回复,例如
150 Opening data channel for directory listing of "/path"
226 Transfer complete.
ftp_raw
函数仅读取一个响应,即初步
150
一个。将最终的
226
响应保持在“队列中”。
PWD
)后,它会找到待处理的
226
响应,然后在该响应上停止。
PWD
响应再次保留在“队列中”:
257 /www is current directory.
PWD
的积极回应是
257
,而不是
226
。对
CWD
的积极回应是
250
,而不是
257
等。
关于php - 带有MLSD和fsockopen的PHP的ftp_raw函数: weird blocking behaviour and Warning messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525081/
我是一名优秀的程序员,十分优秀!