Почему PHP не может создать файл, даже с 777 разрешениями? -- php поле с участием xampp поле с участием file-permissions поле с участием archlinux пол Связанный проблема

Why can't PHP create a file, even with 777 permissions?


1
vote

проблема

русский

У меня есть тестовый сервер виртуальной арки Linux с Xampp, работающим на моем ноутбуке, и я не могу получить PHP для создания новых файлов, даже с разрешениями, установленными на 777. Вот код:

 <код> $CompleteFilepath = $AFilepath . '/filepath/filename.php'; $FileHandle = fopen($CompleteFilepath, 'c')     or die ("cannot be opened for writing"); // Debug   

Там, очевидно, больше кода после, но это неактуально, потому что он всегда умирает здесь. Я не мог заставить его работать, изменив настроек владельца и группы, поэтому я, наконец, прибегал к рекурсивно настроив все (кроме основной корневой папки) до 777, и она все еще не будет работать. Но папка не создается непосредственно в корне, поэтому она не должна иметь значения, верно?

Редактировать: Я до сих пор не совсем уверен, что я делаю не так, но сегодня я поставил владельца на сервер, и он работал. Я думал, что попробовал это, но, возможно, нет. По крайней мере, я могу продолжить разработку, даже если мне нужно больше настроить мой производственный сервер более безопасным в конце.

Английский оригинал

I have a virtual Arch Linux test server with XAMPP running on my laptop, and I can't get php to create new files, even with permissions set at 777. Here's the code:

$CompleteFilepath = $AFilepath . '/filepath/filename.php'; $FileHandle = fopen($CompleteFilepath, 'c')     or die ("cannot be opened for writing"); // Debug 

There's obviously more code after, but it's irrelevant because it always dies here. I couldn't get it to work by modifying the owner and group settings, so I finally resorted to recursively setting everything (except for the main root folder) to 777, and it still won't work. But the folder isn't being created directly in the root, so it shouldn't matter, right?

Edit: I'm still not really sure what I was doing wrong, but today I set the owner to the server and it worked. I thought I had tried that, but maybe not. At least I can get on with development, even if I need to configure my production server more securely in the end.

</div
           
         
         

Список ответов

0
 
vote
vote
Лучший ответ
 

PHP имеет директиву с именем open_basedir которые позволяют ограничить доступ на файловую систему для указанного дерева каталога.

Например, если у вас есть в вашем <код> php.ini :

 <код> open_basedir = /srv/http/:/home/:/tmp/   

, и вы получите доступ к файлу <код> /filepath/filename.php , то необходимо установить:

 <код> open_basedir = /srv/http/:/home/:/tmp/:/filepath/   

В противном случае PHP не сможет получить доступ к файлу.

Таким образом, что позволит все PHP код, работающий на этом компьютере для доступа <код> <ion-view title="Account"> <ion-content class="has-header padding"> <h1>Account</h1> <h2>Your orders</h2> <div class="card" ng-repeat="booking in bookings"> <div class="item item-text-wrap"> <b><a ng-click="viewOrder(booking.id)">{{ booking.carpark.city }}</a></b> on <b>{{ booking.date | date:'dd.mm.yyyy' }}</b> </div> </div> <ui-view></ui-view> <!-- Where the child view will load --> </ion-content> </ion-view> 0 Directory-Directory, чтобы он был <сильный> не защищен для производственная среда. Лучший способ - установить Virtual-Host на основе <код> <ion-view title="Account"> <ion-content class="has-header padding"> <h1>Account</h1> <h2>Your orders</h2> <div class="card" ng-repeat="booking in bookings"> <div class="item item-text-wrap"> <b><a ng-click="viewOrder(booking.id)">{{ booking.carpark.city }}</a></b> on <b>{{ booking.date | date:'dd.mm.yyyy' }}</b> </div> </div> <ui-view></ui-view> <!-- Where the child view will load --> </ion-content> </ion-view> 1 в <Код> <ion-view title="Account"> <ion-content class="has-header padding"> <h1>Account</h1> <h2>Your orders</h2> <div class="card" ng-repeat="booking in bookings"> <div class="item item-text-wrap"> <b><a ng-click="viewOrder(booking.id)">{{ booking.carpark.city }}</a></b> on <b>{{ booking.date | date:'dd.mm.yyyy' }}</b> </div> </div> <ui-view></ui-view> <!-- Where the child view will load --> </ion-content> </ion-view> 2 . Я позволил вам проверить документацию HTTP-сервера, а также open_basedir Документация для этого.

 

