assets с правами Apach

Добрый день!

Достался хостинг (заказчика), на котором директория "assets" создается с правами доступа для сервера Apache. Соответственно при попытке записи туда файлов получается ошибка.

Как это решить?

Спасибо.

Как понять с правами доступа для сервера Apache? Имется в виду владелец папки тот же пользователь, от имени которого запускается сервер Apache. Значит и Web-приложение запускается с этими же правами, а владелец обычно вроде имеет право записи файлов.

В любом случае просто необходимо изменить права доступа к папке например на 777 (то есть владельцу, группе, другим все разрешено). Тогда не зависимо от какого имени запускается Web-приложение, ему будет разрешены все операции.

Если вы подключаетесь к хостингу через ssh, сделать это можно командой

chmod 777 ./assets

находясь в директории, в которой находится директория assets.

А если через ftp, я не знаю. Наверное в ftp-клиенте есть такая функия.

Вот текст ошибки:


copy() [<a href='function.copy'>function.copy</a>]: SAFE MODE Restriction in effect. The script whose uid is 3083 is not allowed to access /sata1/home/users/otpusk/www/maps.otpusk.lg.ua/assets/be603db5 owned by uid 80

Это, конечно, я сделал.

Вот ссылка: http://maps.otpusk.lg.ua/

Я тут попробовал у себя, и если папка assets не разрешена на запись то выводится совсем другая ошибка. А такая как у вас выводится в случае, если нельзя читать файл, который публикуется. Проверьте файлы, которые вы публикуете, скорей всего какой то, или все нельзя читать пользователю, от чьего имени запускается Web приложение

папка "be603db5" пустая:-(

В этой папке должно быть опубликованные файлы. А где то в защищенных - те, которые вы публикуете. Например, у меня в themes/my/css/ находятся файлы css, которые я хочу опубликовать и использовать в html файле темы. Но ведь из интернета они не доступны - их нужно опубликовать. Вот как раз там я попробовал изменить права одного файла - просто запретил чтение. Удалил старые ассеты, и обновил страницу в браузере. И сразу же вышла такая же ошибка, как у вас. То есть при попытке скопировать файл из защищенной директории в публичную assets возникает ошибка, читать то приложение не имеет право.

Может быть…, но на локальном сервере все работало (и работает).

Вполне могут права меняться. У меня например при копировании по ssh с сервера на локальный компьютер сайты приходится изменять права, иначе приложения не работают.

Вам же тут чётко и ясно написали, что php-функция copy(), а равно как и любая другая функция осуществляющая операции с файловой системой сервера, не работают (точнее запускаются с другими правами), если php работает в режиме SAFE MODE. И Вы можете хоть сто раз выставить права на этот каталог, php-скрипты у Вас всё равно будут запускаться из под другого пользователя. Такова особенность php в режиме safe mode.

У Вас три варианта:

  1. Найти другой хостинг, где php установлен как модуль;

  2. Жить тут и не использовать функции загрузки файлов и т.п.

  3. Искать решение проблемы (где-то в инете видел, работает, но через одно место).

assets ты сам создаёшь при загрузке файлов на сервер или скрипт создаёт?

если ты сам, то - попробуй удалить папку, чтобы она создалась скриптом

Я тоже обратил внимание на "SAFE MODE", посмотрел настройки - SAFE MODE отключен, поэтому очень странно.

Проблему я решил, но … криво - в файле "CAssetManager.php" закомментировал строки:




                if(@filemtime($dstFile)<@filemtime($src))

                {

                    if(!is_dir($dstDir))

                    {

                        mkdir($dstDir);

                        @chmod($dstDir,0777);

                    }

                    copy($src,$dstFile);

                }



и если выпадает ошибка по assets подсовываю нужные файлы вручную.

Что скажете: не получу ли я в будущем кучу проблем?

скрипт

А настройки смотрели где и какие?

Не самое изящное решение, это просто костыли. Проблема останется и в будущем. Чтобы её избежать, её - проблему - необходимо решать нормальным способом.

В админке хостера есть переключатель SAFE MODE ON/OFF. Так этот переключатель в OFF.

Согласен, поэтому и обратился к вам за помощью.

Ну это ещё ни о чём не говорит. Залейте php-файл (название любое) на сайт с одной единственной строкой


<?php

phpinfo();

Открывайте этот файл в браузере и смотрите секцию "PHP Core" (почти в самом начале). В этой табличке будут четыре параметра, которые относятся к Safe Mode. Вот их и смотрите.

Вот такие там строки:

[font="Verdana"][size="2"]Directive[/size][/font] ------------------- [font="Verdana"][size="2"]Local Value[/size][/font] ------------------- [font="Verdana"][size="2"]Master Value[/size][/font]

[font="Verdana"][size="2"]safe_mode[/size][/font] ------------------- [font="Verdana"][size="2"]Off[/size][/font] ------------------- [font="Verdana"][size="2"]On[/size][/font]

[font="Verdana"] [/font][font="Verdana"] [/font]

а что значит "[font="Verdana"][size="2"]Local Value[/size][/font]" и "[font="Verdana"][size="2"]Master Value[/size][/font]"?

вроде как

Master Value - относится ко всему сайту

Local value - относится к данному файлу

т.е. в настройках админи панели это так для "галочки"?

сволочи они.

спасибо

меняй хостера - это не дело пытатся обходить защиты, которые ставят за твои же деньги :)

У заказчика там сайт :frowning:

Но вообще надо убедить чтоб поменял.

Спасибо