[英]How do I upload files to Amazon EC2 server in php?
我在一个 EC2 实例上安装了 Apache 服务器来提供 Amazon EFS 文件系统中的文件。 然后我将 EFS 安装在 apache root /var/www/html
下。 我在此路径下创建了子文件夹。 现在我想使用 php 将文件从我的 web 应用程序上传到该文件夹。
我试过使用 phpseclib/SFTP。 我做的对吗?
include_once($dir.'vendor/autoload.php');
$key = PublicKeyLoader::load(file_get_contents($ppkpath));
$ssh = new SFTP('ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com');
if (!$ssh->login('ec2-user', $key)) {
exit('Login Failed');
}else{
echo "Logged in";
}
$file_name = $_FILES['file_path']['name'];
$file_tmp =$_FILES['file_path']['tmp_name'];
$uploadPath = "/var/www/html/efsmount/Foldername";
//if (ssh2_scp_send($ssh, $_FILES["file_path"]["tmp_name"], $uploadPath, 0644)) {
if ($ssh->put($uploadPath, $_FILES["file_path"]["tmp_name"], SFTP::SOURCE_LOCAL_FILE)) {
$sftp->chmod(0644, $uploadPath);
echo "Uploaded";
}
else
{
echo "Upload Failed";
}
Output 是: Upload Failed
。 没有其他错误信息。
我找到了解决方案。
为了将文件从本地计算机上传到 EC2 实例,您需要允许 ec2-user 帐户操作 apache 文档根目录中的文件。
我执行了这些步骤来更改目录权限。 之后我运行我的代码。 它成功上传文件。
我修改后的代码:
include_once($dir.'vendor/autoload.php');
$key = PublicKeyLoader::load(file_get_contents($ppkpath));
$ssh = new SFTP('xx.xxx.xxx.xxx');
if (!$ssh->login('ec2-user', $key)) {
exit('Login Failed');
}else{
echo "Logged in";
}
if (!empty($_FILES) && isset($_FILES)) {
$file_name = $_FILES['file_path']['name'];
$file_tmp =$_FILES['file_path']['tmp_name'];
$uploadPath = "/var/www/html/efsmount/Foldername/";
$path = $uploadPath.$file_name;
if ($ssh->put($path, $_FILES["file_path"]["tmp_name"], SFTP::SOURCE_LOCAL_FILE)) {
echo "Uploaded";
}
else
{
echo "Upload Failed";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.