PHP has a directive named open_basedir which permit to limit the access on filesystem to specified directory-tree.

For example if you have in your php.ini:

open_basedir = /srv/http/:/home/:/tmp/ 

and you will access the file /filepath/filename.php, then you must set:

open_basedir = /srv/http/:/home/:/tmp/:/filepath/ 

otherwise PHP will not be able to access the file.

In this way that will allow all PHP code running on this machine to access /filepath/ directory-tree, so it is not secure for production environment. The better way is to set virtual-host based open_basedir in httpd.conf. I let you check your HTTP server documentation and also open_basedir documentation for that.

</div
 
 
 
 
2
 
vote

У меня была похожая проблема с чистой установкой CentOS 7. Оказалось, что он имел установку SELinux по умолчанию, что предотвращало все PHP записи, даже когда разрешения каталога были правильными.

Тест Если установлен Selinux: <код> sestatus

Поместите SELinux в разрешительный режим: <Код> setenforce 0

 

I had a similar problem with a clean install of CentOS 7. It turned out it had SELinux installed by default, which was preventing all PHP writes, even when directory permissions were correct.

Test if SELinux is installed: sestatus

Put SELinux in permissive mode: setenforce 0

</div
 
 
 
 
0
 
vote

Какая работа PHP работает, AFAIK опция 'C' доступна только с PHP 5.2.6 и вверх.

или коротко: делает ли

 <код> $FileHandle = fopen($CompleteFilepath, 'w');   

Работа?

 

what php version is running, afaik option 'c' is only available with php 5.2.6 and up.

or short: does

$FileHandle = fopen($CompleteFilepath, 'w'); 

work?

</div
 
 
 
 
0
 
vote

Ну, я установил владельца на сервер, и теперь он работает. Я думал, что пробовал это уже, но видимо нет. Еще не уверен, что именно то, что я делал неправильно, но, по крайней мере, сейчас это работает, чтобы я мог продолжать развитие.

 

Well, I set the owner to the server and now it works. I thought I had tried that already, but apparently not. Still not sure exactly what I was doing wrong but at least now it works so I can get on with development.

</div
 
 

Связанный проблема

0  Cookie не доступно на сайте  ( Cookie not available sitewide ) 
У меня есть два вопроса с настройкой и извлечением файлов cookie. cookie загружается, но нельзя вызывать, пока страница не будет обновлена. Это означает, ч...

0  Symfony2 параметр или проблема кэша  ( Symfony2 parameter or cache issue ) 
Я использую Symfony2 для моего приложения и приложения, работая нормально в Windows, но когда я загружаю его на сервер (Ubuntu 12.04 LTS), дает следующую ошиб...

0  WordPress Query 'Orderby' => 'meta_value' списки 10 до 9  ( Wordpress query orderby meta value lists 10 before 9 ) 
Я создаю сайт WordPress для моего отца в ресторане закона. Каждый курс имеет номер, который я перечисляю с использованием «orderby» расширенного пользовательс...

6  Как вы заставляете гравитар на отображение идентификатора  ( How do you force gravatar into displaying identicon ) 
Есть ли способ заставить Gravatar до всегда Вернуть identicon url? P >. Единственный способ, которым я нашел до сих пор: <Код> ?forcedefault=1&default=my...

0  Процедура ничего не делает  ( Procedure doesnt do anything ) 
Я сделал процедуру в MySQL. Похоже, это выглядит. Я назвал эту процедуру из PHP. После этого звонка стол все еще остается пустым, и я не знаю почему. ...

