我正在使用electronic和php创建一个自定义ftp跨平台客户端。我创建了一个简单的php类,该类应该管理ftp连接,文件上载和删除,现在我想在电子应用程序中实现它。我有一个问题,当我尝试向用户提示登录表单后,才能上传文件。用户插入ftp登录凭据后,应该使用ajax请求进行登录。问题是登录将不会发生,这将导致无法上传。工作流程是,在发出第一个帖子后,将实例化用于管理登录名的包装器类,然后在此之后,将上载表单加载到应用程序内部,但不会发生任何上载。使用“网络”选项卡,我可以检查请求,并且我所做的控制器将始终提供200状态代码,不会记录任何错误。我认为问题是因为连接没有跨请求传递。 是否可以在$ _POST请求之间传递变量?对不起,我这个愚蠢的问题和英语。感谢您的帮助。
下面是我的代码段:
用于ajax请求的控制器:
<?php
session_start();
spl_autoload_register(function($class_name){
$class_name = str_replace('//', DIRECTORY_SEPARATOR, $class_name);
require_once "$class_name.php";
});
global $ftp_connection;
global $ftp_manager;
if( isset( $_POST['ftp_login'] ) ){
$ftp_connection = new FTPConnect( $_POST['host'], $_POST['username'], $_POST['password'] );
}
if( isset( $_POST['upload_file'] ) ){
$ftp_manager = new FTPManager( $ftp_connection );
$dir = 'sub.mydomain.net';
echo $ftp_manager->upload($_FILES['uploaded_file'], $dir);
}
?>
Ftp连接包装器类代码:
<?php
/**
*
*/
class FTPConnect{
private $connection;
private $host;
private $username;
private $password;
public function __construct(string $host, string $username, string $password)
{
// If I try to assign the resource it will not work
//$this->connection = ftp_connect($host);
$this->conn = $this->connect( $username, $password );
}
public function getConnection()
{
return $this->connection;
}
public function connect(string $host, string $username, string $password)
{
//$this->connection = ftp_connect($host);
if( $this->connection && ftp_login($this->connnection, $user, $password) ){
ftp_pasv( $this->connection, true );
echo "Connected.!";
}
}
public function disconnect()
{
return ftp_close($this->connection);
}
public function __destruct()
{
$this->disconnect();
}
}
?>
编辑:
我认为连接包装类内部存在错误。我可以序列化和反序列化会话变量中的对象,但是ftp管理类存在问题。问题在于它将需要资源,并且连接包装器类正在传递整数。如何解决此问题,以将ftp_connect资源传递给该类的上载方法?