【问题标题】:php ftp upload is not sending a xml filephp ftp上传不发送xml文件
【发布时间】:2025-11-27 11:30:02
【问题描述】:

我有 php 代码,它从两个数据库表生成 xml 文件并将 xml 文件保存到网站文件夹结构中的目录中。 xml 文件正在正确保存。文件保存后需要通过 ftp 发送到外部 ftp 服务器文件夹。

function send_ftp($source_file, $destination_file)
{
// set up basic connection
$ftp_server = 'svr02.xxxxxxx.com';
$connection_id = ftp_connect('svr02.xxxxxxx.com'); 

// login with username and password
$ftp_user_name = 'xxxxx';
$ftp_user_pass = 'xxxxx';
$login_result = ftp_login($connection_id, $ftp_user_name, $ftp_user_pass); 
ftp_pasv($connection_id, true);

// upload the file
$upload = ftp_put($connection_id, $destination_file, $source_file, 
FTP_ASCII); 

// close the FTP stream 
ftp_close($conn_id); 
}

连接似乎很好,我也可以在 FileZilla 中使用相同的连接和凭据手动上传 xml 文件。

如何找出问题所在,我是否正确使用了 ftp_put 方法?

感谢您的帮助..

2017 年 5 月 22 日更新 我添加了一个函数来返回一个 var_dump 作为我可以在字符串或电子邮件等中使用的内容。

function var_dump_ret($mixed = null) {
  ob_start();
  var_dump($mixed);
  $content = ob_get_contents();
  ob_end_clean();
  return $content;
}

使用该代码,我可以得到 var dump 输出

$login_result = @ftp_login($connection_id, $ftp_user_name, $ftp_user_pass); 
$dump_content = var_dump_ret(var_dump($login_result));
send_to_dev('ftp login result', $dump_content);

登录结果的 var_dump 为“null”,即使它应该为 true 或 false。我认为我目前无法很好地登录。

2017 年 5 月 23 日更新 根据建议,我改为使用 var_export 函数来获取我的变量。 ftp_connect 失败;返回 false,因此代码甚至没有打开 ftp 流。我知道 ftp 服务器前面不能有 'ftp://',我想不出别的了。此 ftp 代码在 GoDaddy 上的共享主机上运行。你觉得 GoDaddy 屏蔽有问题吗?

【问题讨论】:

  • 尝试在 put 命令之前转储var_dump($connection_id, $destination_file, $source_file) 以确保所有参数都正确。还有$upload运行后的值是多少?
  • 你试过二进制模式吗?我认为大多数 ftp 客户端默认为二进制,但你有 FTP_ASCII。
  • Also ftp_close($conn_id); 应该是 ftp_close($connection_id); 并不是说​​它会对您的问题产生太大影响
  • var_dump($upload) 显示什么? ftp_put 是否发出任何 PHP 警告? $destination_file 的格式是什么?
  • 我编辑了我的帖子

标签: php ftp


【解决方案1】:

出于安全目的,Godaddy 共享服务器托管会阻止出站连接。这就是 ftp_connect 不会打开连接的原因。

【讨论】: