mkdir

Door Jan Koehoorn, 23 jaar geleden, 9.139x bekeken

PHP kent een functie om mappen te maken: mkdir ().
Laten we zeggen dat je een uploadfunctie programmeert en dat
je tijdens het uploaden ook nieuwe mappen wilt kunnen maken.

Wil je bestanden naar zo'n nieuwe map kunnen uploaden, dan
moeten de rechten op 777 staan (misschien werken andere
waarden ook wel). Het lijkt er op dat dat via mkdir () kan. Je
kunt als tweede argument de rechten meegeven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
  // map aanmaken
  mkdir ('nieuwe_map', 0777);
?>


Mij is het echter op die manier nog nooit gelukt!

Laatst kwam ik een handige functie tegen om mappen te maken
via FTP. Je kunt dan de rechten wél op 777 zetten, zodat je daarna
bestanden naar die map kunt uploaden.

Gesponsorde koppelingen

PHP script bestanden

  1. mkdir

 

Er zijn 30 reacties op 'Mkdir'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Eris -
Eris -
23 jaar geleden
 
0 +1 -0 -1
exit in een functie is eigelijk niet echt slim. Ja kan beter alleen een return false afhandelen en dan verder gaan...
Jan Koehoorn
Jan Koehoorn
23 jaar geleden
 
0 +1 -0 -1
Waarom is dat zo, Eris?
- SanThe -
- SanThe -
23 jaar geleden
 
0 +1 -0 -1
Eris bedoelt waarschijnlijk dat je met exit() het hele script afkapt. Terwijl als je de false/true afhandelt je hier een melding van kunt geven en daarna de eventuele rest van het script nog gewoon kan afhandelen.
Jan Koehoorn
Jan Koehoorn
23 jaar geleden
 
0 +1 -0 -1
Ah, zo! Goed idee.

Ik zal de code aanpassen.
- SanThe -
- SanThe -
23 jaar geleden
 
0 +1 -0 -1
Ik zou de echo's ook uit de functie halen en return $dir veranderen in return true.
Dan kan de scripter zelf bepalen wat er verder moet gebeuren d.m.v.:
if(my_ftp_mkdir ('www/images/upload/', 'nieuwe_map')) {
echo "Okee..."; enz... b.v. alles gegevens in de database zetten.
} else {
echo "Mijn eigen foutmelding"; enz.....
}
Rest van het script.

Mooie functie trouwens.

Edit: Ik heb het omgedraaid
Jan Koehoorn
Jan Koehoorn
23 jaar geleden
 
0 +1 -0 -1
@ SanThe:

Oke, heb ik gedaan, maar dan moet jouw voorbeeld andersom! ;-)
- SanThe -
- SanThe -
23 jaar geleden
 
0 +1 -0 -1
@Jan Koehoorn: Je hebt gelijk, ik heb het omgedraaid.
Legolas
Legolas
23 jaar geleden
 
0 +1 -0 -1
zo blijft de connectie eeuwig open, daarbij een return false kapt de functie af dus dan is een else al zinloos. Ik zou gaan voor dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

function my_ftp_mkdir ($path, $dir) {
    $server = 'ftp.jouwserver.nl'; // het adres van je ftp server
    $connection = ftp_connect ($server); // connect naar de ftp server
    
    // inloggen op de ftp server

    $user = "ftp_user";
    $pass = "ftp_pass";
    $result = ftp_login ($connection, $user, $pass);
    
    if ((!$connection) || (!$result)) {
        return false;
    }

    // ga naar de dir die als argument aan de functie is meegegeven
    @ftp_chdir ($connection, $path);

    // nu de map maken en de rechten goed zetten
    if (!@ftp_mkdir($connection, $dir)) {
        return false;    
    }


    $chmod_cmd = "CHMOD 0777 " . $dir;
    $chmod = ftp_site($connection, $chmod_cmd);

    ftp_close($connection); // ftp verbinding verbreken

    return true;
}


?>
- SanThe -
- SanThe -
23 jaar geleden
 
