Ошибка в выполнении fopen на хостинге
Доброго времени суток, столкнулся с проблемой в коде для сайта на хостинге. Требуется загружать входящие данные из формы в текстовый файл. Задача не нова, но своей ошибки я в интернете не нашел, увы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
php. //Принимаем постовые данные $nick=$_POST['nick']; $birth=$_POST['birth']; $rank=$_POST['rank']; $garage=$_POST['garage']; $favourite=$_POST['favourite']; $problems=$_POST['problems']; $about=$_POST['about']; //формируем строку для записи $str=$nick.' | '.$birth.' | '.$rank.' | '.$garage.' | '.$favourite.' | '.$problems.' | '.$about.'\r\n'; //открываем файл для записи.Если файл не существует-он будет создан $file_open = fopen('formreports.txt', 'a+'); //записываем строку fputs ($file_open, $str); //закрываем файл fclose ($file_open); ?>
Форма вызывает программку, та проходит до строки с открытием файла, после чего перенаправляет на страницу с текстом:
Права для скрипта я выдал. Что я делаю не так?
Код честно украден и доведен до общей работоспособности (за исключением этой ошибки), сам в пхп не понимаю, но начинаю въезжать
Думаю, что проблема именно с fopen, но природу ее понять не могу.
Не работает функция fopen
У меня выводится Ошибка при открытии файлаОшибка при записи в файл
Файла этого не существует, он должен создаваться.
Почему он не создается?
Режимы пробовала разные: w+, x+, a+
И записывать пробовала в разные места. Может это потому что на сервере в папках какие-нибудь настройки, чтобы туда нельзя было записывать? (сервер не я поддерживаю)
На linux неработает функция fopen
Здравствуйте, у меня небольшая проблема возникла, я себе поставил linux, поставил apache, для папки.
Warning: fopen(t3.txt) [function.fopen]: failed to open stream:
Привет, у меня возникли такиe проблемы: 1.веду поиск в папке Texte. Папка находится в папке.
Не работает fopen() php
Добрый день! Не работает fopen(). Пишет PHP Warning: fopen(get_url.txt): failed to open stream.
fopen не читает из URL — Warning: fopen(‘http://www. ‘,’r’) — Bad file descriptor in . gethtml.php on line 16
Как известно с помощью fopen можно прочитать данные не только из файла но и из URL. Проблема в.
$file=array(); // с данными $fp=fopen('file.txt','w'); fputs($fp,implode('',$file)); $file=fclose($fp);
$fp=fopen('file.txt','w'); fputs($fp,$file); $file=fclose($fp);
Slafira, проверь права доступа на папку aaa для пользователя www-data (по умолчанию для апача). Папка существует хоть? fopen папки не создаёт, вроде.
fopen
fopen() закрепляет именованный ресурс, указанный в аргументе filename , за потоком.
Список параметров
Если filename передан в форме «scheme://. «, он считается URL и PHP проведёт поиск обработчика протокола (также известного как «обёртка») для этой схемы. Если ни одна обёртка не закреплена за протоколом, PHP выдаст замечание, чтобы помочь вам отследить потенциальную проблему в вашем скрипте и затем продолжит выполнение, как если бы filename указывал на обыкновенный файл.
Если PHP установлено, что filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл это разрешают. Если вы включили open_basedir, то накладываются дальнейшие ограничения.
Если PHP установил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.
Замечание:
Список поддерживаемых протоколов доступен в разделе Поддерживаемые протоколы и обёртки. Некоторые протоколы ( обёртки ) поддерживают контекст и/или опции php.ini . Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется обёрткой http ).
На платформе Windows, необходимо экранировать все обратные слеши в пути к файлу или использовать прямые слеши.
Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:
mode | Описание |
---|---|
‘r’ | Открывает файл только для чтения; помещает указатель в начало файла. |
‘r+’ | Открывает файл для чтения и записи; помещает указатель в начало файла. |
‘w’ | Открывает файл только для записи; в противном случае ведёт себя так же, как и ‘w+’ . |
‘w+’ | Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пытается его создать. |
‘a’ | Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются в конец. |
‘a+’ | Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать. В данном режиме функция fseek() влияет только на позицию чтения, записи всегда добавляются в конец. |
‘x’ | Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку уровня E_WARNING . Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2) . |
‘x+’ | Создаёт и открывает для чтения и записи; в остальном имеет то же поведение, что и ‘x’ . |
‘c’ | Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от ‘w’ ), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’ ). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотрите flock() ) перед изменением, так как использование ‘w’ может обрезать файл ещё до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку). |
‘c+’ | Открывает файл для чтения и записи; в остальном имеет то же поведение, что и ‘c’ . |
‘e’ | Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающих POSIX.1-2008. |
Замечание:
Разные семейства операционных систем имеют разные соглашения относительно окончания строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильные символы (или символ) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh (Mac OS Classic) используют \r в качестве символа конца строки.
Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы «странно выглядят».
Windows предлагает флаг режима текстовой трансляции ( ‘t’ ), который автоматически переведёт \n в \r\n во время работы с файлом. И наоборот — вы также можете использовать ‘b’ , чтобы принудительно включить бинарный режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите ‘b’ или ‘t’ последней буквой параметра mode .
Флагом трансляции по умолчанию является ‘b’ . Вы можете использовать режим ‘t’ , если работаете с текстовыми файлами и используете \n для обозначения конца строки в вашем скрипте, но при этом предполагаете, что ваши файлы будут использоваться в таких приложениях, как «Блокнот» (в устаревших версиях). Во всех остальных случаях используйте флаг ‘b’ .
Если вы укажете флаг ‘t’ во время работы с бинарными файлами, вы можете столкнуться со странными проблемами с вашими данными, включая повреждённые файлы изображений и проблемы с символами \r\n .
Замечание:
Опять же из соображений портируемости крайне рекомендуется переписать старый код, который полагается на режим ‘t’ , чтобы вместо этого он использовал правильные концы строк и режим ‘b’ .
Замечание: Параметр mode игнорируется при работе с обёртками потока php://output , php://input , php://stdin , php://stdout , php://stderr и php://fd .
Необязательный третий параметр use_include_path может быть установлен в ‘1’ или true , если вы также хотите провести поиск файла в include_path.