2012-07-12 54 views
0

在运行PHP 5.2.17的服务器上,使用任何利用内置ftp包装器上传文件的函数,创建一个空文件在服务器上:php FTP Wrapper写空文件(0字节),FTP扩展不是

  • file_put_contents()回报与字节
  • copy()的准确数量也将返回真

两个创建文件,但它是空的。

当使用FTP扩展名ftp_put()进行尝试时,无论是在二进制还是ascii模式下,它都能正常工作。

在我的工作站上使用PHP 5.3.10,它在某种程度上也适用于包装。

在代码:

$source = '/tmp/testfile'; 
$target = 'ftp://user:[email protected]/testfile'; 

copy($source, $target); 

没有给出错误或警告,但保留在服务器上的一个空文件。

$source = '/tmp/testfile'; 
$target = 'testfile'; 

$ftp = ftp_connect('example.com'); 
ftp_login($ftp, 'user', 'pass'); 
ftp_put($ftp, $target, $source, FTP_ASCII); 
ftp_close($ftp); 

在各方面都有效。

感谢您的任何建议!

+1

您应该提供代码和调试输出,我们无法准确猜测您在做什么。 – 2012-07-12 15:21:37

+0

还要确保您正在使用的服务器未满(磁盘配额已超出),否则您上传的所有内容都将被创建,但始终为空[0字节]。 – 2012-07-12 15:27:44

+0

Thx为您的意见。 @DexterHuinda ftp_put()适用于我,所以没有重复,并且服务器不能满。 – Andy 2012-07-12 15:32:25

回答

-1

你试过SSH2库吗?下面的一些示例实现:

public function uploadSFTP($host_name, $port, $user, $publicSshKeyPath, $privateSshKeyPath, $remoteFile, $localFile, $fileOperation = 'w') 
{ 
    $ssh_conn = ssh2_connect($host_name, $port); 

    if (ssh2_auth_pubkey_file($ssh_conn, $user, $publicSshKeyPath, $privateSshKeyPath)) 
    { 
     $sftp_conn = ssh2_sftp($ssh_conn); 
     $inputfileStream = @fopen('ssh2.sftp://' . $sftp_conn . $remoteFile, $fileOperation); 

     try 
     { 
      if (!$inputfileStream) 
       throw new Exception('Could open remote file for writing: ' . $remoteFile); 

      $localFileContents = @file_get_contents($localFile); 

      if ($localFileContents === FALSE) 
       throw new Exception('Could not open local file for reading :' . $localFile); 

      if (@fwrite($inputfileStream, $localFileContents) === FALSE) 
       throw new Exception('Could not SFTP file'); 
     } 
     catch (Exception $e) 
     { 
      // Do something... 
     } 

     fclose($sftpInfileStream); 
    } 
} 
+0

谢谢,但没有回答这个问题。使用普通的ftp-extension已经有效。 – Andy 2012-07-12 16:02:12