Eine Anzahl von (Pseudo)Zufallszahlen generieren

24. März 2010, 11:10

Mit folgender Funktion lässt sich eine gewünschte Anzahl von (Pseudo)Zufallszahlen generieren.
Ich benutze es immer, um mir die Zahlen auszugeben, die ich dann im Lotto spiele.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function genNumbers($_min = 1, $_max = 49, $_number = 6) {
  $min    = $_min;
  $max    = $_max;
  $number = $_number;
  $numbers= array();

  $array = range($min, $max);
  srand ((double)microtime()*1000000);
 
  for($x = 0; $x < $number; $x++) {
    $i = rand(1, count($array)) - 1;
    $numbers[] = $array[$i];
    array_splice($array, $i, 1);
  }
  sort($numbers);
 
  return implode(' ', $numbers);
}

Suchen, Ersetzen und reguläre Ausdrücke, Teil 2

28. Februar 2009, 16:21

Diese Funktion führt eine Suchen&Ersetzen-Aktion auf einem Text aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function searchReplace($search, $replace, $txt, &$hits = array()) {
  $matches   = array();
  $sItems    = array();
  $rItems    = array();
  $mCounter  = 0;
  $rCounter  = substr_count($replace, '%s');
  $replace   = str_replace('%s', '%1$s', $replace);
 
  preg_match_all($search, $txt, $matches, PREG_OFFSET_CAPTURE);
  $matches   = $matches[0];
  $mCounter  = count($matches);
 
  if($mCounter > 0) {
    for($i = 0; $i < $mCounter; $i++) {
      $sItems[$i] = substr($txt, $matches[$i][1], strlen($matches[$i][0]));
      $hits[$i]   = $sItems[$i];
      $rItems[$i] = sprintf($replace, $sItems[$i]);
    }
    $txt = str_replace($sItems, $rItems, $txt);
  }
 
  return $txt;
}

Als erster Parameter wird ein regulärer Audruck erwartet.
Der zweite Parameter ist eine Zeichenkette, mit der die gefundenen Werte ersetzt werden sollen. Enthält die Zeichenkette die Formatierungsanweisung ‘%s’ (Beschreibung siehe sprintf), so wird jedes Vorkommen dieser Anweisung durch den gefundenen Wert ersetzt.
Als dritter Parameter erwartet die Funktion den Text, auf dem die Aktion ausgeführt werden soll.
Der vierte Parameter ist optional. Dabei kann ein Array per Referenz übergeben werden, das nach der Ausführung der Aktion die gefundenen Werte enthält.

Auswahlliste generieren

22. Januar 2008, 23:13

PHP-Funktion um eine Select-Auswahlliste anhand eines Arrays zu generieren.

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
define(NL, "\n");

function getSelect($name, $values, $selected = array(), $emptyField = '', $size = 1, $multiple = false, $eventHandler = '', $cssClass = '') {
  $select = '';
 
  $selected_attr = ' selected="selected"';
  $multiple_attr = ' multiple="multiple"';
 
  $select .= '<select name="' . $name . '" id="' . $name . '" size="' . $size . '"';
  if($multiple)
    $select .= $multiple_attr;
  if(!empty($eventHandler))
    $select .= $eventHandler;
  if(!empty($cssClass))
    $select .= ' class="' . $cssClass . '"';
  $select .= '>' . NL;
 
  if(!empty($emptyField))
    $select .= '<option>' . $emptyField . '</option>' . NL;
   
  for($i = 0; $i < count($values); $i++) {
    $select .= '<option value="' . $values[$i][0] . '"' . (in_array($values[$i][0], $selected) ? $selected_attr : '') . '>';
    $select .= $values[$i][1] . '</option>' . NL;
  }
 
  $select .= '</select>' . NL;
 
  return $select;
}

// example
$data = array();
$data[] = array(1, 'Mazda');
$data[] = array(2, 'Audi');
$data[] = array(3, 'Mercedes');
$data[] = array(4, 'Dacia');

$selected = array(2,4);
echo getSelect('cars', $data, $selected, '', 3, true, '', 'my_cars');
$selected = array(2);
echo getSelect('cars', $data, $selected, '', 1, false, '', 'my_cars');

Blättern-Funktion

9. Januar 2008, 10:53

Diese Funktion erzeugt ein Pagemenu.
Die Konstante OFFSET speichert die Anzahl der Datensätze pro Seite.

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
define('OFFSET', 5);

function leafThrough($total, $start) {
  $pagenav  = '';
  $querystr = '';

  if(!empty($_SERVER['QUERY_STRING'])) {
    $tmp = explode('&', $_SERVER['QUERY_STRING']);
    foreach($tmp as $key => $val) {
      if(substr($val, 0, 6) == 'start=') {
        unset($tmp[$key]);
        break;
      }
    }
    $querystr = implode('&', $tmp) . '&';
  }

  if($total > OFFSET) {
    $pages = intval($total / OFFSET);
    if($total % OFFSET)
      $pages++;
     
    for($i = 1; $i <= $pages; $i++) {
      $fwd  = ($i-1) * OFFSET;
      $link = '<a href="' . $_SERVER['PHP_SELF'] . '?' . $querystr . 'start=' . $fwd . '"%s>' . str_pad($i, 2, '0', STR_PAD_LEFT) . '</a> ';
      $pagenav .= ($start == $fwd ? sprintf($link, ' class="active"') : sprintf($link, ''));
    }
  }

  return $pagenav;
}

