Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
1

fwrite() и file_put_contents()

12.10.2012, 19:54. Показов 6267. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.
В каких случаях нужно использовать тот или иной способ и с то4ки безопасности какой путь добавления в файл лучше выбрать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2012, 19:54
Ответы с готовыми решениями:

File_put_contents();
Только начал смотреть в сторону php , подскажите пожалст как мне в моём php файле принять данные ...

file_put_contents()
Ку! Мне необходимо залить в TXT файл инфу переменной $lipa. Я использую следующее: ...

Ошибка file_put_contents
Почему может возникать ошибка file_put_contents(/public_html/www/logs/log_3.2.2019.txt): failed to...

Нюансы file_put_contents
Файл формируется с добавлением новой информации следующим образом: file_put_contents($filename,...

6
9 / 9 / 8
Регистрация: 09.01.2012
Сообщений: 70
12.10.2012, 20:21 2
file_put_contents() на 1,000,000 записей - 3 теста:

real 0м 3.932с
user 0м 2.487с
sys 0м 1.437с

fopen() fwrite() на 1,000,000 записей, fclose() - 3 теста:

real 0м 2.265с
user 0м 1.819с
sys 0м 0.445с
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
12.10.2012, 20:42 3
Ну так это совершенно разные функции
Первая пишет в заранее открытый файловый указатель.
Вторая открывает файл, пишет в него и закрывает файл.

Это всё равно, что спросить, когда лучше воспользоватся машиной что бы поехать а когда колесом от неё

Даже в описании функции http://php.net/manual/ru/funct... ntents.php
Написано что
Функция идентична последовательным успешным вызовам функций fopen(), fwrite() и fclose()
Если у вас просто текст в переменной, то гораздо удобней его дописать в файл или перезаписать, с помощью всего лишь одной функции file_put_contents.

А функция fwrite даст больше возможностей потому что, открывая файл функцией fopen, вы можете указать дополнительные парамтеры.
Но вы можете открыть например файловый указатель потока, функцией popen.
А можете установить соединение по сокетам с чем то ещё с помощью функции fsockopen.

Добавлено через 9 минут
Эксперт, file_put_contents не только пишет в файл
Кликните здесь для просмотра всего текста

C++
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
PHP_FUNCTION(file_put_contents)
{
    php_stream *stream;
    char *filename;
    int filename_len;
    zval *data;
    int numbytes = 0;
    long flags = 0;
    zval *zcontext = NULL;
    php_stream_context *context = NULL;
    php_stream *srcstream = NULL;
    char mode[3] = "wb";
 
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz/|lr!", &filename, &filename_len, &data, &flags, &zcontext) == FAILURE) {
        return;
    }
 
    if (strlen(filename) != filename_len) {
        RETURN_FALSE;
    }
 
    if (Z_TYPE_P(data) == IS_RESOURCE) {
        php_stream_from_zval(srcstream, &data);
    }
 
    context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
 
    if (flags & PHP_FILE_APPEND) {
        mode[0] = 'a';
    } else if (flags & LOCK_EX) {
        /* check to make sure we are dealing with a regular file */
        if (php_memnstr(filename, "://", sizeof("://") - 1, filename + filename_len)) {
            if (strncasecmp(filename, "file://", sizeof("file://") - 1)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Exclusive locks may only be set for regular files");
                RETURN_FALSE;
            }
        }
        mode[0] = 'c';
    }
    mode[2] = '\0';
 
    stream = php_stream_open_wrapper_ex(filename, mode, ((flags & PHP_FILE_USE_INCLUDE_PATH) ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
    if (stream == NULL) {
        RETURN_FALSE;
    }
 
    if (flags & LOCK_EX && (!php_stream_supports_lock(stream) || php_stream_lock(stream, LOCK_EX))) {
        php_stream_close(stream);
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Exclusive locks are not supported for this stream");
        RETURN_FALSE;
    }
 
    if (mode[0] == 'c') {
        php_stream_truncate_set_size(stream, 0);
    }
 
    switch (Z_TYPE_P(data)) {
        case IS_RESOURCE: {
            size_t len;
            if (php_stream_copy_to_stream_ex(srcstream, stream, PHP_STREAM_COPY_ALL, &len) != SUCCESS) {
                numbytes = -1;
            } else {
                numbytes = len;
            }
            break;
        }
        case IS_NULL:
        case IS_LONG:
        case IS_DOUBLE:
        case IS_BOOL:
        case IS_CONSTANT:
            convert_to_string_ex(&data);
 
        case IS_STRING:
            if (Z_STRLEN_P(data)) {
                numbytes = php_stream_write(stream, Z_STRVAL_P(data), Z_STRLEN_P(data));
                if (numbytes != Z_STRLEN_P(data)) {
                    php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", numbytes, Z_STRLEN_P(data));
                    numbytes = -1;
                }
            }
            break;
 
        case IS_ARRAY:
            if (zend_hash_num_elements(Z_ARRVAL_P(data))) {
                int bytes_written;
                zval **tmp;
                HashPosition pos;
 
                zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(data), &pos);
                while (zend_hash_get_current_data_ex(Z_ARRVAL_P(data), (void **) &tmp, &pos) == SUCCESS) {
                    if (Z_TYPE_PP(tmp) != IS_STRING) {
                        SEPARATE_ZVAL(tmp);
                        convert_to_string(*tmp);
                    }
                    if (Z_STRLEN_PP(tmp)) {
                        numbytes += Z_STRLEN_PP(tmp);
                        bytes_written = php_stream_write(stream, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
                        if (bytes_written < 0 || bytes_written != Z_STRLEN_PP(tmp)) {
                            if (bytes_written < 0) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write %d bytes to %s", Z_STRLEN_PP(tmp), filename);
                            } else {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", bytes_written, Z_STRLEN_PP(tmp));
                            }
                            numbytes = -1;
                            break;
                        }
                    }
                    zend_hash_move_forward_ex(Z_ARRVAL_P(data), &pos);
                }
            }
            break;
 
        case IS_OBJECT:
            if (Z_OBJ_HT_P(data) != NULL) {
                zval out;
 
                if (zend_std_cast_object_tostring(data, &out, IS_STRING TSRMLS_CC) == SUCCESS) {
                    numbytes = php_stream_write(stream, Z_STRVAL(out), Z_STRLEN(out));
                    if (numbytes != Z_STRLEN(out)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", numbytes, Z_STRLEN(out));
                        numbytes = -1;
                    }
                    zval_dtor(&out);
                    break;
                }
            }
        default:
            numbytes = -1;
            break;
    }
    php_stream_close(stream);
 
    if (numbytes < 0) {
        RETURN_FALSE;
    }
 
    RETURN_LONG(numbytes);
}

Тут ещё блокировка файла, и определение что именно передано в качестве данных. Правда по умолчанию блокировка вылкючена, но проверка флагов то есть, а это время
0
9 / 9 / 8
Регистрация: 09.01.2012
Сообщений: 70
12.10.2012, 21:18 4
Эксперт, file_put_contents не только пишет в файл
По-моему Автор Сабжа хотел узнать именно о функции записи в файл. Остальное уже отход от темы.
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
13.10.2012, 11:30 5
Цитата Сообщение от koza4ok Посмотреть сообщение
Привет.
В каких случаях нужно использовать тот или иной способ и с то4ки безопасности какой путь добавления в файл лучше выбрать?
с то4ки безопасности
0
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
13.10.2012, 11:52  [ТС] 6
Эксперт спасибо ,что показал скорость.
Как подметил alpex меня интересовало именно безопасность(как ее обеспечить).
0
9 / 9 / 8
Регистрация: 09.01.2012
Сообщений: 70
13.10.2012, 13:18 7
просто буква и у тебя стоит.))
0
13.10.2012, 13:18
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2012, 13:18
Помогаю со студенческими работами здесь

