Espace disque

Mickael Bay
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 09:35

Bonjour,
Je souhaite afficher l'espace disque d'un ordinateur distant. Y aurait-il une commande qui permette de verifier l'espace disque en PHP autre que
disk_total_space($partition);
ou
disk_free_space($partition);
Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 avr. 2006, 10:01

Pourquoi celles ci ne te conviennent pas ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

mickael bay
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 10:59

Ces commandes ne me conviennent pas car elle montre l'espace disque disponible sur le disque local.
Or je voudrai connaitre l'espace disque d'un serveur par exemple. Ces commandes n'agissent qu'en localhost, à moins que je me trompe.
Les serveurs sont en windows 2003 serveur ou windows 2000 serveur.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 avr. 2006, 11:50

Elles montrent l'espace disque de l'endroit où est installé PHP, oui.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

mickael bay
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 14:00

Bonjour,
Le probleme se situe la, le programme en php se situe sur l'ordinateur d'un admin, et c'est le serveur, dont on veut connaitre la taille de l'espace disque.
Y aurait-il une commande permettant de specifier le systeme a partir duquel on souhaite connaitre l'espace disque ?

mickael bay
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 16:58

YOP YOP
Je viens de trouver, apres moult recherche que windows 2003 R2 possede une fonction, nommé freedisk qui permet d'avoir l'espace disque disponible d'un ordinateur a distance. Manque plus que je trouve freedisk.exe et le coller dans c:/windows/system32/
Merci pour ton aide mere-teresa

ViPHP
ViPHP | 656 Messages

15 avr. 2006, 05:00

Ba alors si c'est que Win R2 ta peu de chance que ça marche sur tes 2000 voir même tes 2003 puisque R2 est tout frais.

mickael bay
Invité n'ayant pas de compte PHPfrance

19 avr. 2006, 14:53

RE ^^

La commande freedisk marche bien sous windows XP, elle etait livrée avec plusieurs autres commande dans un espece de service pack assez special.
Bref, cette commande me retourne quelque chose sous cette forme
"INFO: 35 795 005 440 bytes free on current volume."
je ne veux que les octets, le reste on peut dire que je m'en fous.
Deux question : Comment faire pour mettre la valeur chiffrée (35 795 005 440) dans un espece de tableau, voir une base de données.
J'ai pensé faire un traitement en php. Le fichier est en csv ou en txt, au choix.
Je saute les premiers caractères, des que je vois un espace je le supprime et des que je voit le caractère "b" de bytes j'arrete le traitement.

Merci pour vos observations et vos eventuels conseil
[/quote]

ViPHP
ViPHP | 2144 Messages

19 avr. 2006, 17:48

Ha ? parce qu'on peut lancer des exe windows depuis un script php ??

Eléphanteau du PHP | 25 Messages

19 avr. 2006, 18:07

oui iclo par la commande system()
mais pour des raison de securité beau nombre débergeur la desactive..

pour mickael bay

c du traitement de chaine
utilise strpos() pour connaitre la position de "INFO: " ( peu etre pas obliger si le 1er chiffres prend toujours la meme position.. )

utilise strpos() pour connaitre la position de "bytes"

utilise substr() pour couper la chaine et recupéré les chiffres...

il faut ensuite eliminé les espaces..
strtr() -- Remplace des caractères dans une chaîne ( a testé.. )


Mais, il y a peu etre une autre solution plus simple..


PAr contre pour:
Le probleme se situe la, le programme en php se situe sur l'ordinateur d'un admin, et c'est le serveur, dont on veut connaitre la taille de l'espace disque.
je ne vois pas ou est l'ennuie..
Cordialement Thierry.

ViPHP
ViPHP | 2144 Messages

19 avr. 2006, 19:20

oui iclo par la commande system()
mais pour des raison de securité beau nombre débergeur la desactive..
oui, mais là, sauf erreur de ma part c'est sur un pc distant que l'on souhaite exécuter un programme sur le serveur (qui risque d'être sous Unix en plus)
donc... :wink:

mickael bay
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 08:36

Merci thierry pour ces commmandes,
Je vais les tester aussitot. Pour info tout les serveur sont en windows 2003, ou windows 2000 donc la commande system ou exec(freedisk) marche bien, (avec qq commentaires bien utiles d'ailleurs).
Le probleme se situe la, le programme en php se situe sur l'ordinateur d'un admin, et c'est le serveur, dont on veut connaitre la taille de l'espace disque.

En faite cela venait d'une commande edn phph qu tester l'espace disque de l'ordinateur ou etait installé le code en php, donc impossible a realiser vu que je souhaite connaitre l'espace d'un disque dur mis en reseau.
Rien de bien grave car freedisk le fait a ma place.

mickael bay
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 10:03

Re

Sinon, thierry j'ai oublié de te demander ta solution plus simple ^^...
Pour strtr, je ne peut pas 'enlever les espaces, je ne peut que les remplacer par un autre caractère

string strtr ( string str , string from , string to ) string strtr ( string str , array replace_pairs )

strtr retourne la chaîne str , après avoir remplacé chaque caractère du paramètre from par son équivalent dans le paramètre to .

Si from et to sont de tailles différentes, les caractères en trop dans l'un ou l'autre seront ignorés.
Je ne sais vraiment pas comment faire...

Merci

mickael bay
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 10:28

exec('freedisk > space.txt');
$ouvre=fopen("space.txt","r");
$i = 0;
while ($i < 2){
	// on recupère la ligne courante
	$temp = fgets($ouvre);
	$i++;
	}
// fermeture du fichier
fclose($ouvre);
$base='serveur';
//$EspaceLibre=$_POST['EspaceLibre'];
$findme   = 'bytes';
$pos = strpos($temp, $findme);
$pos1=$pos-6;
$temp = substr($temp, 6, $pos1);
$temp = strtr($temp, "ÿ", ".");
$temp1=$temp*1000*1000*1000/1024/1024/1024;
$EspaceLibre=round($temp1,3);
J'ai reussi a ne garder que le 'nombre' 33ÿ261ÿ132ÿ800.

Voila une utilisation assez barbare, en remplacant le ÿ par un '.' php voit le nombre "33.261".132.800 mais seulement 33.261 l'autre point doit le perturber et donc, il ne garde en memoire que les chiffres avant le premier point et entre le premier et le deuxieme point.

Bref apres je le multiplie 3 fois par 1000, pour le convertir en octet, et je le divise 3 fois par 1024 pour le convertir en Go.

Donc ce prob est resolu, la taille correpond avec moins de 10% d'erreur, donc c'est bon, on vas pas chipoter.

Eléphanteau du PHP | 25 Messages

20 avr. 2006, 14:06

$pos1=$pos-6; 
 
pourquoi -6 ?


ta chaine est: "INFO: 35 795 005 440 bytes free on current volume."
tu doit detecté le debut de la chaine "INFO: "et ajouter a ta position 6
tu doit detecté le debut de la chaine "bytes" et soustraire 1
tu coupe ta chaine et il te restera: "35 795 005 440" = $value_str

Apres tu vire les espaces... si tu ne trouve pas une fonction pose un autre post, on te repondra tous de suite...

Ou alors creer toi meme la fonction! avec une boucle while ou for...
Cordialement Thierry.