Как настроить права на файл при выполнений php скрипта в ubuntu?
В ubuntu запускаю php скрипт для авторизации на сайте через curl.
В open server скрипт работает отлично.
В линуксе же из за прав на файл куки кажется записываются, не по порядку.
Как это исправить?
Как что сделать чтобы запускаемый скрипт на php создавал файл cookie.txt с правами для записи?
Дополнительно:
Ответы:
права, которые у тебя на cookie.txt не могут быть заданы при создании обычного файла, ибо umask не может для файла проставить executable и sticky bit
То есть их уже кто-то потом поменял на такие.
Либо для cookie создавался временный файл командой mktemp или ее аналогом.
Выход -
1. Добавить в php скрипт смену прав для файла после его создания - chmod("cookie.txt",0644);
2. Просмотреть скрипт, понять в каком месте создается файл и выяснить почему кривые права. Может вместо создания временного файла там можно просто указать создание явного файла с указанным именем.
- Можно использовать umask().
- AUser0, нет
Нет такого значения umask, который бы создал файл с исполняемым и стики битами.
Поэтому в этом случае это делает либо скрипт, создавая видимо временный файл функцией создания временного файла, либо сам curl - Saboteur, А может такое быть что скрипт не успевает закрыть или переписать файл куков.
Просто если запускаю скрипт и каждую функцию отдельно, все проходит нормально.
Т.е я запускаю скрипт первую функцию, получаю куки, затем запускаю скрипт со второй функцией, получаю куки и тд. Т.е делаю 4 запуска с функциями по очереди то авторизация и тд проходит отлично,
а когда запускаю скрипт 1 раз последующим вызовом функций в коде предыдущей функция, кажется куки не перезаписываются - Теоретически может быть.
Надо скрипт смотреть. Может там часть команд запускается в бэкграунд, и соответстенно скрипт продолжает выполнение не дожидаясь завершения команды. - Saboteur,
Вот пример кода работы скрипта. Куки записываются только раз.
А если сделать последовательный вызов функций, то куки записываются нормально.$bot=new Bot(); $bot->start() public function start(){ $this->openLogpage(); } public function openLogpage(){ ...... curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ....... $this->autorization(); } public function autorization(){ .............. curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ............. }
$bot=new Bot(); $bot->start() public function start(){ $this->openLogpage(); } public function openLogpage(){ ...... curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ....... $this->autorization(); } public function autorization(){ .............. curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ............. }
У php и владельца файлов должен быть один юзер.
В общем сервер нужно правильно настраивать.
- Я понимаю, что дело в правах.
- AlexSer, нужно понять что я написал. Если что-то не понятно - можно переспросить.
- Refguser, как посмотреть владельца php?
Если это только root, то стоит папки и файлы передать root через chown? - AlexSer, толку от "посмотреть"? Итак понятно что от www-datа или того хуже - рута. Сервер нужно правильно настраивать. Например так https://adminway.ru/kak-zapustit-kazhdyi-otdelnyi-...
- Refguser, зачем настройки для Apache? я запускаю просто скрипт на php
- AlexSer, ты не написал как что запускаешь. Но и для твоего случая есть рецепты в интернете. Учись пользоваться гуглояндексами.
- Refguser, да я уже переискал.
я понял, что скрипт из за запуска формате$bot=new Bot(); $bot->start() public function start(){ $this->openLogpage(); } public function openLogpage(){ ...... curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ....... $this->autorization(); } public function autorization(){ .............. curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ............. }
$bot=new Bot(); $bot->start() public function start(){ $this->openLogpage(); } public function openLogpage(){ ...... curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ....... $this->autorization(); } public function autorization(){ .............. curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); ............. }
Не успевает перезаписать cookie.
Даже если я ставлю задержку скрипта sleep(10), перед каждой функцией.
В файле cookie.txt только cookie с функций openLogpage(), хотя на выводе headers curl при autorization(),
я вижу принятые куки.
Как это исправить?
Можно конечно вытаскивать куки из headers и записывать в ручную, через fwrite($file,$cookie), а потом закрывать -
да я уже переискал.
Да ладно.. Можно ли запустить конкретный скрипт PHP из-под другого пользователя без смены текущего(root)? (username должен быть юзер - владелец каталога куда пишешь)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для настройки прав на файл при выполнении PHP скрипта в Ubuntu, вам потребуется использовать команду chmod в терминале. Эта команда позволяет изменить разрешения на файлы и директории в Linux.
Чтобы изменить права на файл, вам нужно выполнить следующую команду:
chmod +x file.phpchmod +x file.php
Эта команда добавит исполняемые права к файлу file.php. Если вы хотите, чтобы файл выполнялся только в качестве PHP скрипта, вам также нужно установить права на чтение и запись:
chmod 755 file.php
Это установит права на чтение, запись и исполнение для владельца файла и только на исполнение для группы и других пользователей.
Если вам нужно изменить права на директорию, используйте команду chmod -R:
chmod -R 755 directory_name
Эта команда изменит права на директорию directory_name и все файлы и поддиректории в ней.
Помните, что изменение прав на файлы и директории может повлиять на безопасность вашей системы, поэтому будьте осторожны при установке прав доступа. Проверьте, что файлы не содержат конфиденциальных данных и не являются частью важной системы, прежде чем изменять их права доступа.