Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Ошибка при использовании tempnam()


Автор: Burrr 26.7.2007, 10:38
Использую ф-ию tempnam для создания файла в нужной мне директории. На локальном хостинге (читай Denwer) всё работает отлично, а на рабочем на этой ф-ии всё обрубается и появляется ошибка (варнинг):
Код
tempnam() [function.tempnam]: open_basedir restriction in effect. File(/var/tmp) is not within the allowed path(s): (/home/sitename/data:.) in ...

Следующие далее ф-ии fopen и др. также не срабатывают.
Наверняка кто-то сталкивался с подобным, помогите решить проблему! Исходить следует из того, что доступа к php.ini нет.

Автор: Fally 26.7.2007, 12:09
Блин, доступ тебе не разрешён к этой категории и всё, от сюда и варнинг...  потому что скорее всего включён safe_mode.
Чтобы решить проблему зайди сначала http://ru2.php.net/manual/ru/features.safe-mode.php, а затем поиграйся ini_set() /если склероз не подводит, то можно изменить значение переменной open_basedir/

Автор: Mal Hack 26.7.2007, 13:49
В первом параметре надо указать путь к доступной для PHP папки, где бы вы хотели, чтобы создавались временные фалы.

Автор: Burrr 26.7.2007, 14:01
Mal Hack, а какая папка в режиме safe_mode доступна для создания/редактирования/удаления файлов по дефолту? 

Автор: Mal Hack 26.7.2007, 14:11
При чем тут safe mode и при чем тут по умолчанию? Любая папка, до которой PHP может добраться. Корень веб сервера - предел.

Автор: sTa1kEr 26.7.2007, 14:28
Цитата(Burrr @  26.7.2007,  14:01 Найти цитируемый пост)
Mal Hack, а какая папка в режиме safe_mode доступна для создания/редактирования/удаления файлов по дефолту?  

У вас в варнинге указаны доступные пути (/home/sitename/data:.). Т.е. /home/sitename/data и все вышестоящие директории и . (текущая, откуда запускается скрипт) и все вышестоящие директории.

Автор: Burrr 27.7.2007, 12:07
sTa1kEr
Цитата
У вас в варнинге указаны доступные пути (/home/sitename/data:.). Т.е. /home/sitename/data и все вышестоящие директории и . (текущая, откуда запускается скрипт) и все вышестоящие директории. 

Проверка показала, что ни одна из этих директорий не позволяет создавать - редактировать файлы.

Режим safe_mode, как выяснилось, не включён:
Код
safe_mode Off Off 
safe_mode_exec_dir no value no value 
safe_mode_gid Off Off 
safe_mode_include_dir no value no value 


Почему же появляется ошибка?

Автор: Mal Hack 27.7.2007, 12:45
Папку укажи, блин, куда  PHP может достучаться...
Мы же кода твоего не видим...

Автор: Burrr 27.7.2007, 14:06
Mal Hack, я указывал абсолютный путь к множеству папок, например:
$filename = tempnam("/home/sitename/data/www/faces/tmp", "jpid");
И все папки выше тоже пробовал:
$filename = tempnam("/home/sitename/data/www/faces", "jpid");
$filename = tempnam("/home/sitename/data/www", "jpid");
$filename = tempnam("/home/sitename/data", "jpid");
$filename = tempnam("/home/sitename", "jpid");
$filename = tempnam("/home", "jpid");
 - бесполезно.

также пробовал 
$filename = tempnam(".", "jpid");
Результат всегда один, как я и писал в первом посте.
Что можно сделать?

Автор: Mal Hack 27.7.2007, 17:33
Пробуем так.
1. Файлу даете еще и расширение, .aaa, например, т.к. это не принципиально.
2. Пробуйте в качестве папки  ./
3. 1 и 2 пункт вместе.

Если не сработает, значит это просто запрещено системой...

Автор: Burrr 27.7.2007, 18:22
Mal Hack, а через chmod можно как-то попробовать? Какие опции нужно выставить?
Или через ini_set? Я в этом плохо понимаю, поэтому пока не пробовал. Что нужно прописать?

Автор: Mal Hack 27.7.2007, 18:25
Вы можете сделать то, что я попросил?

Автор: Burrr 27.7.2007, 18:51
Mal Hack, ессно сделал, не работает ни в одном из предложенных вариантов...

Автор: Mal Hack 27.7.2007, 20:26
Покажите ваш код, пожалуйста полностью.

Есть сделать fwrite( "таже папка что и tempname/aaa.aaa" , "w" ); файл создастся?

Автор: Burrr 28.7.2007, 12:15
Mal Hack, ты очевидно имел в вижу fopen, а не fwrite.
Выполнил fopen("./aaa.tmp" , "w");
Пишет fopen(./aaa.tmp) [function.fopen]: failed to open stream: Permission denied in ...
Ошибка как раз на эту строку.

Через chmod что-то изменить тоже не получилось, ставил chmod(".", 0755)

Автор: Golda 28.7.2007, 13:32
Burrr, если пользователь, под которым запускается apache, не root и не владелец директории, у скрипта нет прав изменять там права доступа. Попробуйте писать в /tmp. Эта дирректория чаще всего открыта для всех. 

По-видимому, нет доступа у apache на запись в те дирректории, которые Вам нужны. И из скрипта, бегущего под apache, это исправить нельзя. Измените сами, если имеете доступ, или попросите администратора хостинга, выделить apache директории, доступные для записи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)