2016-10-25 4 views
-1

Ich arbeite an einem Projekt, in dem ich eine Agentur erstelle. Beim Erstellen der Agentur habe ich ein Dropdown-Menü, um das Laufwerk auszuwählen. In diesem Laufwerk wird ein Ordner mit dem Agenturnamen erstellt, in dem alle exportierten Daten gespeichert werden. Ich bin in der Lage, alle Laufwerke im Server durch Ausführen einiger Shell-Befehle zu erhalten. Ich versuche, den Ordner mit dem folgenden Code zu erstellen:PHP: Wie man ein Verzeichnis in den Serverlaufwerken erstellt

$agency = 'BookStore'; 
$documentLocation = $val['drive'] . '/agency/documents/document-' . $agency; 

if (!is_dir($documentLocation)) { 
    var_dump(mkdir($documentLocation, 0777, true)); 
} 

wo $ val [ ‚Laufwerk‘] das Laufwerk Weg ist. Aber es erstellt den Ordner in meinem Projekt und ich möchte den Ordner im angegebenen Laufwerk erstellen.

+1

Was ist der genaue Wert von '$ documentLocation' ...? – deceze

+2

Können Sie uns ein Beispiel für den erzeugten $ documentLocation geben? Wenn '$ val ['drive']' zum Beispiel etwas wie 'C' ist (wenn Sie unter Windows sind), dann ist der Pfad ungültig (fehlt ein Doppelpunkt 'C:') – moopet

+1

nicht vergessen: '777' ist böse. benutze es nie. Verwenden Sie die am wenigsten zulässige Konfiguration. –

Antwort

0

Das Problem ist die $val['drive']. Wenn Ihr Betriebssystem Windows ist, benötigen Sie noch einige zusätzliche Formatierungen wie das Hinzufügen von COLON: Forward-Schrägstriche wäre kein Problem in Windows mehr als in Unix.

<?php 

    $agency   = 'BookStore'; 
    $isWindows  = true; //<== A FUNCTION THAT CHECKS IF IT'S A WINDOWS OS 
    $location   = '/agency/documents/document-' . $agency; 
    //IF IT'S WINDOWS OS,WE JUST ADD A COLON (:) AFTER THE DRIVE NAME 
    $documentLocation = (isWindows)?$val['drive'] .":" . $location : $val['drive']. $location; 


    if (!is_dir($documentLocation)) { 
     var_dump(mkdir($documentLocation, 0777, true)); 
    } 
+0

Wenn es * nicht * Windows ist, würden Sie den Laufwerksbuchstaben überhaupt nicht brauchen ... – deceze

+0

@deceze Genau ... aber vielleicht zeigt das '$ val ['Laufwerk']' auf 'die Adresse des Mounted-Volume' an Linux oder OSX aber nicht mehr die ** C, D, E, F .... UND Z ** Laufwerke des Windows Betriebssystems ..... sowas wie ""/Volumes/Macintosh \ HD "' in Mac oder '/home/media/user/ExternalHDD' in Linunx – Poiz

+0

@ Poiz Ja, es ist ein Unix-Server. Die Laufwerke sind also ungefähr so:/dev/sdb1,/dev/sdb2 – Pranab

Verwandte Themen