PHP中的fopen模式“r+”、“rw+”和“w+”有什么区别?
在制作应用程序时,文件处理是编程中非常重要的一部分。我们可能需要从文件中读取输入或将输出写入文件。 PHP中的文件处理类似于其他编程语言。有一些预定义的函数可用于完成指定的任务。查看文件处理基础知识以了解这些功能。
句法:
$ = fopen(,)
PHP中fopen模式r+、rw+和w+的区别
- r+:以读写模式打开文件。文件指针从文件的开头开始。
- w+:以读写模式打开文件。如果文件不存在,则创建一个新文件,如果存在,则擦除文件内容,文件指针从头开始。
- rw+:以读写模式打开文件。文件指针从文件的开头开始。 PHP文档中不存在这种模式,但它运行良好。
示例:为了更好地理解,让我们观察 fopen 的解析函数。
- 它检查参数的第一个字符,即模式[0]。根据它是 r、w、a 或 x,识别相应的模式。
- 它在模式参数中查找“+”的存在。如果存在,它会设置适当的标志。
因此, “r+”和“w+”在打开文件和放置文件指针的方式上是有区别的。 “r+”和“rw+”是一样的。 PHP只关心字符串是否以“r”开头并带有“+” 。 “w”在“rw+”中被忽略。因此,它们的工作方式相同。
PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags)
{
int flags;
switch (mode[0]) {
case 'r':
flags = 0;
break;
case 'w':
flags = O_TRUNC|O_CREAT;
break;
case 'a':
flags = O_CREAT|O_APPEND;
break;
case 'x':
flags = O_CREAT|O_EXCL;
break;
case 'c':
flags = O_CREAT;
break;
default:
/* unknown mode */
return FAILURE;
}
if (strchr(mode, '+')) {
flags |= O_RDWR;
} else if (flags) {
flags |= O_WRONLY;
} else {
flags |= O_RDONLY;
}
#if defined(O_CLOEXEC)
if (strchr(mode, 'e')) {
flags |= O_CLOEXEC;
}
#endif
#if defined(O_NONBLOCK)
if (strchr(mode, 'n')) {
flags |= O_NONBLOCK;
}
#endif
#if defined(_O_TEXT) && defined(O_BINARY)
if (strchr(mode, 't')) {
flags |= _O_TEXT;
} else {
flags |= O_BINARY;
}
#endif
*open_flags = flags;
return SUCCESS;
}