ftp_site()
(PHP 4, PHP 5, PHP 7)
向服务器发送 SITE 命令
说明
ftp_site (resource $ftp_stream,string $cmd) : bool
ftp_site() 函数向 FTP 服务器发送由参数$cmd指定的命令。
SITE命令是非标准化的,不同的服务器不尽相同。主要用于处理文件权限以及组成员等事情。
参数
- $ftp_stream
FTP 连接资源。
- $command
SITE 命令。注意本参数没有经过处理,在文件名有存在空格或其它特殊字符的情况下可能会有问题。
返回值
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
范例
向一个 FTP 服务器发送一条 SITE 命令
<?php /* Connect to FTP server */ $conn = ftp_connect('ftp.example.com'); if (!$conn) die('Unable to connect to ftp.example.com'); /* Login as "user" with password "pass" */ if (!ftp_login($conn, 'user', 'pass')) die('Error logging into ftp.example.com'); /* Issue: "SITE CHMOD 0600 /home/user/privatefile" command to ftp server */ if (ftp_site($conn, 'CHMOD 0600 /home/user/privatefile')) { echo "Command executed successfully.\n"; } else { die('Command failed.'); } ?>
参见
ftp_raw()
向 FTP 服务器发送命令
Hya, Recently I had to work with FTP over PHP, since I didn't found any help about this topic I decided to post this here. If you need to chmod one file, I tested this on the ftp server using a ftp client and after I knew that the ftp server supported chmod I used the following commands: $upload = ftp_put($conn_id, "/home/to/public_html/index.php", $source_file, FTP_ASCII); $ch=@ftp_site($conn_id,"chmod 755 /home/to/public_html/index.php"); Hope this help! T
To send a SITE command and get the result, you can try this: <?php function ftpsite($conn, $cmd) { return ftp_raw($conn, "SITE $cmd"); } ?>
Use ftp_raw() (PHP 5+) instead of ftp_site() if you need the results of the remote command.
I'd like to follow up with Ivan's observation there. Unless I am missing the obvious, which is entirely possible of course, this command is quite useless unless it returns the data from the SITE <foo> request. Besides the obvious SITE HELP command, another one that would require catching the feedback would be the SITE LOCATE | SITE SEARCH commands. I completely recognize that SITE <foo> commands are indeed insanely proprietary, but the fact still remains that changing this to return the results, or at least having the option to do so (such as exec() and the like) would be vastly preferred to the current method of returning true/false values. Thanks.
site commands are extra-functionality provided by some ftp servers, and depend on the server : e.g. trying "ftp> site help" (with an interactive ftp client) on a proftp server would give : 214-The following SITE extensions are recognized: RATIO -- show all ratios in effect The following SITE commands are recognized (* =>'s unimplemented). HELP CHMOD 214 Direct comments to admin@ftp.blahblah.fr while with wu-ftpd on can typically get : 214-The following SITE commands are recognized (* =>'s unimplemented). UMASK GROUP INDEX GROUPS IDLE GPASS EXEC CHECKMETHOD CHMOD NEWER ALIAS CHECKSUM HELP MINFO CDPATH 214 blabla Unfortunately, ftp_site only returns true or false. It would be nice to have a way to get the server's reply in full : ftp_site('help') return 1, which pretty much useless. Hope that helps, Ivan
I wrote some functions for an ftp server for windows called GuildFTPd. Here they are, they are pretty much so self explanitory: <? function guildftpd_adduser($ftp_stream,$group,$username,$password){ ftp_site($ftp_stream,"SITE ADDUSER $group $username $password"); } function guildftpd_addgroup($ftp_stream,$groupname){ ftp_site($ftp_stream,"SITE ADDGROUP $groupname"); } function guildftpd_deluser($ftp_stream,$username){ ftp_site($ftp_stream,"SITE DELUSER $username"); } function guildftpd_addpath($ftp_stream,$username,$path,$vpath){ ftp_site($ftp_stream,"SITE ADDPATH $username $path $vpath"); } function guildftpd_delpath($ftp_stream,$username,$path,$vpath){ ftp_site($ftp_stream,"SITE DELPATH $username $path $vpath"); } function guildftpd_anon($ftp_stream){ ftp_site($ftp_stream,"SITE ANON ALLOW"); } function guildftpd_anond($ftp_stream){ ftp_site($ftp_stream,"SITE ANON DENY"); } function guildftpd_chpass($ftp_stream,$user,$pass){ ftp_site($ftp_stream,"SITE CHPASS $user $pass"); } function guildftpd_disable($ftp_stream,$user){ ftp_site($ftp_stream,"SITE DISABLE $user"); } function guildftpd_enable($ftp_stream,$user){ ftp_site($ftp_stream,"SITE ENABLE $user"); } function guildftpd_who($ftp_stream){ $who = ftp_site($ftp_stream,"SITE WHO"); } function guildftpd_kick($ftp_stream,$user); ftp_site($ftp_stream,"SITE KICK $user"); } function guildftpd_msg($ftp_stream,$text); ftp_site($ftp_stream,"SITE MSG $text"); } ?>