远程文件的创建、写入、修改、删除

远程文件的创建、写入、修改、删除

最近项目中需要将textarea中提交的内容以文件的形式保存至文件服务器的指定文件夹下,实现过程中遇到一些阻碍,走了一些弯路,特此纪录。

1.远程文件的创建及写入

方案一
对于本地文件的创建及写入可以直接利用fopen()、fwrite()、fclose()

$path = '../materials/'.$id.'/content.html';
$dir = dirname($path);
 //文件目录不存在,则创建
if(!is_dir($dir))
	$dir = mkdir($dir,0777);	
$contenttxt = fopen($path,"a+");
fwrite($contenttxt, $_POST['content']);
fclose($contenttxt);
//以上三行等价于file_put_contents($contentpath,$content);  

对于远程文件同样可以使用fopen()、fwrite()、fclose(),以下试一anonymous(匿名)形式链接的服务器;

$file = fopen("ftp://你的IP或者域名/materials/65/content.txt",'w');
fwrite($file, "123454");
fclose($file);

要以“anonymous”以外的用户名连接服务器,需要指明用户名(可能还有密码),例如“ftp://user:[email protected]/path/to/file”(也可以在通过需要
Basic 认证的 HTTP 协议访问远程文件时使用相同的语法)。

但由于我们文件服务器对于匿名链接的权限仅限于文件的读取,并没有写的权限,于是要使用用户名密码的形式链接到文件服务器,但是!!小编在这里还遇到了一个比较尴尬的问题,小编的password中含有@符号[捂脸],就不能将用户名密码直接在路径中登陆了(然而小编表示并不想修改密码),于是有了以下的一波神操作当然最后被证实不可行的操作。(***所以以下用分隔符分隔的一段可以忽略,只是小编对自己神操作的吐槽以及想问有没有大佬能解决密码里面含@的解决方法:)***)


于是想到了先链接到文件服务器,再执行创建及写入的操作:)

$connect = ftp_connect('IP','21') or die("FTP服务器连接失败");
ftp_login($connect,'USER','PASSWORD') or die("FTP服务器登陆失败");
ftp_pasv($connect,1); // 打开被动模拟
$file = fopen($contentpath, 'w');
fwrite($file,$content);
fclose($file);
//file_put_contents($contentpathGBK,$content);

然而!fopen()等方法并不会理会你之前对文件服务器的链接,并不能进入文件服务器,更不要说新建文件还要忘里面写入内容了!!!!(此段是对自己的吐槽!)


方案二
对于方案一我觉得还是可行的(如果没有出现像我一样的小阻碍的话),但是我由于种种原因并没有采用方案一,而是选择绕道,即现在本地新建文件再将本地文件上传上去;

//在本地临时文件夹新建文件,并写入内容
$temp = fopen(sys_get_temp_dir().'\content.txt', 'w');
fwrite($temp, "12345467778"); 
$tempname = sys_get_temp_dir().'\content.txt';  //临时文件的路径
//链接文件服务器,将新建的临时文件上传到文件服务器
$connect = ftp_connect('IP','21') or die("FTP服务器连接失败");
ftp_login($connect,'USER','PASSWORD') or die("FTP服务器登陆失败");
ftp_put($connect,"content.txt",$tempname,FTP_BINARY);
fclose($temp);
ftp_close($connect);

sys_get_temp_dir ( void ) : string
返回 PHP 储存临时文件的默认目录的路径。

以上方案二就是我在项目中用的方案,但在之前的经验中,有一个曾经用的方案,作为其它方案吧;

其它方案
方案一对小编的阻碍在于没能够往远程服务器上新建文件并写入内容,于是可以将执行保存的php文件直接放在文件服务器上,即可以将表单直接提交到文件服务器的执行保存的php文件上,该方案亲测可行!
(但文件服务器毕竟是用于保存文件,不建议直接远程执行php文件。)

2.修改及删除

对于远程服务器上的文件的删除比较简单,可以直接使用ftp_delete()

FTP方法可参考:
http://www.w3school.com.cn/php/php_ref_ftp.asp


对于修改内容,同理我的操作是:
先将已经存在的文件删掉,再用方案二的创建及写入,上传新的文件即可达到修改的功能。

以上是个人在做项目过程中遇到的问题,以及各种神操作的纪录,欢迎各路大佬指点,共同学习!

你可能感兴趣的:(PHP,FTP)