Доступ к специальным именованным папкам Windows в потоках PHP - PullRequest
0 голосов
/ 13 августа 2010

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

У меня проблема с доступом к специальной папке в потоке fopen в php.

Пример

$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 Ответ

3 голосов
/ 13 августа 2010
$fp = fopen("{$_ENV['USERPROFILE']}\\Desktop\\text.txt", 'wb');

См. $_ENV в руководстве, а также getenv().

Как сказал Йоханнес Рессел, это будет работать только в ограниченных обстоятельствах.Вы можете использовать эту внутреннюю функцию вместо:

#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;
    }
}
...