| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Ошибка при использовании tempnam() |
| Автор: Burrr 26.7.2007, 10:38 | ||
Использую ф-ию tempnam для создания файла в нужной мне директории. На локальном хостинге (читай Denwer) всё работает отлично, а на рабочем на этой ф-ии всё обрубается и появляется ошибка (варнинг):
Следующие далее ф-ии 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 может добраться. Корень веб сервера - предел. |
| Автор: Burrr 27.7.2007, 12:07 | ||||
sTa1kEr
Проверка показала, что ни одна из этих директорий не позволяет создавать - редактировать файлы. Режим safe_mode, как выяснилось, не включён:
Почему же появляется ошибка? |
| Автор: 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 директории, доступные для записи |