0  Защита пользовательских данных - для использования в вызовах метода, SQL и файловые вызовы  ( Securing user data for use in method calls sql and file calls ) 
Я использую <код> $_GET , <код> $_POST и <код> $_COOKIE Переменные в вызовах метода, SQL-запросы и файловые вызовы - и необходимо сбежать / Перепишите эти д...

1  Как читать защищенные данные из API API / PHP API Facebook API / PHP  ( How to read protected data from facebook ads api php sdk ) 
Я получаю защищенный объект, возвращенный из вызова API в рекламу Facebook. Я звоню с <код> $campaigns = $account->getAdCampaigns($fields, $params); и...

0  Определить переменные в шаблоне  ( Define variables in a template ) 
Можно ли определить переменную в шаблоне экспрессии шаблона? Если это так, как можно сделать так? Пример следующего использования в качестве примера. Я ищу ...

0  dbase_open () не может открыть файл .dbf  ( Dbase open cant open a dbf file ) 
Я установил расширение DBASE PHP в моем сервере Ubuntu. И я вижу, что DBASE_OPEN (...) не отображает никакой ошибки, но, хотя я предоставляю существующий путь...

0  Как вы используете PHP и SQL для отправки данных таблицы на другую таблицу  ( How do you use php and sql to submit table data to another table ) 
У меня есть таблица полетов, и я использую цикл, чтобы распечатать информацию о рейсах, наряду с кнопкой отправки, кнопка, которая нажала, - это представленны...

0  Авто не показывая результат jQuery  ( Auto complete not showing result jquery ) 
Я пытаюсь создать автоматическую комплектацию, используя jqueryui.i am echo ing a jquery a age ange Результат базы данных из удаленного поиска файлов.php.it п...

0  PHP Проверка формата DateTime с помощью PREG_MATCH и CHECHDATE неправильный результат  ( Php checking datetime format using preg match and checkdate wrong result ) 
Я хочу подтвердить формат dateTime с помощью функции preg_match () и checkdate (). Мой формат «DD / MM / YYYY HH: MM: SS». Что не так с моим кодом? <код> fu...

2  Сделать HTACCESS не применять для некоторых подпапок  ( Make htaccess to not be applied for some subfolders ) 
Я использую эту htaccess для моего приложения. <код> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQ...

2  Как я могу скачать партию фотографий из URL-адресов, хранящихся в базе данных MySQL  ( How do i download a batch of pictures from urls stored in a mysql database ) 
У меня есть база данных, содержащая URL-адреса изображений, которые выглядят так: <код> DATABASE : id / url 1 / http://www.pic1.jpg 2 / http://www.pic2.jpg ...

1  Правильный способ отправить почтовики, используя PHP?  ( Proper way to send mailers using php ) 
У меня есть PHP-скрипт для отправки 1 00 000 писем каждый день. Он просто управляет всеми электронными письмами в цикле и ссылается на почту () .. Я не могу...

Связанный проблема

0  Cookie не доступно на сайте 
0  Symfony2 параметр или проблема кэша 
0  WordPress Query 'Orderby' => 'meta_value' списки 10 до 9 
6  Как вы заставляете гравитар на отображение идентификатора 
0  Процедура ничего не делает 
0  Защита пользовательских данных - для использования в вызовах метода, SQL и файловые вызовы 
1  Как читать защищенные данные из API API / PHP API Facebook API / PHP 
0  Определить переменные в шаблоне 
0  dbase_open () не может открыть файл .dbf 
0  Как вы используете PHP и SQL для отправки данных таблицы на другую таблицу 
0  Авто не показывая результат jQuery 
0  PHP Проверка формата DateTime с помощью PREG_MATCH и CHECHDATE неправильный результат 
2  Сделать HTACCESS не применять для некоторых подпапок 
2  Как я могу скачать партию фотографий из URL-адресов, хранящихся в базе данных MySQL 
1  Правильный способ отправить почтовики, используя PHP? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.