0 +1 -0 -1
@Legolas: Als je een connectie hebt en je dir maken mislukt blijft bij jou ook de connectie bestaan door dat je dan return geeft. Om de connectie dan alsnog te verbreken zal je dit moeten doen.

// nu de map maken en de rechten goed zetten
if (!@ftp_mkdir($connection, $dir)) {
ftp_close($connection); // ftp verbinding verbreken
return false;
}
Legolas
Legolas
23 jaar geleden
 
0 +1 -0 -1
zo beter? :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php

function my_ftp_mkdir ($path, $dir) {
    $server = "ftp.server.com";

    // connect naar de ftp server
    $connection = ftp_connect ($server);
    
    // inloggen op de ftp server
    $user = "ftp_user";
    $pass = "ftp_pass";
    $result = ftp_login ($connection, $user, $pass);
    
    if ((!$connection) || (!$result)) {
        return false;
    }

    // ga naar de dir die als argument aan de functie is meegegeven
    if (!@ftp_chdir ($connection, $path)) {
        ftp_close($connection); // ftp verbinding verbreken
        return false;
    }


    // nu de map maken en de rechten goed zetten
    if (!@ftp_mkdir($connection, $dir)) {
        ftp_close($connection); // ftp verbinding verbreken
        return false;    
    }


    $chmod_cmd = "CHMOD 0777 " . $dir;
    $chmod = ftp_site($connection, $chmod_cmd);

    ftp_close($connection); // ftp verbinding verbreken

    return true;
}


?>
- SanThe -
- SanThe -
23 jaar geleden
 
0 +1 -0 -1
@Legolas: Perfect.
Jan Koehoorn
Jan Koehoorn
23 jaar geleden
 
0 +1 -0 -1
Ik vind hem zo ook het beste. Ik ga hem plakken :-)
Lissy Pixel
Lissy Pixel
23 jaar geleden
 
0 +1 -0 -1
Prachtige functie en dan met name hoe deze tot stand is gekomen.
Veel geleerd weer gezien de heldere uitleg erbij en heb deze functie dan ook bewaard in m'n eigen collectie :-)

Bedankt!!
Johan
Johan
23 jaar geleden
 
0 +1 -0 -1
Netjes man..!! Ziet er goed uit..:D
Robbert
Robbert
22 jaar geleden
 
0 +1 -0 -1
Vet script komt handig van pas, is het ook mogelijk om een bestand op de server te zetten? met een inhoud zo iets van Index.php in die map en dan een standaard vermelding in index.php van BEZET of zo Lijkt me wel leuk om te weten
TreX
TreX
21 jaar geleden
 
0 +1 -0 -1
ik snap het niet kan iemand mij het uitleggen want ik zoek zo een script maar kwee nie hoe hem te gebruken ik wil dus een form waar je die kan maken want ik hbe een clan csm systeem en ik wil die hosten voor mense dus ik wil een script waarme je dus mappen kan maken + db + dat er in die mappen mijn script staat weet iemand hoe ik da doe grts TreX
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
Zou je dit ook bij een inlogsysteem kunnen toepassen?
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
@ enes: hoe bedoel je precies?
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
Nou dat als je een inlogsteem heb met leden en dat je tijdens de registratie ook een deze script kunt aanpassen. Zodat de leden een map aan maakt voor zich zelf
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Dat kan inderdaad met deze functie, maar nodig is het niet; als je per lid alle gegevens in je database bijhoudt is het eigenlijk al genoeg en is er geen noodzaak om per lid een map aan te maken.
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
Kunt u hier meer over vertellen ? a.u.b

Korte begrijpings uileg:)
Ik als lid wil inloggen op een site. En als ik logt maak je een map aan met deze script, als ik aangeeft ?toch . kan je dan ook gelijk aangeven dat de naam van de map. De nam van de lid is. En dat met zijn inlog gegevens van de/het lid kan inloggen?

