2017-07-15 10 views
0

私は学校のプロジェクトを行っていて、うまくいっていたと思っていました。ユーザーがイメージファイルを永久ファイルシステムでアップロードできないことがわかりました。私のアプリ全体は、ユーザーがイメージをアップロードすることをほぼ中心にしています。PHPでS3にファイルをアップロードする

私はAWS S3ストレージを使用するためにどこかを読んでいます。だから私はhttps://devcenter.heroku.com/articles/s3の指示に従っていた。

私は、構成プロセスのほとんどを経てきたが、最後でそれは言う:それはない

という名前のファイルにindex.php

<?php 
require('vendor/autoload.php'); 
// this will simply read AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY from env vars 
$s3 = Aws\S3\S3Client::factory(); 
$bucket = getenv('S3_BUCKET')?: die('No "S3_BUCKET" config var in found in env!'); 
?> 
<html> 
    <head><meta charset="UTF-8"></head> 
    <body> 
     <h1>S3 upload example</h1> 
<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['userfile']) && $_FILES['userfile']['error'] == UPLOAD_ERR_OK && is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
    // FIXME: add more validation, e.g. using ext/fileinfo 
    try { 
     // FIXME: do not use 'name' for upload (that's the original filename from the user's computer) 
     $upload = $s3->upload($bucket, $_FILES['userfile']['name'], fopen($_FILES['userfile']['tmp_name'], 'rb'), 'public-read'); 
?> 
     <p>Upload <a href="<?=htmlspecialchars($upload->get('ObjectURL'))?>">successful</a> :)</p> 
<?php } catch(Exception $e) { ?> 
     <p>Upload error :(</p> 
<?php } } ?> 
     <h2>Upload a file</h2> 
     <form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF']?>" method="POST"> 
      <input name="userfile" type="file"><input type="submit" value="Upload"> 
     </form> 
    </body> 
</html> 

2つの質問が次を入れてどこに置くかindex.php。私はそれがプロジェクトのルートディレクトリにあると仮定します。

私の他の質問はコード自体にあります。 15行目ではdo not use 'name' for upload (that's the original filename from the user's computer)とはどういう意味なのか分かりません。ユーザーのアップロードファイル名はどのように分かりますか?

+0

これを既存のアプリケーションの 'index.php'に入れないでください。これはスタンドアロンのサンプル/デモアプリケーションです。 –

答えて

1

1)index.phpをプロジェクトのルートフォルダまたはコアファイルを含む別のフォルダに配置することができます(あなたの場合は自動ロード)。 2)名前 - ファイル名です。例:

<form method="post" action="index.php"> 
<input type="file" name="myfile"> 
<button>Submit</button> 
</form> 

この場合、['myfile']['name']を使用してください。 ファイル名を変更(または一意の名前を使用)する必要がある場合は、time().'_'.$_FILES['userfile']['name']のようなものを追加できます。

ファイル名が$_FILES['userfile']['name']の場合、アップロードしたファイルと同じ名前でファイルが保存されます。たとえば、file.txtをアップロードしても、同じ名前のファイルがすでにS3に存在する場合、そのファイルは置き換えられます。たぶん彼らはこの問題を説明します。動的なファイル名を使用することは可能です。