Не сохраняет file_put_contents()
$f = 'file.txt'; var_dump(is_writable($f)); // true $v = file_put_contents($f, &quot;test&quot;);...

Генератор file_put_contents();
Есть файл add.php. По нажатию кнопки происходит скрипт: $goodname = '1'; ...

Register_shutdown_function и file_put_contents
Добрый вечер. Это по теме перехвата фатальных ошибок. В функции, которую регистрируем...

file_put_contents (не могу разобраться)
Ребята, подскажите, что нужно исправить-дописать, что бы вся страничка сохранялась в файл? Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как узнать какой процесс блокирует файл или каталог в Windows
bt_guru 23.01.2025
При работе с операционной системой Windows пользователи нередко сталкиваются с ситуацией, когда система отказывается выполнять определенные действия с файлами или каталогами, сообщая, что они. . .
Как в curl узнать код статуса HTTP запроса. Коды состояния HTTP
bt_guru 23.01.2025
Коды состояния HTTP играют значимую роль в обеспечении эффективного взаимодействия между клиентами и серверами. При работе с веб-сервисами важно не только отправлять запросы, но и правильно. . .
Как сортировать вывод команды ls в Linux
bt_guru 23.01.2025
В операционной системе Linux команда ls является одним из наиболее часто используемых инструментов для просмотра содержимого директорий. При работе с файловой системой пользователи регулярно. . .
Как сделать POST запрос с помощью curl
bt_guru 23.01.2025
curl - это мощный инструмент командной строки позволяет отправлять и получать данные через различные протоколы, включая HTTP, HTTPS, FTP и множество других. Особенно полезным curl становится при. . .
Прокрутка в tmux с помощью мыши и клавиатуры
bt_guru 23.01.2025
Tmux представляет собой мощный терминальный мультиплексор, который позволяет пользователям создавать и управлять несколькими терминальными сессиями внутри одного окна. Одной из важнейших функций tmux. . .
Как проверить, содержит ли массив значение в JavaScript. Поиск в массиве
bytestream 23.01.2025
Эффективный поиск значений в массивах становится критически важным навыком для разработчиков, использующих JavaScript. Процесс поиска элементов в массиве может показаться простым на первый взгляд,. . .
Как удалить тег Git в удалённом репозитории (remote)
bytestream 23.01.2025
Одним из важнейших механизмов организации версий в Git являются теги, которые позволяют помечать определенные точки в истории проекта как значимые. Теги часто используются для маркировки релизов,. . .
Чем отличаются URL, URI и URN
bytestream 23.01.2025
Системы идентификации представляют собой фундаментальный механизм, позволяющий однозначно определять местоположение и характеристики различных информационных объектов в глобальной сети. Эти системы. . .
Как центрировать div внутри другого div с помощью CSS. Управление расположением элементов в CSS
bytestream 23.01.2025
Позиционирование элементов играет ключевую роль в создании качественных и профессиональных интерфейсов. Одной из наиболее часто встречающихся задач является центрирование элементов на веб-странице,. . .
Что означают различные символы в синтаксисе PHP
bytestream 23.01.2025
PHP (Hypertext Preprocessor) представляет собой один из наиболее широко используемых языков программирования для веб-разработки, который обладает богатой и интересной историей развития. Изначально. . .
Способы клонирования объектов в JavaScript
bytestream 23.01.2025
В современной разработке на JavaScript работа с объектами является фундаментальной частью создания любого приложения. При манипуляции объектами часто возникает необходимость создавать их копии для. . .
Как проверить состояние чекбокса в jQuery. Как работать с чекбоксами
bytestream 23.01.2025
При разработке интерактивных веб-форм часто возникает необходимость программно определять состояние чекбоксов с помощью jQuery. Чекбоксы являются важными элементами пользовательского интерфейса,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru