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);