Ciągle otrzymuję ten błąd podczas próby skonfigurowania katalogu przesyłania z Apache 2.2 i PHP 5.3 na CentOS.
W php.ini:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
W httpd.conf:
Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
Uprawnienia do katalogu CentOS:
drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload
Bez względu na to, co zrobię, otrzymuję ten błąd z PHP podczas przesyłania pliku:
Ostrzeżenie: move_uploaded_file (images / robot.jpg): nie udało się otworzyć strumienia: Odmowa dostępu w /var/www/html/mysite/process.php w linii 78
Ostrzeżenie: move_uploaded_file (): Nie można przenieść '/ tmp / phpsKD2Qm' do 'images / robot.jpg' w /var/www/html/mysite/process.php w linii 78
Jak widać, nigdy nie pobierał konfiguracji z pliku php.ini w odniesieniu do przesłanego pliku.
Co ja tu robię źle?
php
upload
file-permissions
user63898
źródło
źródło
Odpowiedzi:
To dlatego, że
images
itmp_file_upload
są tylko do zapisu przezroot
użytkownika. Aby przesyłanie działało, musimy uczynić właściciela tych folderów takim samym, jak właściciel procesu httpd LUB umożliwić im globalny zapis (zła praktyka).$ps aux | grep httpd
. Pierwszą kolumną będzie zazwyczaj właścicielnobody
Zmień właściciela
images
itmp_file_upload
zostańnobody
lub kimkolwiek innym właścicielem, którego znalazłeś w kroku 1.Chmod
images
itmp_file_upload
teraz właściciel ma prawo do zapisu, jeśli to konieczne [Wygląda na to, że masz już to miejsce]. Wspomniany w odpowiedzi @Dmitry Teplyakov.Aby uzyskać więcej informacji na temat przyczyn takiego zachowania, zapoznaj się z podręcznikiem http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir , zauważ, że jest tam również mowa o
open_basedir
dyrektywie.źródło
jacob
mnie (ponieważ jest to mój komputer lokalny), a wszystkie foldery mają755
lub775
.sudo service httpd restart
Po zmianie uprawnień musiałem ponownie uruchomić proces Apache . Wtedy zadziałało :) Zamiast zmieniać właścicielachown
, dodałem proces apache do grupy „www” i dodałem te katalogi do tej samej grupy „www” przezchgrp
Możesz także uruchomić ten skrypt, aby znaleźć właściciela procesu Apache:
<?php echo exec('whoami'); ?>
A następnie zmień właściciela katalogu docelowego na to, co masz. Użyj polecenia:
A następnie użyj polecenia
aby zmienić uprawnienia do katalogu docelowego.
źródło
<?php echo exec('whoami'); ?>
. Czy ktoś wie dlaczego?exec('whoami')
. Zaoszczędziło mi 30 minut więcej. żałował użytkownika ubuntuwww-data
? zwykleJeśli masz system Mac OS X, przejdź do katalogu głównego pliku lub folderu swojej witryny internetowej.
Następnie kliknij go prawym przyciskiem myszy, przejdź do informacji, przejdź na sam dół ( Udostępnianie i uprawnienia ), otwórz to, zmień wszystko tylko do odczytu na odczyt i zapis. Pamiętaj, aby otworzyć kłódkę, przejść do ikony ustawień i wybrać Zastosuj do załączonych elementów ...
źródło
/private/var/tmp
na moim Macu.To zadziałało dla mnie.
Następnie wyloguj się lub uruchom ponownie.
Jeśli
SELinux
narzeka, spróbuj wykonać następujące czynnościźródło
Chciałem to dodać do poprzednich sugestii. Jeśli używasz wersji Linuksa z włączonym SELinux , powinieneś również wykonać to w powłoce:
Wraz z nadaniem uprawnień użytkownikowi serwera WWW poprzez grupę lub zmianę właściciela katalogu.
źródło
restorecon -R -v /path/to/your/directory
prawdopodobnie musi to być później uwzględnione. access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/ ...Zmień uprawnienia dla tego folderu
# chmod -R 0755 /var/www/html/mysite/images/
źródło
Spróbuj tego:
otwórz / etc / apache2 / envvars
wymień
www-data
nayour_username
zamienić
źródło
Napotkałem ten powiązany problem nawet po pomyślnym uruchomieniu programu Composer. Zaktualizowałem kompozytora i podczas uruchamiania
composer install
lubphp composer.phar install
otrzymałem:Po wielu badaniach okazuje się, że poprzednie odpowiedzi dotyczące zmiany uprawnień do folderu zadziałały. Teraz to tylko trochę inne katalogi.
Podczas mojej instalacji w systemie OS X plik pamięci podręcznej znajduje się
/Users/[USER]/.composer/cache
i miałem problemy, ponieważ właścicielem pliku pamięci podręcznej był root. Rekurencyjna zmiana własności pliku „.composer” na mojego użytkownika rozwiązała problem.Oto co zrobiłem:
Następnie ponownie uruchomiłem instalację kompozytora i voila!
źródło
Ten problem występuje, gdy użytkownik Apache (dane www) nie ma uprawnień do zapisu w folderze. Aby rozwiązać ten problem, musisz umieścić użytkownika wewnątrz grupy www-data.
Właśnie zrobiłem to:
Wykonaj ten kod php,
<?php echo exec('whoami'); ?>
aby odkryć użytkownika używanego przez apache. Następnie wykonaj polecenia w terminalu:Zwróci coś takiego:
Zachowałem użytkownika, ale zmieniłem grupę na dane www
źródło
Rozwiązanie jest takie proste. Tylko kliknij prawym przyciskiem myszy folder IMAGE (docelowy), przejdź do właściwości, kliknij kartę uprawnień i zmień dostęp innych do tworzenia i usuwania plików .
źródło
Po prostu zmień uprawnienia tmp_file_upload na 755 Poniżej znajduje się polecenie chmod -R 755 tmp_file_upload
źródło
Spróbuj tego
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
źródło