Невозможно переместить файлы в каталог в докереPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Невозможно переместить файлы в каталог в докере

Сообщение Anonymous »

Я новичок в PHP и Docker. Я учусь, работая над ними. У меня есть веб-приложение PHP, использующее vanilla php no framework. Я столкнулся с проблемой. Я не могу это исправить. Я искал в Интернете, но безуспешно. В докер-контейнере. Вот какую ошибку я получаю

Код: Выделить всё

Warning: move_uploaded_file(/var/www/html/src/reports/upload/files/65f7c289c413f2.84203515.png): Failed to open stream: Permission denied in /var/www/html/src/reports/upload/index.php on line 60

Код: Выделить всё

Warning: move_uploaded_file(): Unable to move "/tmp/phpNGBow2" to "/var/www/html/src/reports/upload/files/65f7c289c413f2.84203515.png" in /var/www/html/src/reports/upload/index.php on line 60
Причина ошибки в том, что файлы внутри /var/www/html/ принадлежат пользователю root.
Чтобы сначала исправьте это. Я попытался создать каталог внутри каталога загрузки. но, очевидно, это не работает. Я не знал, что /var/www/html/ принадлежит пользователю root.

Код: Выделить всё

$customTmpDir = __DIR__ . '/.tmp/';

if (!file_exists($customTmpDir)) {
mkdir($customTmpDir, 0775, true);
}

ini_set('upload_tmp_dir', $customTmpDir);

// Rest of the code for uploading files to said dir inside upload dir

$file = $_FILES['file'];
$fileName = $_FILES['file']['name'];
$fileTmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileError = $_FILES['file']['error'];
$fileType = $_FILES['file']['type'];

$fileExt = explode('.', $fileName);
$fileActualExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));

$allowed = array('jpg', 'jpeg', 'png', 'pdf');

if (in_array($fileActualExt, $allowed)) {
if ($fileError === 0) {
if ($fileSize < 2000000) {
$fileNameNew = uniqid('', true) . "." . $fileActualExt;
$fileUploadDir = __DIR__ . '/files/';
$fileUpload = move_uploaded_file($fileTmpName, $fileUploadDir . $fileNameNew);
if ($fileUpload == true) {

date_default_timezone_set('Asia/Karachi');
$currentDate = date('Y-m-d');

$insertQuery = "INSERT INTO opd_Reports (patientID, doctorName, patientName, reportName, reportDate, reportStatus) VALUES ('$patientID', '$doctorName', '$patientName', '$fileNameNew', '$currentDate', 'Uploaded')";

$insertResult = mysqli_query($conn, $insertQuery);

if (!$insertResult) {
echo "
Something Went Seriously Wrong Contact Developer!
"; die("" . mysqli_error($conn));

} else {
echo "
Report Uploaded Successfully
";

} } else {
echo "
There Was An Unkown Error Uploading Your File! Try Uploading Again or Contact Developer.
";

} } else {
echo "
Your File Is Too Big!
";

} } else {
echo "
There Was An Error Uploading Your File! Try Uploading Again.
";

} } else {
echo "
You Are Only Allowed To Upload JPEG, JPG, PNG or PDF Files.
"; } }
Чтобы это исправить, я добавил этот cmd в свой .docker/php/Dockerfile, но права доступа к файлам не меняются, они по-прежнему принадлежат пользователю root.

Код: Выделить всё

/// Rest of Code ///

# Copy application code
COPY . /var/www/html

#  Changing Permissions
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Я вижу, что он запускается в подробном виде после компоновки докера -d здесь ошибок нет.

Код: Выделить всё

 => [php stage-0 5/7] COPY . /var/www/html                                                0.3s
=> [php stage-0 6/7] RUN chown -R www-data:www-data /var/www/html                        1.5s
=> [php stage-0 7/7] RUN chmod -R 755 /var/www/html                                      1.7s
=> [php] exporting to image                                                              0.3s
но ошибка все еще присутствует в приложении, и если я перехожу к контейнеру с запуском ls -al, показывает, что файлы принадлежат пользователю root, а не www-data:www- data при запуске chown -R www-data:www-data * && chmod -R 755 * здесь ошибка исчезает, и код работает, но это не исправление. Это полезно только один раз: если я остановлю контейнер, мне придется снова запустить cmd.

Подробнее здесь: https://stackoverflow.com/questions/781 ... -in-docker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»