2010-08-13 48 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