2010-08-13 19 views
0

http://en.wikipedia.org/wiki/Special_FoldersWindows Accès à dossiers spéciaux nommés dans les flux fopen PHP

je rencontre un problème avec l'accès à un dossier spécial dans un flux fopen en php.

Exemple

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

J'essaie avec ce processus de Sysinternals moniteur en cours d'exécution pour essayer de voir ce qui se passe réellement et il ressemble à quelque chose comme ça.

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

Eh bien apparemment deux choses vont mal, PHP traite le chemin comme un chemin relatif et le dossier spécial n'est pas en cours d'évaluation.

Répondre

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

Voir $_ENV sur le manuel et aussi getenv(). Comme l'a dit Johannes Rössel, cela ne fonctionnera que dans des circonstances limitées. Vous pouvez utiliser cette fonction interne à la place:

#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

Et il serait encore partiellement faux, car il n'est pas garanti que le dossier Bureau se trouve là :-). Bien que je n'ai aucune idée si vous pouvez appeler [SHGetKnownFolderPath] (http://msdn.microsoft.com/en-us/library/bb762188.aspx) de PHP en quelque sorte. – Joey

+0

@Johan Droit ... Je suppose, il devra écrire une extension. – Artefacto

+0

ok $ _env ['USERPROFILE'] fonctionne. Mais qu'en est-il de l'équivalent% temp%? $ _env ['TEMP'] et $ _env ['TMP'] sont égaux à C: \ Windows \ TEMP tandis que% temp% est égal à C: \ Users \ Admin \ AppData \ Local \ Temp – Neddy