Bedankt voor u aandacht,
groeten Yazir
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Ik heb ook een tutorial over inlogscripts. Daar zou je even kunnen kijken. En nogmaals: ik zie de noodzaak niet om voor iedereen die inlogt een aparte map aan te maken.

Profielgegevens sla je gewoon op in je database. Bestanden uploaden kun je ook in je database bijhouden. Daar heb je geen mappen voor nodig.

groeten, Jan
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
Maar dan maak je ook geen map link aan voor de gebruiker
bv www.domein.nl/gebruiker

ftp.domein.nl/gebruiker

gebruiker
wachtwoord
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Dat hoeft ook niet. Een gebruiker krijgt gewoon alleen te zien wat hij mag zien. Als hij bijvoorbeeld een upload doet, sla je de bestandsnaam en zijn gebruikers_id op in een tabel.

Zo kun je een gebruiker alleen zijn/haar eigen bestanden laten zien omdat je bij het inloggen het user_id ophaalt.
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
U snapt mij niet zo denk ik.:(
of ik begrijp het niet :)

In dit ledensysteem www.kacakhaci.com .Tijdens het registreren maakt het een dir aan. Zou elk lid ook een ftp account kunnen krijgen?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<? include 'config.php'; ?>
<? include("opties.php"); ?>
<?php require_once('Connections/db_conn.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{

  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case
"text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case
"long":
    case
"int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case
"double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case
"date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case
"defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }

  return $theValue;
}


$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'];
if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $editFormAction .= "?" . $HTTP_SERVER_VARS['QUERY_STRING'];
}


if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")) {

@
mkdir("leden/$_GET[un]",0777);
@
mkdir("ledenfotos/$_GET[un]",0755);
@
copy("forward.php","leden/$_GET[un]/index.php");

  $insertSQL = sprintf("INSERT INTO leden (gebruikersnaam, wachtwoord, echte_naam, geboorte_datum, geslacht, email, actief, datum) VALUES (%s, %s, %s, %s, %s, %s, 1, %s)",
                       GetSQLValueString($HTTP_POST_VARS['gebruikersnaam'], "text"),
                       GetSQLValueString($HTTP_POST_VARS['wachtwoord'], "text"),
                       GetSQLValueString($HTTP_POST_VARS['echte_naam'], "text"),
                       GetSQLValueString("$_POST[dag]-$_POST[maand]-$_POST[jaar]", "text"),
                       GetSQLValueString($HTTP_POST_VARS['geslacht'], "text"),
                       GetSQLValueString($HTTP_POST_VARS['email'], "text"),
                       GetSQLValueString(time(), "text"));

  mysql_select_db($database_db_conn, $db_conn);
  $Result1 = mysql_query($insertSQL, $db_conn) or die(mysql_error());

  $insertGoTo = "bedankt.php?un=$_POST[gebruikersnaam]";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }

  header(sprintf("Location: %s", $insertGoTo));
}


mysql_select_db($database_db_conn, $db_conn);
$query_aanmelden = "SELECT * FROM paginas WHERE titel = 'aanmelden'";
$aanmelden = mysql_query($query_aanmelden, $db_conn) or die(mysql_error());
$row_aanmelden = mysql_fetch_assoc($aanmelden);
$totalRows_aanmelden = mysql_num_rows($aanmelden);
?>

