在PHP fopen流中访问Windows的特殊命名文件夹

时间:2010-08-13 11:45:17

标签: php windows stream fopen special-folders

http://en.wikipedia.org/wiki/Special_Folders

我在访问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将路径视为相对路径,而特殊文件夹未被评估。

1 个答案:

答案 0 :(得分: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;
    }
}