2010-08-13 18 views
0

http://en.wikipedia.org/wiki/Special_Folders访问Windows'特别在PHP的fopen命名的文件夹流

我有在PHP中的fopen流访问一个特殊的文件夹中的一个问题。

$fp = fopen("%USERPROFILE%/Desktop/text.txt", 'wb'); 
fwrite($fp, $data); 
fclose($fp); 

我尝试这与Sysinternals的进程监视器运行试试,看看什么是真正发生的事情,它看起来是这样的。

C:/xampp/htdocs/test/%USERPROFILE%/Desktop/text.txt PATH NOT FOUND 

那么显然两招都走错了,PHP是治疗路径为相对路径和特殊的文件夹没有被评估。

回答

3
$fp = fopen("{$_ENV['USERPROFILE']}\\Desktop\\text.txt", 'wb'); 

请参阅手册上的$_ENV以及getenv()

正如JohannesRössel所说,这只会在有限的情况下才能发挥作用。您可以使用此内部功能:

#include<Shlobj.h> 

PHP_FUNCTION(win_get_desktop_folder) 
{ 
    char szPath[MAX_PATH]; 

    if (zend_parse_parameters_none() == FAILURE) 
     RETURN_NULL(); 

    if (SUCCEEDED(SHGetSpecialFolderPathA(NULL, szPath, 
     CSIDL_DESKTOP, FALSE))) { 
     RETURN_STRING(szPath, 1); 
    } else { 
     RETURN_FALSE; 
    } 
} 
+1

而且它仍然会部分错误,因为无法保证Desktop文件夹位于:-)。尽管我不知道您是否可以以某种方式从PHP调用[SHGetKnownFolderPath](http://msdn.microsoft.com/zh-cn/library/bb762188.aspx)。 – Joey 2010-08-13 11:52:16

+0

@Johan对...我想他需要写一个扩展名。 – Artefacto 2010-08-13 11:58:41

+0

ok $ _env ['USERPROFILE']有效。但是,%temp%相当于什么呢? $ _env ['TEMP']和$ _env ['TMP']等于C:\ Windows \ TEMP,而%temp%等于C:\ Users \ Admin \ AppData \ Local \ Temp – Neddy 2010-08-13 13:47:36