Page 1 sur 2

Espace disque

Posté : 14 avr. 2006, 09:35
par Mickael Bay
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

Posté : 14 avr. 2006, 10:01
par mere-teresa
Pourquoi celles ci ne te conviennent pas ?

espace disque

Posté : 14 avr. 2006, 10:59
par mickael bay
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.

Posté : 14 avr. 2006, 11:50
par mere-teresa
Elles montrent l'espace disque de l'endroit où est installé PHP, oui.

espace disque

Posté : 14 avr. 2006, 14:00
par mickael bay
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 ?

espace disque

Posté : 14 avr. 2006, 16:58
par mickael bay
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

Posté : 15 avr. 2006, 05:00
par Ultiny
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.

espace disque

Posté : 19 avr. 2006, 14:53
par mickael bay
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]

Posté : 19 avr. 2006, 17:48
par iclo
Ha ? parce qu'on peut lancer des exe windows depuis un script php ??

Posté : 19 avr. 2006, 18:07
par thierry59
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..

Posté : 19 avr. 2006, 19:20
par iclo
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:

espace disque

Posté : 20 avr. 2006, 08:36
par mickael bay
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.

espace disque

Posté : 20 avr. 2006, 10:03
par mickael bay
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

espace disque

Posté : 20 avr. 2006, 10:28
par mickael bay
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.

Posté : 20 avr. 2006, 14:06
par thierry59
$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...