// example
$start = (isset($_GET['start']) ? intval($_GET['start']) : 0);
echo 'Records: ' . ($start+1) . ' - ' . ($start+OFFSET) . '<br /><br />';
echo leafThrough(56, $start);

Ordner schützen mit .htaccess

13. Dezember 2007, 14:46

Erzeugt eine .htaccess und eine .htpasswd in dem Ordner, in dem das Script ausgeführt wird.
PHP-Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function createHtpasswd($name, $user, $passwd) {
  $nl = "\n";

  $path = explode('/', $_SERVER['SCRIPT_FILENAME']);
  array_pop($path);
  $path = implode('/', $path);

  $handle = fopen('.htaccess', 'w');
  fputs($handle, 'AuthType Basic' . $nl);
  fputs($handle, 'AuthName "' . $name . '"' . $nl);
  fputs($handle, 'AuthUserFile ' . $path . '/.htpasswd' . $nl);
  fputs($handle, 'require user ' . $user . $nl);
  fclose($handle);
 
  $handle = fopen('.htpasswd', 'w');
  fputs($handle, $user . ':' . crypt($passwd, 21));
  fclose($handle);
}

if(isset($_POST['generate']))
  createHtpasswd($_POST['name'], $_POST['user'], $_POST['passwd']);

HTML-Formular:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table cellpadding="3" cellspacing="0">
  <tr>
    <td>AuthName:</td>
    <td><input type="text" name="name" value="" size="40" /></td>
  </tr>
  <tr>
    <td>User:</td>
    <td><input type="text" name="user" value="" size="40" /></td>
  </tr>
  <tr>
    <td>Passwd:</td>
    <td><input type="text" name="passwd" value="" size="40" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="generate" value="Generate" /></td>
  </tr>
</table>
</form>

E-Mail-Versand mit zusätzlichen Headers

6. Oktober 2007, 12:33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function sendMail($from_name, $from_mail, $to, $subject, $body, $type = 'plain', $charset = 'uft-8', $cc = '', $bcc = '') {
  $headers = 'From: ' . $from_name . ' <' . $from_mail . ">" . NL;
  $headers .= (!empty($cc) ? 'Cc: ' . $cc . NL : '');
  $headers .= (!empty($bcc) ? 'Bcc: ' . $bcc . NL : '');
  $headers .= 'Reply-To: ' . $from_mail . NL;
  if($type == 'html') {
    $headers .= 'MIME-Version: 1.0' . NL;
  }
  $headers .= 'Content-Type: text/' . $type . '; charset="' . $charset . '"' . NL;
  $headers .= 'X-Mailer: PHP/' . phpversion();
 
  $send = @mail($to, $subject, $body, $headers);

  return $send;
}

Tabelle aus einer Liste generieren

8. September 2007, 16:05

Da ich schon so oft vor der Aufgabe stand, anhand einer Liste eine Tabelle mit x Spalten zu erzeugen, und genauso oft die Funktion neu schrieb, da ich auf der Suche nach einer bereits geschriebenen Funktion nicht fündig wurde, wird sie nun hier festgehalten, frei nach der Prinzip “Don’t repeat yourself!”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
define('NL', "\n");

function createTableFromList($list, $cols) {
  $table_b = '<table cellpadding="0" cellspacing="0" border="1">' . NL;
  $table_c = '';
  $table_e = '</table>' . NL;
 
  $cells = count($list);
  $empty_cells = $cols - $cells%$cols;
 
  if($cells == 0) return 'Liste ist leer.';
 
  for($i = 0; $i < $cells; $i++) {
    if($i == 0 || $i%$cols == 0) $table_c .= '<tr>' . NL;
    $table_c .= '<td>' . $list[$i] . '</td>' . NL;
    if($i%$cols == $cols - 1) $table_c .= '</tr>' . NL;
  }
 
  if($empty_cells > 0 && $empty_cells < $cols)
    $table_c .= str_repeat('<td>&nbsp;</td>' . NL, $empty_cells) . '</tr>' . NL;
 
  return $table_b . $table_c . $table_e;
}

Dateien in einem Ordner auflisten

30. August 2007, 12:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getFiles($dir) {
  $file = '';
  $files = array();

  if(is_dir($dir)) {
    if($pointer = opendir($dir)) {
      while(($file = readdir($pointer)) != false) {
        if($file == '.' || $file == '..') continue;
        $files[] = $file;
      }
      closedir($pointer);
    }
  }
  return $files;
}

Passwort generieren

1. April 2006, 17:35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function passwd($len = 8) {
  $passwd = '';
  $char = array('*', '+', ',', '-', '.', '/',
                '0', '1', '2', '3', '4', '5',
                '6', '7', '8', '9', 'A', 'B',
                'C', 'D', 'E', 'F', 'G', 'H',
                'I', 'J', 'K', 'L', 'M', 'N',
                'O', 'P', 'Q', 'R', 'S', 'T',
                'U', 'V', 'W', 'X', 'Y', 'Z',
                'a', 'b', 'c', 'd', 'e', 'f',
                'g', 'h', 'i', 'j', 'k', 'l',
                'm', 'n', 'o', 'p', 'q', 'r',
                's', 't', 'u', 'v', 'w', 'x',
                'y', 'z');
 
  for($i = 0; $i < $len; $i++) {
    $passwd .= $char[rand(0, count($char) - 1)];
  }
 
  return $passwd;
}