PHP | file_put_contents 函數
怎樣保存數據
最近更新時間 2021-01-08 18:51:19
file_put_contents 函數將字符串寫入文件。
file_put_contents() 函數相當於依次調用 fopen()、fwrite() 和 fclose() 函數。操作失敗會返回 false。如果文件不存在,會自動創建文件,但不會自動創建目錄。
可傳入 flags 參數表示添加或加鎖,可進行異或運算。默認為新建模式,會覆蓋文件內容。
函數定義
file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) : int
// 源文件位於:ext/standard/file.c
# 函數定義
PHP_FUNCTION(file_put_contents)
{
...
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, 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) | 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, E_WARNING, "Exclusive locks are not supported for this stream");
RETURN_FALSE;
}
if (mode[0] == 'c') {
php_stream_truncate_set_size(stream, 0);
}
...
php_stream_close(stream);
if (numbytes < 0) {
RETURN_FALSE;
}
RETURN_LONG(numbytes);
}
參數
- checkfilename - 要被寫入數據的文件名。
- checkdata - 要寫入的數據。類型可以是 string,array 或者是 stream。
- checkcontext - 可選參數,自定義 context。
- checkflags - 可選參數,flags 的值可以是 以下 flag 使用 OR (|) 運算符進行的組合。FILE_USE_INCLUDE_PATH、FILE_APPEND、LOCK_EX。
- checkcontext - context 資源。
返回值
- checkint - 該函數將返回寫入到文件內數據的字節數,失敗時返回false
示例1: - 使用 file_put_contents() 函數保存數據。
<?php
/**
* PHP 使用 file_put_contents() 函數保存數據。
*
* @since Version 1.0.0
* @filesource
*/
// 網址
$filename = 'foo.txt';
// 寫入文件
file_put_contents($filename, 'Fooooo');
// 不覆蓋內容,加鎖
// file_put_contents($filename, 'Fooooo', FILE_APPEND | LOCK_EX);