我想使用模式 x 因為正如我從 php.net 看到的那樣,如果文件存在,它會給出錯誤并返回 false,如果不存在,它會創建它(也是目錄的)。這是腳本。它位于 www.ex.com/s/index.php$urlParts = "/img/logo.png";
$fp = fopen( __DIR__ . $urlParts, "x" );如果它不存在,這應該創建 logo.png(并創建目錄 /img/)...但它不是這樣工作的。任何人都可以幫忙嗎?謝謝!
1 回答

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
fopen("/img/logo.png","x");
在任何情況下它都不會創建 img 目錄。如果目錄不存在,那么它總是會拋出這個警告。
警告:fopen(/img/logo.png):無法打開流:沒有那個文件或目錄
fopen("logo.png","x");
如果 logo.png 尚不存在,那么它將在沒有任何警告的情況下創建它。如果 logo.png 已經存在,那么它總是會拋出這個警告。
警告:fopen(logo.png):無法打開流:沒有這樣的文件或目錄
fopen("","x") 相當于為底層 open(2) 系統調用指定 O_EXCL|O_CREAT 標志?,F在讓我來幫助您了解為什么會發生這種情況。
在 POSIX 中,如果文件不存在,則 O_CREAT 標志會導致創建文件。如果包含 O_CREAT 標志,則還必須將第三個參數傳遞給 open 以指定權限。如果您想避免覆蓋現有文件,請使用組合 O_CREAT | O_EXCL。如果文件已存在,則此組合將返回錯誤。
使用 POSIX 的 C 程序
#include <fcntl.h>
#include <sys/stat.h>
int open(const char *path, int oflag, ...);
結論:因此,只有當我們想避免覆蓋現有文件時,我們才會使用“x”模式。
- 1 回答
- 0 關注
- 370 瀏覽
添加回答
舉報
0/150
提交
取消