Добрый день!
Достался хостинг (заказчика), на котором директория "assets" создается с правами доступа для сервера Apache. Соответственно при попытке записи туда файлов получается ошибка.
Как это решить?
Спасибо.
Добрый день!
Достался хостинг (заказчика), на котором директория "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.
У Вас три варианта:
Найти другой хостинг, где php установлен как модуль;
Жить тут и не использовать функции загрузки файлов и т.п.
Искать решение проблемы (где-то в инете видел, работает, но через одно место).
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 - относится к данному файлу
т.е. в настройках админи панели это так для "галочки"?
сволочи они.
спасибо
меняй хостера - это не дело пытатся обходить защиты, которые ставят за твои же деньги
У заказчика там сайт
Но вообще надо убедить чтоб поменял.
Спасибо