首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel中的CFFTP等效项

Laravel中的CFFTP等效项
EN

Stack Overflow用户
提问于 2018-04-10 04:35:27
回答 1查看 436关注 0票数 0

我有一个ColdFusion页面,在该页面上建立了到远程FTP服务器的安全ftp连接,并且列出了该服务器上某个目录中的所有文件的名称(在查询对象中)。这在CF中相对简单-使用cfftp标记打开ftp连接,然后再次使用cfftp标记列出特定目录中的文件:

代码语言:javascript
复制
<cfftp action = "open"
              username = "username"
              connection = "myConnection"
              password = "password"
              fingerprint = "(eight pairs of hexadecimal values in the form 
              hh:hh:hh:hh:hh:hh:hh:hh)"
              server = "xxx.xxx.xx.xx"
              secure = "yes">

    <cfftp action = "listDir"
                connection="myConnection"
                directory="Output_Directory"
                name="qDir" />
<!--- Files in the specified directory are now stored in a query object named "qDir", and their filenames can be pulled using a CF query of query --->

我是PHP/Laravel的新手,正在尝试弄清楚如何在Laravel中做同样的事情。到目前为止,我还没有找到任何视频或教程来解释如何在Laravel中打开ftp连接(正常或安全),或者如何在建立连接后查看目录中的文件。

我确实在https://laravel.com/docs/5.6/filesystem#downloading-files上找到了一些关于如何在filesystems.php页面中配置SFTP驱动程序的内容。我想,在我的Laravel站点中打开任何SFTP连接之前,都需要对其进行设置。但是,我发现这有点令人困惑。如下所示,该代码似乎需要"privateKey“和"password”的值,并且没有包含可选的“指纹”设置,我将其包含在上面的CFFTP标记中。

代码语言:javascript
复制
//include on filesystems.php:

'sftp' => [
    'driver' => 'sftp',
    'host' => 'example.com',
    'username' => 'your-username',
    'password' => 'your-password',

    // Settings for SSH key based authentication...
    // 'privateKey' => '/path/to/privateKey',
    // 'password' => 'encryption-password',

    // Optional SFTP Settings...
    // 'port' => 22,
    // 'root' => '',
    // 'timeout' => 30,
],

我可以通过ftp客户端(Bitvise)安全地连接到ftp服务器,它只需要用户名、密码、主机IP和端口(22)。所以我不确定需要向代码密码提供什么"privateKey“或"password”值,为什么在“sftp”数组中会有两个名为“above...nor”的变量(一个用于“privateKey”,一个用于"encryption-password")。

Laravel似乎有很好的教程视频--有谁能告诉我哪些地方涉及ftp/sftp,特别是“打开”和"listDir“类型的操作?(我特别在寻找Laravel --我可以自己弄清楚它是如何在普通PHP中完成的)。非常感谢。

(附录)稍后在这里添加此代码,以便我可以将以下代码格式包装为代码格式。我认为我需要做的一件事是使用ftp文件系统驱动程序,而不是sftp文件系统驱动程序,并将'ssl‘设置为true。因此,在filesystems.php上,我应该有如下内容:

代码语言:javascript
复制
'ftp' => [
            'driver'   => 'ftp',
            'host'     => env('FTP_SERVER'),
            'port'     => 22,//env('FTP_PORT'),
            'username' => env('FTP_USERNAME'),
            'password' => env('FTP_PASSWORD'),
            'passive'  => true,
            'ssl'      => true,
            'timeout'  => 30,
            'root'     => '/',
        ],

不过,仍在努力建立连接。当我尝试这样做的时候,我得到了一个错误信息:"Use of undefined constant FTP_BINARY - assumed 'FTP_BINARY'“。解决了这个问题-是因为我需要在php配置中启用php_ftp.dll,因为这在Windows默认情况下是不启用的。但是现在我得到了一个不同的错误消息--“无法连接到主机xxx.xxx.xx.xx端口:22”。我会深入调查,看看问题出在哪里,然后再报告。

(稍后)看起来我遇到了某种身份验证问题。我尝试使用普通的PHP连接到同一个FTP服务器,即ftp_ssl_connect()函数。该函数返回false,这意味着连接时出错。(在我启用php_ftp.dll之前,我只是收到一条错误消息,指出ftp_ssl_connect()是一个未定义的函数)。想知道省略指纹是否与此有关,我们之前将指纹作为参数包含在Coldfusion cfftp标签中。但这不是Laravel或核心PHP函数中可能的参数。Digging...will报告...

(4/11/18)关键的问题似乎是cfftp标签到底发生了什么,以及它是如何建立连接的(sFTP,或FTPS?)因为我们想要在PHP/Laravel中重新创建它的工作方式。关于这个,我已经问了一个单独的问题。

cfftp标记的文档中没有提到使用sFTP或FTPS。它只说明当您指定secure="yes“时,它允许您使用对称或非对称加密打开到Secure Shell (SSH)服务器的连接。在使用对称加密时(这就是我们正在做的),您需要传递用户名、密码和指纹(我们就是这么做的)。

可以在cfftp标记中指定端口;如果未指定端口,则默认为21。作为测试,我显式地将端口作为21和22进行了传递,并且连接在这两种情况下都工作得很好。我不确定这是为什么;我希望它能在一种或另一种情况下工作,但不是两种情况都能工作。

同时,如果我们确实需要使用SFTP,我已经尝试使用ssh2_connect()函数在core PHP中建立到ftp服务器的SFTP连接。尽管我已经添加并启用了php_ssh2.dll扩展,但我收到一条错误消息,指出此函数未定义,因此这是另一件需要研究的事情。

EN

回答 1

Stack Overflow用户

发布于 2018-04-10 04:45:15

如果您在privateKey连接上使用公钥身份验证,则为SSH域。公钥身份验证用作标准用户名/密码身份验证的替代方案。它通常被认为比用户名/密码更安全。Here's a decent primer

Laravel的SFTP文件系统驱动程序使用PHP联盟的flysystem-sftphttps://github.com/thephpleague/flysystem-sftp

如果选择不使用公钥身份验证,则可以将该字段注释掉。第二个password条目可能只是文档中的一个拼写错误;有关实际的配置语法,请参阅flysystem-sftp项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49741314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档