docker初心者です;;
ホストOS Macで、VMware fusionのゲストOS Ubuntu環境にさらにdockerコンテナのLAMP環境で独習PHPという本のソースを動かしてます。以下のプログラムで、
PHP
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8" /> 5<title>アップロード処理</title> 6</head> 7<body> 8<form method="POST" action="file2.php" enctype="multipart/form-data"> 9<label for="upfile">ファイルのパス:</label> 10<input type="hidden" name="max_file_size" value="1000000" /> 11<input id="upfile" type="file" name="upfile" size="40" /> 12<input type="submit" value="アップロード" /> 13</form> 14</body> 15</html>
画像をアップロードするという課題があります。
PHP
1<?php 2$ext = pathinfo($_FILES['upfile']['name']); 3$perm = ['gif', 'jpg', 'jpeg', 'png']; 4 5if ($_FILES['upfile']['error'] !== UPLOAD_ERR_OK) { 6 $msg = [ 7 UPLOAD_ERR_INI_SIZE => 'php.iniのupload_max_filesize制限を越えています。', 8 UPLOAD_ERR_FORM_SIZE => 'HTMLのMAX_FILE_SIZE 制限を越えています。', 9 UPLOAD_ERR_PARTIAL => 'ファイルが一部しかアップロードされていません。', 10 UPLOAD_ERR_NO_FILE => 'ファイルはアップロードされませんでした。', 11 UPLOAD_ERR_NO_TMP_DIR => '一時保存フォルダが存在しません。', 12 UPLOAD_ERR_CANT_WRITE => 'ディスクへの書き込みに失敗しました。', 13 UPLOAD_ERR_EXTENSION => '拡張モジュールによってアップロードが中断されました。' 14 ]; 15 $err_msg = $msg[$_FILES['upfile']['error']]; 16} elseif (!in_array(strtolower($ext['extension']), $perm)) { 17 $err_msg = '画像以外のファイルはアップロードできません。'; 18} elseif (!@getimagesize($_FILES['upfile']['tmp_name'])) { 19 $err_msg = 'ファイルの内容が画像ではありません。'; 20} else { 21 $src = $_FILES['upfile']['tmp_name']; 22 $dest = mb_convert_encoding($_FILES['upfile']['name'], 'SJIS-WIN', 'UTF-8'); 23 if (!move_uploaded_file($src, 'doc/'.$dest)) { 24 $err_msg = 'アップロード処理に失敗しました。'; 25 } 26} 27if (isset($err_msg)) { 28 die('<div style="color:Red;">'.$err_msg.'</div>'); 29} 30header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/file1.php'); 31
Ubuntuのブラウザで画像を選択するセレクトボックスを押すと、当然ながらUbuntuのファイルウィンドウが開きます。画像をアップロードすると、Ubuntuに対して権限がないので?、アップロード処理に失敗しました。
となります。
コンテナからホストであるUbuntuに対してchmod 777するとか、もしくはファイルウィンドウからコンテナ内の画像をアップロードするとかできませんか。
Dockerfileで何か指定するとか?
(頓珍漢なこと言っているかも)
駄文すみません。
回答2件
あなたの回答
tips
プレビュー