[英]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.