首页 > 解决方案 > PHP 上的一些 FTP 命令可以在本地主机上工作,但不能在客户端实时站点上工作

问题描述

我为我的客户项目创建了一个模块,该模块应该通过 FTPS 将文件发送到 Web 服务。Web 服务仅允许从某些 IP 地址进行连接。

它适用于我的本地主机,但某些 FTP 命令在客户端的实时站点上不起作用。

例如,我主要使用 ftp_ssl_connect 进行连接。它适用于客户的网站。

然后,我使用 ftp_login 登录。它也适用于客户的网站。

然后,我使用 ftp_pasv 进入被动模式。它也适用于实时站点。

但是当我尝试使用 ftp_nlist 命令获取文件列表时,它可以在我的本地主机上运行,​​但拒绝在客户端的站点上执行。

此外,当我使用命令 ftp_put 发送文件时,它可以在我的本地主机上运行,​​但拒绝在客户端项目中运行。

  $config = yrv_eboks_get_config_data();
  $conn = ftp_ssl_connect($config->ftp_host, 21, 15);
  if (ftp_login($conn, $config->ftp_login, $config->ftp_password)) {
    if (ftp_pasv($conn, true)) {
      $files = ftp_nlist($conn, ".");
      var_dump($files);
    } 
  } else {
    // "Could not login via login via FTPS"
  };

我不知道问题出在哪里以及如何解决。

你能告诉我,问题出在哪里,该怎么办?

标签: phpftps

解决方案


ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

将其写在文件顶部并访问 php 文件,您的浏览器将显示错误。您确定在您的主机上启用了这些功能吗?因为共享服务器禁用了许多功能以防止滥用,例如源、符号链接、ftp_put 等。您可以通过使用以下代码创建 phpfile 来检查禁用了哪些功能

<?php
phpinfo();
?>

将上面的代码保存为 anyname.php 然后访问它,您将在那里看到 php 信息。按 ctrl+f (搜索)按钮并写入 disable_functions ,您将看到所有禁用的功能或使用以下代码创建文件并从浏览器访问它(如果您的提供商也阻止了 ini_get 功能,它可能无法正常工作)

<?php echo "Disabled functions: ".ini_get('disable_functions')."\n"; ?>

如果您的功能被禁用,您可以通过在您的目录中创建 php.ini 文件来启用它们或请求您的托管服务提供商启用它们。

启用功能:使用以下代码创建 php.ini

disable_functions = ""

但是,如果您的托管环境优先使用默认 php.ini,则它可能无法正常工作,以便更好地与提供商联系并请求他们启用。


推荐阅读