Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Partitionen oder Laufwerke auslesen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Partitionen oder Laufwerke auslesen


 
Heinzelmännchen
18-02-2004, 00:13 
 
Hallo,

gibt es ne möglichkeit mit PHP Laufwerke auszulesen. A:, C:, D: etc oder die Partitionen?

Bin gerade dabei eine Art Explorer (Total Commander) mit PHP zu schreiben. Soll auch nur auf Windows Systemen funktionieren.

Bye
Heinzelmännchen

 
mrhappiness
18-02-2004, 07:22 
 
auf dem pc auf dem php installiert is un dder webserver läuft: prinzipiell ja

auf meinem pc, der ich deine seite ansurfe: nein

 
Heinzelmännchen
18-02-2004, 07:36 
 
Jipp, soll in dem Fall nur auf meinem PC sein.

Da dies im Prinzip gehen soll, ist nur die Frage wie in etwa?

bye,
Heinzelmännchen

 
mrhappiness
18-02-2004, 07:55 
 
du könntest dir ne eigene bibliothek abfragen und dir von windows sagen lassen, welche laufwerke es gibt und die dann einlesen

oder du machst dir ne schleife von ord('A') bis ord('Z') und probierst dein glück, frag mich da aber nicht, was passiert, wenn es laufwerk H nicht gibt oder in laufwerk A keine diskette/laufwerk E keine cd liegt

 
Heinzelmännchen
18-02-2004, 12:15 
 
Original geschrieben von mrhappiness
du könntest dir ne eigene bibliothek abfragen und dir von windows sagen lassen, welche laufwerke es gibt und die dann einlesen

oder du machst dir ne schleife von ord('A') bis ord('Z') und probierst dein glück, frag mich da aber nicht, was passiert, wenn es laufwerk H nicht gibt oder in laufwerk A keine diskette/laufwerk E keine cd liegt
Wieso ord('A') bis ord('Z') ? Ja gut, das Laufwerk von A-Z vergeben werden ist mir schon klar. Doch wieso ord()?

Wie kann ich die Abfrage denn machen? Bibliotheken?! Weiß gar nicht wie ich dies mit PHP Ansprechen kann. Gibt es irgendwo Beispiele oder steht was in der Manual dazu? Habe nix gefunden. Hätte ja mal auf getDrive() getippt, doch PHP ist ja eigentlich dafür gar nicht ausgelegt. (nehme ich mal an)

bye
Heinzelmännchen

 
Heinzelmännchen
18-02-2004, 14:35 
 
Habe es jetzt erst einmal wie folgt gelöst:function getDrives() {
for( $i = ord('A') ; $i <= ord('Z') ; $i++ ) {
if ( is_dir( chr($i) . ':\\' ) ) {
$arrDrives[] = chr($i) ;
}
}

return $arrDrives ;
}
Diskettenlaufwerk und CD-ROM Laufwerke werden miterkannt. Jedoch die Netzwerk Verknüpften Laufwerke nicht.

Bye,
Heinzelmännchen

 
yesrus
23-01-2007, 22:41 
 
Und wie kannman jetzt die Laufwerke durchsuchen?
Mit chdir kann ich zwar zum Laufwerk wechseln aber da funzt nicht opendir weiter :dontknow:

Bitte hilft

 
penizillin
23-01-2007, 22:59 
 
was funktioniert nicht?

glob() angeschaut?

 
combie
23-01-2007, 23:26 
 
Jedoch die Netzwerk Verknüpften Laufwerke nicht.
Was ja auch relativ logisch ist!!
Weil:
Unter win läuft der Apache(PHP) meist unter dem Benutzerkonto "system". Und "system" darf normalerweise nicht auf Netzwerkressourcen zugreifen!
(und das ist auch gut so)

 
yesrus
24-01-2007, 11:18 
 
opnedir funzt nicht wenn ich in ein anderes Laufwerk wechsele.
Z.B:

$laufwerk="I:/";
if(chdir($laufwerk))echo "Laufwerk $laufwerk :<br>";
$laufwerk_resource=opendir(".");
while($file=readdir($laufwerk_resource)){
echo "$file <br>";
}

Ausgabe
Laufwerk I:/
und dann bekomme ich Fehlermeldung, Invalid Argument für opendir()

Ich versuch's aber noch mit glob().

 
yesrus
24-01-2007, 21:43 
 
