Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

GNU Getopt For PHP


Po mom mišljenju, komandne linije interfejsa za PHP, na žalost, nema. Da bi se zadovoljila očekivanja korisnika i programera najbolje je da pratite utvrđene standarde. Kad god je to moguće, programer treba da prati POSIKS smernice. Ipak, u mnogim slučajevima GNU proširenja su preferirana i očekivana. Da bi ispunili ta očekivanja, ja sam portovao GNU Getopt u php.

Ovaj paket je baziran na 1998 Java port-u Getopt-a od Aaron M. Rena. Kad god je moguće, pokušao sam da ostanem veran duhu njegovog originalnog porta.To je relativno lak zadatak zbog sličnosti između Jave i PHP5. Trenutno, jedina stvar koja nedostaje je višejezička podrška. Za tu funkciju,nadam se da ću dobiti pomoć od međunarodne zajednice.

GNU Getopt paket se sastoji od dve klase datoteka:

gnu/getopt/Getopt.php
gnu/getopt/Longopt.php

Da biste instalirali paket, uradite ‘copt’ gnu direktorijuma najviseg nivoa u vašu uključenu putanju.Da biste pronašli direktorijume uključene u toj putanji, uradite sledeće u komandnoj liniji:

php -r "echo ini_get('include_path');"

U mom slučaju, rezultat je bio ‘.:/usr/share/pear:/usr/share/php’. Da bi instalirao paket, ja sam kopirao ‘gnu’ into /usr/share/php.

Paket sadrži demo program pod nazivom ‘optdemo'. Evo koda iz tog programa:

#!/usr/bin/php
<?php
  require_once("gnu/getopt/Getopt.php");
  require_once("gnu/getopt/Longopt.php");

  $longopt = array();
  $longopt[0] = new LongOpt("help", NO_ARGUMENT, null, 'h');
  $longopt[1] = new LongOpt("about", REQUIRED_ARGUMENT, null, 'a');
  $getopt = new Getopt($argv, "a:bc:d:hW;", $longopt);
  $c;
  $arg;
  while (($c = $getopt->getopts()) != -1) {
    switch($c) {
    case 'a':
    case 'd':
      $arg = $getopt->getOptarg();
      print(
        "You picked $c with an argument of ".(($arg != null) ?
        $arg : "null")."\n"
      );
      break;
    case 'b':
    case 'c':
      $arg = $getopt->getOptarg();
      print(
        "You picked $c with an argument of ".(($arg != null)
        ? $arg : "null")."\n"
      );
      break;
     case 'h':
       print "Usage: test [options] \n";
       break;
     case '?':
       break; // getopt() already printed an error
     default:
       print("getopt() returned $c\n");
   }
 }
?>

Kao što možete da vidite, implementacija je prilično direktna.Niz Longopt objekata je opcioni. Svaki Longopt treba da sadrži odgovarajući Shortopt u Getopt klasi. Shortopt-ovi su konstruisani upravo onako kako ste očekivali. Uzmite u obzir opciju String “a:bc:d:hW;” Svaka opcija ispred koje je kolona očekuje argument.U Ovom slučaju,‘ a ’ ' c 'i' d 'zahtevaju argumente, dok' b 'i' h 'ne.Getopts metoda je iterator. Možete koristiti loop petlju kroz opcije i rukovati njima u petlji sličnoj loop-u kao u prikazanom u primeru.

Softver je dostupan ovde: GNU Getopt For PHP

Srećno hakovanje



Published (Last edited): 14-10-2012 , source: http://www.joedog.org/gnu-getopt-php/