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