Nein, mit glob() geht auf nicht. Ich weiß es nicht wieso. :dontknow:
Hat jemand eine Lösung???

 
wahsaga
24-01-2007, 21:54 
 
Hinweis von combie berücksichtigt?

 
yesrus
25-01-2007, 10:03 
 
Hinweis von combie berücksichtigt?

Ja, hab ich.

Es handelt sich nur um lokale Laufwerke (Partitionen).

Merkwürdig: wenn ich nach dem chdir() glob(".") ausführe, dann greift er auf Laufwerk A. Weil beim Ausführen leuchtet das LED von dem Laufwerk A.
Und das ist egal welche Buchstabe ich für chdir() nehme.
Ich hab sogar in einer Schleife versucht:


$ordner=".";
for( $i = ord('A') ; $i <= ord('Z') ; $i++ ) {
if (is_dir( chr($i) . ':' ) ) {
if(chdir(chr($i)) ){
echo chr($i)."<br>";
glob($ordner);
}
}
}


und trotzdem leuchtet LED von Laufwerk A! Obwohl es werden alle meine Laufwerkbuchstaben richtig ausgegeben!

 
penizillin
25-01-2007, 11:03 
 
versuch mal echo getcwd() . "\n";

chdir('d:\\\\\\\\'); # hier ist ein slash zu viel, aber ich komme mit dem forum nicht zurecht.
echo getcwd() . "\n";

print_r(glob('*'));

was kommt raus?

 
combie
25-01-2007, 12:30 
 
Ist doch völlig wurscht, ob Backslashes, oder nicht...
das repariert PHP für uns..
for( $i = ord('A') ; $i <= ord('Z') ; $i++ )
{
$lw = chr($i).':';
if (is_dir($lw))
{
echo '<h3>Laufwerk: '.$lw.'<h3>';
print_r(glob($lw.'/*'));
echo '<br>';
}
}


Ausserdem halte ich es SO, für recht unsauber gelöst!!
Wenn mich nicht alles täuscht(und es täuscht mich bestimmt nicht), bietet die Win API die Möglichkeit Alle Laufwerke zu beauskunften, OHNE sie erst lesen zu müssen. Zusätzlich meldet sie uns noch. ob es ein CD-ROM, Festplatte, USB-Stick oder was auch immer ist..

Unter PHP ist die API mit Hilfe der (wie sollte es anders sein) php_w32api.dll erreichbar...

 
yesrus
25-01-2007, 12:51 
 
Unter PHP ist die API mit Hilfe der (wie sollte es anders sein) php_w32api.dll erreichbar


Ich wäre dir sehr dankbar wenn du ein Beispiel posten würdest.

Es geht darum, dass ich den Inhalt des CD-Rom's auflisten will.

Danke im voraus.

 
penizillin
25-01-2007, 12:56 
 
ist denn vorher der buchstabe des cd-rom-laufwerks bekannt?
dann siehe die beispiele weiter oben.

 
combie
25-01-2007, 13:19 
 
Ich wäre dir sehr dankbar wenn du ein Beispiel posten würdest.
Nöö.. habe ich nicht in der Schublade!!
Sauge dir irgendwo die win32api.hlp da steht drin, wie es geht!


Wenn du den Laufwerksbuchstaben kennst, dann reicht auch:

function all_files($dir)
{
$result=array();
foreach(glob($dir.'/*',GLOB_NOSORT) as $file)
{
if(is_file($file))$result[]=$file;
if(is_dir($file)) $result=array_merge($result,all_files($file));
}
return $result;
}

echo '<pre>';
print_r( all_files('d:'));
echo '</pre>';


*edit*
:( Sorry, hatte die falsche Funktion erwischt..:(
korrigiert!

 
yesrus
27-01-2007, 13:36 
 
Danke, danke, danke ....

Jetzt endlich geschaft!

Habe Code von Combi und Heinzelmännchen zusammen geführt:


function all_files($dir)
{
return (glob($dir.'/*'));
}
echo '<pre>';
for( $i = ord('A') ; $i <= ord('Z') ; $i++ ) {
if ( is_dir( chr($i) . ':' ) ) {
print_r( all_files(chr($i) . ':'));
}
}
echo '</pre>';


Die foreach Schleife gibt mir komischerweise eine Warnung aus (), deswegen hab die entfernt, aber jetzt ist das ok auch.

Das is genau das was ich brauche!!!!

Danke für Alle


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.