パソコン情報

PHPで複数ファイルをWEBサーバーにアップロード・一覧表示・削除

ココがポイント

FTPを使わずに複数ファイルをアップロードしたい!

 

PHPコードで複数ファイルをアップロード

簡単にネット検索すれば、複数ファイルをWEBサーバーにアップロードするPHPプログラムが見つかるだろうな!って思っていたらなかなか時間がかかってしまいました。

いろいろと参考になるPHPコードやHTML、javascriptなどが見つかるのですが、思ったように動かなかったりしました。

やっと思ったようなコードが見つかった頃には数時間が経過していました。

複数ファイルがアップロードできるようになったのはいいのですが、下記の機能も実装しました。

  • どのファイルをアップロードしたのかが分かるように表示
  • 指定拡張子以外はアップロード制限

しかし、自分には、PHPコードをいじれるスキルがありませんでした。

そこで、chatGPTにコード丸投げして、上記の機能を実装するように指示してみると、うまく動きました。

ココがおすすめ

AIの進化はすごいです!

 

動作確認し出来上がったコードが下記になります。

<html>
<head>
    <meta charset="utf-8">
    <title>WEB明細ファイルアップロード</title>
</head>
<body>
    <form aciton="./" method="post" enctype="multipart/form-data">
        <input type="file" multiple name="upload_file[]" />
        <input type="submit" value="アップロード" />
    </form>
</body>

<?php
// 許可するファイルタイプ
$allowed_types = array('pdf', 'txt');

// アップロードされたファイルか検査
for($i = 0; $i < count($_FILES["upload_file"]["name"]); $i++ ){
    if(is_uploaded_file($_FILES["upload_file"]["tmp_name"][$i])){
        // ファイルタイプを取得
        $file_type = pathinfo($_FILES["upload_file"]["name"][$i], PATHINFO_EXTENSION);

        // 許可されたファイルタイプかどうかを確認
        if(!in_array($file_type, $allowed_types)){
            echo "エラー:pdfまたはtxt以外のファイルはアップロードできません。<br>";
            continue;
        }
        // ファイルをお好みの場所に移動
        move_uploaded_file($_FILES["upload_file"]["tmp_name"][$i], "./upload/" . $_FILES["upload_file"]["name"][$i]);
        // アップロードファイルの表示
        echo $_FILES["upload_file"]["name"][$i] . "をアップロードしました。<br>";
    }
}
?>

上記のコードを、test,phpなどのファイル名にしてWEBサーバーにアップロードすればOKです。

WEBサーバーのルート内に、testフォルダを作成して、testフォルダ内には、uploadフォルダを作成します。

test.phpをtestフォルダにFTPで転送して、http://ドメイン/test/test.phpにて実行して使用します。

 

アップロードしたファイルを確認

次に本当にアップロードできたのかを確認するPHPコードをChatGPTに作成してもらいました。

最初に作成したもらったコードでは、すべてのファイルを表示するので、.htaccessも表示されていました。

表示されていでもいいのですが、できれば.htaccessは表示されない方が都合がよかったので、ChatGPTに修正してもらいました。

そしで、出来上がったコードが下記のようになります。view.phpなどにして、testフォルダに転送しました。

test.phpをtestフォルダにFTPで転送して、http://ドメイン/test/view.phpにて実行して使用します。

<?php
// uploadフォルダ内のファイル名を表示、.taccessは除く

$dir_path = './upload';
$files = scandir($dir_path);
if (count($files) === 3) {
    echo 'ファイルがありません。';
} else {
    foreach ($files as $file) {
        if ($file !== '.' && $file !== '..' && $file !== '.htaccess' && !is_dir($dir_path . '/' . $file)) {
            echo "$file<br />\n";
        }
    }
}
?>

実行するとアップロードされたファイルが確認することができました。

 

アップロードファイルを削除

最後にアップロードしたファイルの削除機能をChatGPTに作ってもらいました。

本当は、ファイル選択した物だけを削除するなんて方が汎用性があるのかもしれませんが、今回自分が必要としていたのは、

ココに注意

フォルダ内の、.htaccess以外の全てのファイルを削除

するという機能です。

WEBサーバーのHTMLファイル更新などの場合は、選択できたほうが良いとは思いますが、次回にしたいと思います。

そして、フォルダ内(upload)の.htaccess以外のファイルを消すコードは下記のようになりました。

del.phpなどのファイルにしてtestフォルダにアップロードして、http://ドメイン/test/del.phpにて実行して使用します。

<?php
// uploadフォルダ内のファイルを.htaccess意外を削除

$dir_path = './upload';
$files = glob($dir_path . '/*'); // フォルダ内のすべてのファイルを取得
foreach($files as $file){
    if(is_file($file) && basename($file) != '.htaccess') // .htaccess以外のファイルを削除
        unlink($file); // ファイルを削除
}
    echo 'ファイルを削除しました。';
?>

「ファイル削除しました。」しか表示しないシンプルなコードです。

view.phpで確認すると、「ファイルがありません」とだけ表示されていました。

シンプルですが、目的は果たしています。