ftp_fput和ftp_put有什么区别?

7
在PHP及其手册中,我无法清楚地找到ftp_fputftp_put之间的区别。 请问有人能澄清这两种方法的区别吗?

ftp_fput 似乎接受文件句柄,而 ftp_put 接受文件名。 - Blender
4个回答

5

ftp_fput()需要一个已打开的资源,而ftp_put()只需使用(本地)文件名。

ftp_put($foo, $bar, $filename, $baz);
ftp_fput($foo, $bar, fopen($filename, 'r+b'), $baz);

你的意思是,ftp_fput 在传输之前实际上只读取文件一次吗? - 夏期劇場
1
不,我的意思是fopen()使用一个打开的流资源。上面的两个例子完全等价。如果您已经有一个打开的资源,或者想处理特殊类型的资源(如php://temp或远程资源,如http://google.com),请使用ftp_fputs()。如果您只想上传本地文件,则没有必要先自己打开它(也就是说:使用ftp_put())。 - KingCrunch

2
  • ftp_fput
    • "将打开的文件上传到FTP服务器"
  • ftp_put
    • "将文件上传到FTP服务器"

更具体地说,ftp_fput使用由fopen创建的资源作为要上传的文件,而ftp_put则使用文件名字符串。


1

ftp_put需要一个文件名,而ftp_fput需要一个文件句柄:

ftp_put($conn_id, "remote_file_name.txt", "local_file_name.txt", FTP_ASCII);

但是

$file_handle = fopen("local_file_name.txt", "r");
ftp_fput($conn_id, "remote_file_name.txt", $file_handle, FTP_ASCII);

哦,好的现在我明白了,ftp_fput需要在传输前打开文件。嗯...在传输之前读取整个文件的好处是什么呢? :( 所以我认为这不是一个好的选择方法。 - 夏期劇場
如我在回答的评论中所提到的:打开文件并不会读取它(至少目前还没有)。要读取文件,请使用 fread() ;) 是的,如果您不需要打开它,则自己打开它是没有用的。 - KingCrunch
fopen 不会读取整个文件,它只是打开文件。通常情况下,ftp_put 是首选的方法,但如果您事先验证文件内容,则可以使用 ftp_fput。在验证后仍然可以使用 ftp_put,但在 Linux 中使用时不太安全(当您的文件处于打开状态时,该文件可能会被重新创建)。 - Mark

0

ftp_fput() 允许从文件中的某个位置开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接