<html><!-- InstanceBegin template="/Templates/standaard.dwt.php" codeOutsideHTMLIsLocked="false" -->
<head>
<title>TVW Profielen script versie <? echo "$versie"; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="themes/<? echo "$theme"; ?>/stijl.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<? include("themes/$theme/top.php"); ?>
<table width="100%" height="100%"  border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="148" height="100%" valign="top"><? include("themes/$theme/menu.php"); ?></td>
    <td align="center" valign="top"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="10">&nbsp;</td>
        <td width="625">&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td align="left" valign="top"><!-- InstanceBeginEditable name="inhoud" -->
      <p><span class="tekst"><?php echo $row_aanmelden['tekst']; ?> </span></p>
      <form action="<?php echo $editFormAction; ?>" method="post" name="form1" onSubmit="YY_checkform('form1','geslacht[0]','#q','2','Geslacht kiezen aub','gebruikersnaam','#q','0','Gebruikersnaam invoeren','echte_naam','#q','0','Echte naam invoeren','geboorte_datum','#^\([0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9]{4}\)$#1#2#3','3','Geboorte datum onjuist \(DD/MM/JJJJ\)','email','#S','2','Graag een juist e-mail adres invoeren','wachtwoord','#q','0','Graag een wachtwoord invoeren');return document.MM_returnValue">
        <table align="center">
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>Gebruikersnaam:</td>
            <td><input name="gebruikersnaam" type="hidden" class="formulier" value="<? echo "$_GET[un]"; ?>" size="32"><? echo "$_GET[un]"; ?></td>
          </tr>
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>Wachtwoord:</td>
            <td><input name="wachtwoord" type="password" class="formulier" value="" size="32"></td>
          </tr>
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>Echte naam:</td>
            <td><input name="echte_naam" type="text" class="formulier" value="" size="32"></td>
          </tr>
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>Geboorte datum:<br> <span class="tekstuitleg">(dag-maand-jaar)
              </span></td>
            <td><input name="dag" type="text" class="formulier" id="dag" size="5">
              <input name="maand" type="text" class="formulier" id="maand" size="5">
              <input name="jaar" type="text" class="formulier" id="jaar" size="5">
              <br> <span class="tekstuitleg">(01-12-2002) </span></td>
          </tr>
          <tr valign="baseline" class="tekst">
            <td align="right" valign="top" nowrap>Geslacht:</td>
            <td valign="baseline"> <input type="radio" name="geslacht" value="Man" >
              Man
              <input type="radio" name="geslacht" value="Vrouw" >
              Vrouw</tr>
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>Email:</td>
            <td><input name="email" type="text" class="formulier" value="" size="32"></td>
          </tr>
          <tr valign="baseline" class="tekst">
            <td align="right" nowrap>&nbsp;</td>
            <td><input type="submit" class="formulier" value="Aanmelden"></td>
          </tr>
        </table>
        <p>
          <input type="hidden" name="MM_insert" value="form1">
        </p>
      </form>
      <!-- InstanceEndEditable --></td>
        <td>&nbsp;</td>
      </tr>
    </table></td>
  </tr>
</table>
</body>
<!-- InstanceEnd --></html>
<?php
mysql_free_result($aanmelden);
?>
Jan Koehoorn
Jan Koehoorn
21 jaar geleden
 
0 +1 -0 -1
Ik heb geen ervaringen met het aanmaken van FTP accounts, maar misschien kunnen andere forumleden je daarbij helpen. Als bij elke FTP account een eigen map hoort, kun je zeker mijn functie daarvoor gebruiken.

Overigens is je voorbeeldscript in een stijl geschreven die op zijn zachtst gezegd "ouderwets" te noemen is ;-)
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
mauhauhahahuua maar ik kan het gebruiken :P
Ik hoop dat de andere leden me ermee kunnen helpen :$
Winston Smith
Winston Smith
21 jaar geleden
 
0 +1 -0 -1
Maar vast niet meer zo lang: PHP4 wordt niet meer ondersteund aan het einde van dit jaar, en PHP6 zal waarschijnlijk HTTP_*_VARS en get_magic_quotes_gpc niet meer ondersteunen.
Enes
enes
21 jaar geleden
 
0 +1 -0 -1
hoe zou ik het kunnen verdanderen?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Hylke
Hylke
21 jaar geleden
 
0 +1 -0 -1
=) De reden dat het nooit gelukt is met mkdir(); is waarschijnlijk omdat je je umask niet veranderd hebt van te voren. Om een dir aan te maken met chmod 0777 moet je gewoon het volgende doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  umask(0000);
  mkdir("test", 0777);
  echo decoct(fileperms("test"));
?>

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. mkdir

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.