Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
koza4ok
627 / 436 / 67
Регистрация: 19.09.2012
Сообщений: 1,633
1

fwrite() и file_put_contents()

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

Привет.
В каких случаях нужно использовать тот или иной способ и с то4ки безопасности какой путь добавления в файл лучше выбрать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2012, 19:54
Ответы с готовыми решениями:

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

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

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

File_put_contents лишние символы
Вот код file_put_contents('example.txt', "$name > $email\n", FILE_APPEND);...

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

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
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
12.10.2012, 20:42 3
Ну так это совершенно разные функции
Первая пишет в заранее открытый файловый указатель.
Вторая открывает файл, пишет в него и закрывает файл.

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

Даже в описании функции http://php.net/manual/ru/function.file-put-contents.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
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
13.10.2012, 11:30 5
Цитата Сообщение от koza4ok Посмотреть сообщение
Привет.
В каких случаях нужно использовать тот или иной способ и с то4ки безопасности какой путь добавления в файл лучше выбрать?
с то4ки безопасности
0
koza4ok
627 / 436 / 67
Регистрация: 19.09.2012
Сообщений: 1,633
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 13:18

Может ли file_put_contents записать в нексолько строк?
$stringfile = array(RAZ, DVA, TRI); file_put_contents(&quot;table.txt&quot;,...

file_put_contents выдает ошибку: No such file or directory
Скажите пожалуйста как можно через file_put_contents додать данные в файл...

Как записать через file_put_contents в определенную строку
Здравствуйте. Подскажите, как мне сделать запись в определенную строку в файл,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru