SlideShare una empresa de Scribd logo
Manual de PHP




Stig Sæther Bakken
Alexander Aulbach
  Egon Schmid
  Jim Winstead
Lars Torben Wilson
 Rasmus Lerdorf
 Andrei Zmievski
    Jouni Ahto
Editado por
                   Rafael Martínez (Coordinador)

                            Víctor Fernández

                            Leonardo Boshell

                                  08-07-2002
       Copyright © 1997, 1998, 1999, 2000, 2001, 2002 por por el Grupo de
                            documentación de PHP
Copyright
Este manual es © Copyright 1997, 1998, 1999, 2000, 2001, 2002 por el Grupo de
documentación de PHP. Los miembros de este grupo se encuentran listados en la
primera página de este manual.
Este manual puede ser redistribuido bajo los términos de la "GNU General Public
License" publicada por la "Free Software Foundation"; tanto bajo la versión 2 de
esta licencia o bajo versiones posteriores.
La sección ’Extendiendo PHP 4.0’ de este manual es copyright © 2000 por Zend
Technologies, Ltd. Este material puede ser distribuido solamente bajo los
terminos y condiciones de la Open Publication License, v1.0 ó posterior (la última
versión está disponible en http://www.opencontent.org/openpub/).
Manual de PHP
por Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf,
Andrei Zmievski, y Jouni Ahto

por

Editado por Rafael Martínez (Coordinador)

Editado por Víctor Fernández

Editado por Leonardo Boshell


Publicado 08-07-2002
Copyright © 1997, 1998, 1999, 2000, 2001, 2002 por por el Grupo de documentación de PHP

Copyright

Este manual es © Copyright 1997, 1998, 1999, 2000, 2001, 2002 por el Grupo de documentación de PHP. Los
miembros de este grupo se encuentran listados en la primera página de este manual.
Este manual puede ser redistribuido bajo los términos de la "GNU General Public License" publicada por la "Free
Software Foundation"; tanto bajo la versión 2 de esta licencia o bajo versiones posteriores.
La sección ’Extendiendo PHP 4.0’ de este manual es copyright © 2000 por Zend Technologies, Ltd. Este material
puede ser distribuido solamente bajo los terminos y condiciones de la Open Publication License, v1.0 ó posterior (la
última versión está disponible en http://www.opencontent.org/openpub/).
Tabla de contenidos
    Prefacio ........................................................................................................................................................i
    I. Conceptos Básicos ..................................................................................................................................1
             1. Introducción ...................................................................................................................................1
                    Qué es PHP? .............................................................................................................................2
                    Qué se puede hacer con PHP? ..................................................................................................2
             2. Instalación ......................................................................................................................................5
                    Bajándose la última versión......................................................................................................6
                    Instalación en sistemas UNIX ..................................................................................................6
                          Instrucciones Rápidas de Instalación (Versión Módulo de Apache) ..............................6
                          Configuración..................................................................................................................7
                          Módulo del Apache.........................................................................................................7
                          Módulo fhttpd .................................................................................................................7
                          CGI version.....................................................................................................................7
                          Opciones de soporte para Base de Datos ........................................................................8
                                   Adabas D ...............................................................................................................8
                                   dBase .....................................................................................................................8
                                   filePro ....................................................................................................................8
                                   mSQL ....................................................................................................................8
                                   MySQL..................................................................................................................9
                                   iODBC...................................................................................................................9
                                   OpenLink ODBC...................................................................................................9
                                   Oracle ....................................................................................................................9
                                   PostgreSQL ...........................................................................................................9
                                   Solid ....................................................................................................................10
                                   Sybase..................................................................................................................10
                                   Sybase-CT ...........................................................................................................10
                                   Velocis .................................................................................................................10
                                   Una librería a medida de ODBC .........................................................................11
                                   ODBC Unificado .................................................................................................11
                                   LDAP...................................................................................................................11
                          Otras opciones de configuración...................................................................................11
                                   --with-mcrypt=DIR.............................................................................................12
                                   --enable-sysvsem .................................................................................................12
                                   --enable-sysvshm.................................................................................................12
                                   --with-xml............................................................................................................12
                                   --enable-maintainer-mode ...................................................................................12
                                   --with-system-regex.............................................................................................12
                                   --with-config-file-path .........................................................................................13
                                   --with-exec-dir.....................................................................................................13
                                   --enable-debug.....................................................................................................13
                                   --enable-safe-mode..............................................................................................13
                                   --enable-track-vars...............................................................................................13
                                   --enable-magic-quotes .........................................................................................14
                                   --enable-debugger................................................................................................14
                                   --enable-discard-path...........................................................................................14




                                                                                                                                                                   iv
--enable-bcmath...................................................................................................14
                     --enable-force-cgi-redirect ..................................................................................14
                     --disable-short-tags..............................................................................................15
                     --enable-url-includes ...........................................................................................15
                     --disable-syntax-hl...............................................................................................15
                     CPPFLAGS y LDFLAGS ...................................................................................15
            Construyendo ................................................................................................................16
            Probando .......................................................................................................................16
            Comprobando la velocidad ...........................................................................................16
      Instalación en sistemas Windows 95/98/NT...........................................................................16
            Pasos Generales de Instalación .....................................................................................16
            Windows 95/98/NT y PWS/IIS 3..................................................................................17
            Windows NT e IIS 4 .....................................................................................................18
            Windows 9x/NT y Apache 1.3.x...................................................................................19
            Omni HTTPd 2.0b1 para Windows ..............................................................................19
            Módulos del PHP ..........................................................................................................19
      ¿Problemas?............................................................................................................................20
            Lea las PMF (FAQ) .......................................................................................................20
            Informes de error...........................................................................................................20
            Otros problemas ............................................................................................................20
3. Configuración...............................................................................................................................22
      El archivo de configuración ....................................................................................................23
            Directivas Generales de Configuración.........................................................................23
            Directivas de Configuración de Correo.........................................................................27
            Directivas de Configuración de Modo Seguro ..............................................................28
            Directivas de Configuración del Debugger ...................................................................28
            Directivas de Carga de Extensiones ..............................................................................28
            Directivas de Configuración de MySQL.......................................................................29
            Directivas de Configuración de mSQL .........................................................................29
            Directivas de Configuración de Postgres ......................................................................29
            SESAM Configuration Directives.................................................................................30
            Directivas de Configuración de Sybase ........................................................................30
            Directivas de Configuración de Sybase-CT ..................................................................31
            Directivas de Configuración de Informix......................................................................32
            Directivas de Configuración de Matemática BC...........................................................33
            Directivas de Configuración de Capacidades de los Navegadores................................33
            Directivas Unificadas de Configuración de ODBC.......................................................33
4. Seguridad......................................................................................................................................35
      Binarios CGI...........................................................................................................................36
            Posibles ataques ............................................................................................................36
            Caso 1: solamente se sirven ficheros publicos ..............................................................37
            Caso 2: usando --enable-force-cgi-redirect...................................................................37
            Caso 3: Usando doc_root or user_dir............................................................................37
            Caso 4: Analizador PHP fuera del arbol web. ..............................................................38
      Modulo Apache ......................................................................................................................38




                                                                                                                                                  v
II. Referencia del Lenguaje.....................................................................................................................40
        5. Síntaxis básica..............................................................................................................................40
              Saliendo de HTML .................................................................................................................41
              Separación de instrucciones ...................................................................................................42
              Comentarios............................................................................................................................43
        6. Types ............................................................................................................................................44
              Enteros....................................................................................................................................45
              Números en punto flotante......................................................................................................45
              Cadenas...................................................................................................................................45
                      Conversión de cadenas..................................................................................................47
              Arrays .....................................................................................................................................48
                      Arrays unidimensionales...............................................................................................48
                      Arrays Multidimensionales...........................................................................................49
              Objetos....................................................................................................................................50
                      Inicialización de Objetos...............................................................................................51
              Type juggling..........................................................................................................................51
                      Forzado de tipos............................................................................................................52
        7. Variables.......................................................................................................................................54
              Conceptos Básicos..................................................................................................................55
              Variables predefinidas.............................................................................................................56
                      Variables de Apache......................................................................................................56
                      Variables de entorno......................................................................................................58
                      Variables de PHP...........................................................................................................58
              Ambito de las variables ..........................................................................................................59
              Variables variables..................................................................................................................61
              Variables externas a PHP........................................................................................................62
                      Formularios HTML (GET y POST) .............................................................................62
                                IMAGE SUBMIT variable names.......................................................................63
                      Cookies HTTP ..............................................................................................................63
                      Variables de entorno......................................................................................................64
                      Puntos en los nombres de variables de entrada.............................................................64
                      Determinando los tipos de variables .............................................................................65
        8. Constantes ....................................................................................................................................66
              Sintaxis ...................................................................................................................................67
              Constantes predefinidas ..........................................................................................................68
        9. Expresiones ..................................................................................................................................69
        10. Operadores .................................................................................................................................73
              Operadores Aritméticos..........................................................................................................74
              Operadores de Asignación......................................................................................................74
              Operadores Bit a bit................................................................................................................74
              Operadores de Comparación ..................................................................................................75
              Operador de ejecución............................................................................................................76
              Operadores de Incremento/decremento ..................................................................................76
              Operadores Lógicos................................................................................................................77
              Precedencia de Operadores.....................................................................................................77
              Operadores de Cadenas ..........................................................................................................78
        11. Estructuras de Control................................................................................................................80
              if ............................................................................................................................................81




                                                                                                                                                            vi
else .......................................................................................................................................81
                 elseif ...................................................................................................................................82
              Sintaxis Alternativa de Estructuras de Control.......................................................................82
              while .....................................................................................................................................83
              do..while .............................................................................................................................84
              for ..........................................................................................................................................85
              foreach .................................................................................................................................86
              break .....................................................................................................................................88
              continue ...............................................................................................................................89
              switch ...................................................................................................................................90
              require() ..................................................................................................................................92
              include()..................................................................................................................................93
              require_once().........................................................................................................................96
              include_once() ........................................................................................................................98
        12. Funciones .................................................................................................................................100
              Funciones definidas por el usuario .......................................................................................101
              Parámetros de las funciones .................................................................................................101
                     Pasar parámetros por referencia..................................................................................101
                     Parámetros por defecto ...............................................................................................102
                     Lista de longitud variable de parámetros ....................................................................103
              Devolver valores ...................................................................................................................103
              old_function ....................................................................................................................104
              Funciones variable................................................................................................................104
        13. Clases y Objetos.......................................................................................................................106
              class ...................................................................................................................................107
        14. References Explained...............................................................................................................110
              What References Are............................................................................................................111
              What References Do.............................................................................................................111
              What References Are Not.....................................................................................................112
              Passing by Reference............................................................................................................112
              Returning References ...........................................................................................................113
              Unsetting References............................................................................................................114
              Spotting References..............................................................................................................114
                     global References.....................................................................................................114
                     $this ..........................................................................................................................115
III. Características.................................................................................................................................116
        15. Manejando errores....................................................................................................................116
        16. Creando y manipulando imágenes ...........................................................................................121
        17. Autentificación HTTP con PHP ...............................................................................................123
        18. Cookies.....................................................................................................................................126
        19. Manejo de envío de ficheros.....................................................................................................128
              Envío de archivos con el método POST ...............................................................................129
              Errores comunes ...................................................................................................................131
              Envío de multiples ficheros ..................................................................................................131
              Soporte del método PUT ......................................................................................................132
        20. Usando archivos remotos .........................................................................................................134
        21. Manejando conexiones.............................................................................................................137




                                                                                                                                                           vii
22. Conexiones persistentes a bases de datos.................................................................................139
        23. Modo Seguro (Safe Mode).......................................................................................................142
             Funciones restringidas/inhabilitadas por Modo Seguro .......................................................144
        24. Using PHP from the command line .........................................................................................149
IV. Referencia de las Funciones ...........................................................................................................162
        I. Funciones específicas de Apache................................................................................................162
              apache_child_terminate........................................................................................................163
              apache_lookup_uri ...............................................................................................................163
              apache_note ..........................................................................................................................164
              apache_setenv .......................................................................................................................164
              ascii2ebcdic ..........................................................................................................................164
              ebcdic2ascii ..........................................................................................................................164
              getallheaders .........................................................................................................................165
              virtual....................................................................................................................................165
        II. Funciones de matrices ...............................................................................................................167
              array_change_key_case ........................................................................................................169
              array_chunk ..........................................................................................................................169
              array_count_values...............................................................................................................170
              array_diff ..............................................................................................................................171
              array_fill ...............................................................................................................................172
              array_filter ............................................................................................................................172
              array_flip...............................................................................................................................174
              array_intersect ......................................................................................................................174
              array_key_exists ...................................................................................................................175
              array_keys.............................................................................................................................175
              array_map .............................................................................................................................176
              array_merge_recursive .........................................................................................................179
              array_merge ..........................................................................................................................180
              array_multisort .....................................................................................................................181
              array_pad ..............................................................................................................................182
              array_pop..............................................................................................................................183
              array_push ............................................................................................................................183
              array_rand.............................................................................................................................184
              array_reduce .........................................................................................................................185
              array_reverse ........................................................................................................................185
              array_search..........................................................................................................................186
              array_shift.............................................................................................................................186
              array_slice.............................................................................................................................187
              array_splice...........................................................................................................................188
              array_sum .............................................................................................................................189
              array_unique .........................................................................................................................190
              array_unshift.........................................................................................................................191
              array_values..........................................................................................................................192
              array_walk ............................................................................................................................192
              array......................................................................................................................................193
              arsort .....................................................................................................................................194
              asort ......................................................................................................................................194




                                                                                                                                                        viii
compact.................................................................................................................................195
       count .....................................................................................................................................195
       current...................................................................................................................................196
       each.......................................................................................................................................196
       end ........................................................................................................................................198
       extract ...................................................................................................................................198
       in_array.................................................................................................................................199
       key ........................................................................................................................................200
       krsort.....................................................................................................................................200
       ksort ......................................................................................................................................201
       list .........................................................................................................................................201
       natcasesort ............................................................................................................................202
       natsort ...................................................................................................................................202
       next .......................................................................................................................................203
       pos.........................................................................................................................................204
       prev .......................................................................................................................................204
       rango .....................................................................................................................................204
       reset.......................................................................................................................................205
       rsort.......................................................................................................................................205
       shuffle ...................................................................................................................................205
       sizeof.....................................................................................................................................206
       sort ........................................................................................................................................206
       uasort ....................................................................................................................................206
       uksort ....................................................................................................................................207
       usort ......................................................................................................................................207
III. Funciones Aspell [deprecated].................................................................................................209
       aspell_check-raw ..................................................................................................................210
       aspell_check .........................................................................................................................210
       aspell_new ............................................................................................................................210
       aspell_suggest.......................................................................................................................211
IV. Funciones matemáticas de precisión arbitraria BCMath .........................................................212
       bcadd.....................................................................................................................................213
       bccomp .................................................................................................................................213
       bcdiv .....................................................................................................................................213
       bcmod ...................................................................................................................................213
       bcmul ....................................................................................................................................213
       bcpow....................................................................................................................................214
       bcscale ..................................................................................................................................214
       bcsqrt ....................................................................................................................................214
       bcsub.....................................................................................................................................214
V. Funciones de compresión Bzip2 ...............................................................................................216
       bzclose ..................................................................................................................................218
       bzcompress ...........................................................................................................................218
       bzdecompress .......................................................................................................................218
       bzerrno..................................................................................................................................219
       bzerror...................................................................................................................................219
       bzerrstr..................................................................................................................................220
       bzflush...................................................................................................................................220




                                                                                                                                                     ix
bzopen...................................................................................................................................220
      bzread ...................................................................................................................................221
      bzwrite ..................................................................................................................................221
VI. Funciones de calendario...........................................................................................................223
      cal_days_in_month...............................................................................................................225
      cal_from_jd...........................................................................................................................225
      cal_info .................................................................................................................................225
      cal_to_jd ...............................................................................................................................225
      easter_date ............................................................................................................................225
      easter_days ...........................................................................................................................226
      FrenchToJD ..........................................................................................................................227
      GregorianToJD .....................................................................................................................227
      JDDayOfWeek......................................................................................................................228
      JDMonthName .....................................................................................................................228
      JDToFrench ..........................................................................................................................229
      JDToGregorian .....................................................................................................................229
      JDToJewish...........................................................................................................................229
      JDToJulian ............................................................................................................................229
      jdtounix.................................................................................................................................229
      JewishToJD...........................................................................................................................230
      JulianToJD ............................................................................................................................230
      unixtojd.................................................................................................................................230
VII. Funciones del API de CCVS ..................................................................................................232
      ccvs_add ...............................................................................................................................233
      ccvs_auth ..............................................................................................................................233
      ccvs_command .....................................................................................................................233
      ccvs_count ............................................................................................................................233
      ccvs_delete ...........................................................................................................................234
      ccvs_done .............................................................................................................................234
      ccvs_init................................................................................................................................234
      ccvs_lookup..........................................................................................................................235
      ccvs_new ..............................................................................................................................235
      ccvs_report ...........................................................................................................................235
      ccvs_return ...........................................................................................................................236
      ccvs_reverse..........................................................................................................................236
      ccvs_sale...............................................................................................................................236
      ccvs_status............................................................................................................................237
      ccvs_textvalue ......................................................................................................................237
      ccvs_void ..............................................................................................................................237
VIII. soporte de las funciones COM para Windows ......................................................................239
      COM .....................................................................................................................................240
      VARIANT.............................................................................................................................241
      com_addref ...........................................................................................................................242
      com_get ................................................................................................................................242
      com_invoke...........................................................................................................................243
      com_isenum..........................................................................................................................243
      com_load_typelib .................................................................................................................243
      com_load ..............................................................................................................................243




                                                                                                                                                 x
com_propget .........................................................................................................................244
      com_propput.........................................................................................................................244
      com_propset .........................................................................................................................244
      com_release ..........................................................................................................................244
      com_set.................................................................................................................................244
IX. Funciones de Clases/Objectos .................................................................................................245
      call_user_method_array .......................................................................................................248
      call_user_method..................................................................................................................248
      class_exists ...........................................................................................................................249
      get_class_methods................................................................................................................249
      get_class_vars.......................................................................................................................250
      get_class ...............................................................................................................................252
      get_declared_classes.............................................................................................................252
      get_object_vars.....................................................................................................................252
      get_parent_class ...................................................................................................................254
      is_a........................................................................................................................................254
      is_subclass_of.......................................................................................................................254
      method_exists .......................................................................................................................254
X. Funciones de ClibPDF ..............................................................................................................256
      cpdf_add_annotation ............................................................................................................259
      cpdf_add_outline ..................................................................................................................259
      cpdf_arc ................................................................................................................................259
      cpdf_begin_text ....................................................................................................................260
      cpdf_circle ............................................................................................................................260
      cpdf_clip ...............................................................................................................................260
      cpdf_close.............................................................................................................................261
      cpdf_closepath_fill_stroke....................................................................................................261
      cpdf_closepath_stroke ..........................................................................................................261
      cpdf_closepath......................................................................................................................261
      cpdf_continue_text ...............................................................................................................262
      cpdf_curveto .........................................................................................................................262
      cpdf_end_text .......................................................................................................................262
      cpdf_fill_stroke.....................................................................................................................263
      cpdf_fill.................................................................................................................................263
      cpdf_finalize_page................................................................................................................263
      cpdf_finalize .........................................................................................................................263
      cpdf_global_set_document_limits........................................................................................264
      cpdf_import_jpeg .................................................................................................................264
      cpdf_lineto............................................................................................................................264
      cpdf_moveto .........................................................................................................................265
      cpdf_newpath........................................................................................................................265
      cpdf_open .............................................................................................................................265
      cpdf_output_buffer ...............................................................................................................266
      cpdf_page_init ......................................................................................................................266
      cpdf_place_inline_image......................................................................................................266
      cpdf_rect ...............................................................................................................................267
      cpdf_restore ..........................................................................................................................267
      cpdf_rlineto...........................................................................................................................267




                                                                                                                                                  xi
cpdf_rmoveto........................................................................................................................267
      cpdf_rotate_text ....................................................................................................................268
      cpdf_rotate............................................................................................................................268
      cpdf_save_to_file..................................................................................................................268
      cpdf_save ..............................................................................................................................269
      cpdf_scale .............................................................................................................................269
      cpdf_set_action_url ..............................................................................................................269
      cpdf_set_char_spacing .........................................................................................................269
      cpdf_set_creator ...................................................................................................................270
      cpdf_set_current_page..........................................................................................................270
      cpdf_set_font_directories .....................................................................................................270
      cpdf_set_font_map_file ........................................................................................................270
      cpdf_set_font ........................................................................................................................271
      cpdf_set_horiz_scaling .........................................................................................................271
      cpdf_set_keywords ...............................................................................................................271
      cpdf_set_leading...................................................................................................................271
      cpdf_set_page_animation .....................................................................................................272
      cpdf_set_subject ...................................................................................................................272
      cpdf_set_text_matrix ............................................................................................................272
      cpdf_set_text_pos .................................................................................................................272
      cpdf_set_text_rendering .......................................................................................................273
      cpdf_set_text_rise.................................................................................................................273
      cpdf_set_title ........................................................................................................................273
      cpdf_set_viewer_preferences ...............................................................................................273
      cpdf_set_word_spacing ........................................................................................................274
      cpdf_setdash .........................................................................................................................274
      cpdf_setflat ...........................................................................................................................274
      cpdf_setgray_fill ...................................................................................................................274
      cpdf_setgray_stroke..............................................................................................................275
      cpdf_setgray .........................................................................................................................275
      cpdf_setlinecap .....................................................................................................................275
      cpdf_setlinejoin ....................................................................................................................275
      cpdf_setlinewidth..................................................................................................................276
      cpdf_setmiterlimit.................................................................................................................276
      cpdf_setrgbcolor_fill.............................................................................................................276
      cpdf_setrgbcolor_stroke .......................................................................................................276
      cpdf_setrgbcolor ...................................................................................................................276
      cpdf_show_xy.......................................................................................................................277
      cpdf_show.............................................................................................................................277
      cpdf_stringwidth...................................................................................................................277
      cpdf_stroke ...........................................................................................................................278
      cpdf_text ...............................................................................................................................278
      cpdf_translate .......................................................................................................................278
XI. Crack functions ........................................................................................................................279
      crack_check ..........................................................................................................................281
      crack_closedict .....................................................................................................................281
      crack_getlastmessage ...........................................................................................................281
      crack_opendict......................................................................................................................282




                                                                                                                                              xii
XII. CURL, Client URL Library Functions ...................................................................................283
      curl_close..............................................................................................................................284
      curl_errno .............................................................................................................................284
      curl_error ..............................................................................................................................284
      curl_exec...............................................................................................................................284
      curl_getinfo...........................................................................................................................285
      curl_init.................................................................................................................................285
      curl_setopt ............................................................................................................................285
      curl_version ..........................................................................................................................288
XIII. Funciones de pago electrónico ..............................................................................................289
      cybercash_base64_decode....................................................................................................290
      cybercash_base64_encode....................................................................................................290
      cybercash_decr .....................................................................................................................290
      cybercash_encr .....................................................................................................................290
XIV. Crédit Mutuel CyberMUT functions ....................................................................................291
      cybermut_creerformulairecm ...............................................................................................292
      cybermut_creerreponsecm....................................................................................................292
      cybermut_testmac.................................................................................................................293
XV. Cyrus IMAP administration functions ...................................................................................295
      cyrus_authenticate ................................................................................................................296
      cyrus_bind ............................................................................................................................296
      cyrus_close ...........................................................................................................................296
      cyrus_connect .......................................................................................................................296
      cyrus_query ..........................................................................................................................297
      cyrus_unbind ........................................................................................................................297
XVI. Character type functions .......................................................................................................298
      ctype_alnum .........................................................................................................................299
      ctype_alpha...........................................................................................................................299
      ctype_cntrl ............................................................................................................................299
      ctype_digit ............................................................................................................................299
      ctype_graph ..........................................................................................................................299
      ctype_lower ..........................................................................................................................300
      ctype_print............................................................................................................................300
      ctype_punct...........................................................................................................................300
      ctype_space...........................................................................................................................300
      ctype_upper ..........................................................................................................................301
      ctype_xdigit ..........................................................................................................................301
XVII. Funciones de la capa de abstraccion de bases de datos (dbm-style)....................................302
      dba_close ..............................................................................................................................304
      dba_delete.............................................................................................................................304
      dba_exists .............................................................................................................................304
      dba_fetch ..............................................................................................................................304
      dba_firstkey ..........................................................................................................................305
      dba_insert .............................................................................................................................305
      dba_nextkey..........................................................................................................................305
      dba_open...............................................................................................................................306
      dba_optimize ........................................................................................................................306
      dba_popen.............................................................................................................................306




                                                                                                                                              xiii
dba_replace...........................................................................................................................307
     dba_sync ...............................................................................................................................307
XVIII. Funciones de fecha y hora ..................................................................................................309
     checkdate ..............................................................................................................................310
     date .......................................................................................................................................310
     getdate...................................................................................................................................311
     gettimeofday .........................................................................................................................312
     gmdate ..................................................................................................................................312
     gmmktime.............................................................................................................................313
     gmstrftime.............................................................................................................................313
     localtime ...............................................................................................................................313
     microtime..............................................................................................................................314
     mktime..................................................................................................................................314
     strftime..................................................................................................................................315
     strtotime................................................................................................................................316
     time .......................................................................................................................................317
XIX. Funciones para dBase ...........................................................................................................319
     dbase_add_record .................................................................................................................320
     dbase_close...........................................................................................................................320
     dbase_create .........................................................................................................................320
     dbase_delete_record .............................................................................................................321
     dbase_get_record_with_names.............................................................................................321
     dbase_get_record..................................................................................................................321
     dbase_numfields ...................................................................................................................322
     dbase_numrecords ................................................................................................................322
     dbase_open ...........................................................................................................................322
     dbase_pack ...........................................................................................................................323
     dbase_replace_record ...........................................................................................................323
XX. Funciones dbm .......................................................................................................................324
     dblist .....................................................................................................................................325
     dbmclose...............................................................................................................................325
     dbmdelete .............................................................................................................................325
     dbmexists ..............................................................................................................................325
     dbmfetch ...............................................................................................................................325
     dbmfirstkey ...........................................................................................................................325
     dbminsert ..............................................................................................................................326
     dbmnextkey ..........................................................................................................................326
     dbmopen ...............................................................................................................................326
     dbmreplace ...........................................................................................................................327
XXI. dbx functions.........................................................................................................................328
     dbx_close..............................................................................................................................331
     dbx_compare ........................................................................................................................331
     dbx_connect..........................................................................................................................332
     dbx_error ..............................................................................................................................333
     dbx_query .............................................................................................................................334
     dbx_sort ................................................................................................................................337
XXII. DB++ Functions ..................................................................................................................339
     dbplus_add............................................................................................................................343




                                                                                                                                               xiv
dbplus_aql.............................................................................................................................343
     dbplus_chdir .........................................................................................................................343
     dbplus_close .........................................................................................................................344
     dbplus_curr ...........................................................................................................................344
     dbplus_errcode .....................................................................................................................345
     dbplus_errno .........................................................................................................................345
     dbplus_find ...........................................................................................................................345
     dbplus_first ...........................................................................................................................346
     dbplus_flush..........................................................................................................................346
     dbplus_freealllocks...............................................................................................................347
     dbplus_freelock ....................................................................................................................347
     dbplus_freerlocks .................................................................................................................347
     dbplus_getlock......................................................................................................................348
     dbplus_getunique..................................................................................................................348
     dbplus_info ...........................................................................................................................349
     dbplus_last............................................................................................................................349
     dbplus_lockrel ......................................................................................................................349
     dbplus_next...........................................................................................................................350
     dbplus_open..........................................................................................................................350
     dbplus_prev ..........................................................................................................................351
     dbplus_rchperm ....................................................................................................................351
     dbplus_rcreate.......................................................................................................................351
     dbplus_rcrtexact....................................................................................................................352
     dbplus_rcrtlike ......................................................................................................................352
     dbplus_resolve ......................................................................................................................353
     dbplus_restorepos .................................................................................................................353
     dbplus_rkeys.........................................................................................................................353
     dbplus_ropen ........................................................................................................................354
     dbplus_rquery .......................................................................................................................354
     dbplus_rrename ....................................................................................................................355
     dbplus_rsecindex ..................................................................................................................355
     dbplus_runlink......................................................................................................................355
     dbplus_rzap...........................................................................................................................356
     dbplus_savepos .....................................................................................................................356
     dbplus_setindex ....................................................................................................................357
     dbplus_setindexbynumber ....................................................................................................357
     dbplus_sql.............................................................................................................................357
     dbplus_tcl .............................................................................................................................358
     dbplus_tremove ....................................................................................................................358
     dbplus_undo .........................................................................................................................358
     dbplus_undoprepare .............................................................................................................359
     dbplus_unlockrel ..................................................................................................................359
     dbplus_unselect ....................................................................................................................359
     dbplus_update.......................................................................................................................360
     dbplus_xlockrel ....................................................................................................................360
     dbplus_xunlockrel ................................................................................................................360
XXIII. Direct IO functions.............................................................................................................362
     dio_close...............................................................................................................................363




                                                                                                                                            xv
dio_fcntl................................................................................................................................363
    dio_open ...............................................................................................................................363
    dio_read ................................................................................................................................364
    dio_seek................................................................................................................................364
    dio_stat .................................................................................................................................365
    dio_truncate ..........................................................................................................................365
    dio_write...............................................................................................................................365
XXIV. Funciones con directorios ..................................................................................................367
    chdir......................................................................................................................................368
    chroot....................................................................................................................................368
    dir..........................................................................................................................................368
    closedir .................................................................................................................................369
    getcwd...................................................................................................................................369
    opendir..................................................................................................................................369
    readdir...................................................................................................................................369
    rewinddir...............................................................................................................................370
XXV. Funciones de DOM XML....................................................................................................371
    DomAttribute->name ...........................................................................................................372
    DomAttribute->specified ......................................................................................................372
    DomAttribute->value............................................................................................................372
    DomDocument->add_root [deprecated]...............................................................................372
    DomDocument->create_attribute .........................................................................................373
    DomDocument->create_cdata_section.................................................................................373
    DomDocument->create_comment .......................................................................................373
    DomDocument->create_element..........................................................................................374
    DomDocument->create_entity_reference ............................................................................374
    DomDocument->create_processing_instruction ..................................................................374
    DomDocument->create_text_node.......................................................................................375
    DomDocument->doctype .....................................................................................................375
    DomDocument->document_element ...................................................................................375
    DomDocument->dump_file..................................................................................................376
    DomDocument->dump_mem...............................................................................................377
    DomDocument->get_element_by_id ...................................................................................378
    DomDocument->get_elements_by_tagname .......................................................................378
    DomDocument->html_dump_mem .....................................................................................378
    DomDocumentType->entities ..............................................................................................379
    DomDocumentType->internal_subset..................................................................................379
    DomDocumentType->name .................................................................................................379
    DomDocumentType->notations ...........................................................................................380
    DomDocumentType->public_id...........................................................................................380
    DomDocumentType->system_id..........................................................................................381
    DomElement->get_attribute_node .......................................................................................381
    DomElement->get_attribute .................................................................................................381
    DomElement->get_elements_by_tagname...........................................................................382
    DomElement->has_attribute.................................................................................................382
    DomElement->remove_attribute ..........................................................................................382
    DomElement->set_attribute .................................................................................................383
    DomElement->tagname........................................................................................................383




                                                                                                                                               xvi
DomNode->append_child ....................................................................................................383
    DomNode->append_sibling .................................................................................................385
    DomNode->attributes ...........................................................................................................386
    DomNode->child_nodes.......................................................................................................386
    DomNode->clone_node .......................................................................................................386
    DomNode->dump_node .......................................................................................................386
    DomNode->first_child..........................................................................................................387
    DomNode->get_content .......................................................................................................387
    DomNode->has_attributess ..................................................................................................387
    DomNode->has_child_nodes ...............................................................................................387
    DomNode->insert_before.....................................................................................................388
    DomNode->is_blank_node...................................................................................................388
    DomNode->last_child ..........................................................................................................389
    DomNode->next_sibling ......................................................................................................389
    DomNode->node_name .......................................................................................................390
    DomNode->node_type .........................................................................................................390
    DomNode->node_value........................................................................................................391
    DomNode->owner_document ..............................................................................................391
    DomNode->parent_node ......................................................................................................392
    DomNode->prefix.................................................................................................................392
    DomNode->previous_sibling ...............................................................................................393
    DomNode->remove_child ....................................................................................................393
    DomNode->replace_child ....................................................................................................394
    DomNode->replace_node.....................................................................................................394
    DomNode->set_content........................................................................................................394
    DomNode->set_name...........................................................................................................395
    DomNode->unlink_node......................................................................................................395
    DomProcessingInstruction->data .........................................................................................395
    DomProcessingInstruction->target.......................................................................................395
    domxml_new_doc ................................................................................................................396
    domxml_open_file................................................................................................................396
    domxml_open_mem .............................................................................................................397
    domxml_version ...................................................................................................................397
    domxml_xmltree...................................................................................................................398
    xpath_eval_expression..........................................................................................................398
    xpath_eval.............................................................................................................................398
    xpath_new_context ...............................................................................................................399
    xptr_eval ...............................................................................................................................399
    xptr_new_context .................................................................................................................399
XXVI. .NET functions ...................................................................................................................401
    dotnet_load ...........................................................................................................................402
XXVII. Error Handling and Logging Functions ............................................................................403
    error_log ...............................................................................................................................404
    error_reporting......................................................................................................................405
    restore_error_handler ...........................................................................................................405
    set_error_handler..................................................................................................................405
    trigger_error..........................................................................................................................408
    user_error..............................................................................................................................408




                                                                                                                                          xvii
XXVIII. FrontBase Functions........................................................................................................410
    fbsql_affected_rows..............................................................................................................412
    fbsql_autocommit .................................................................................................................412
    fbsql_change_user ................................................................................................................412
    fbsql_close............................................................................................................................413
    fbsql_commit........................................................................................................................413
    fbsql_connect........................................................................................................................413
    fbsql_create_blob .................................................................................................................414
    fbsql_create_clob..................................................................................................................415
    fbsql_create_db.....................................................................................................................415
    fbsql_data_seek ....................................................................................................................416
    fbsql_database_password .....................................................................................................417
    fbsql_database ......................................................................................................................418
    fbsql_db_query .....................................................................................................................418
    fbsql_db_status .....................................................................................................................418
    fbsql_drop_db.......................................................................................................................419
    fbsql_errno............................................................................................................................419
    fbsql_error ............................................................................................................................420
    fbsql_fetch_array..................................................................................................................420
    fbsql_fetch_assoc .................................................................................................................421
    fbsql_fetch_field ...................................................................................................................422
    fbsql_fetch_lengths...............................................................................................................423
    fbsql_fetch_object ................................................................................................................423
    fbsql_fetch_row ....................................................................................................................424
    fbsql_field_flags ...................................................................................................................425
    fbsql_field_len ......................................................................................................................425
    fbsql_field_name ..................................................................................................................425
    fbsql_field_seek....................................................................................................................426
    fbsql_field_table ...................................................................................................................426
    fbsql_field_type ....................................................................................................................426
    fbsql_free_result ...................................................................................................................427
    fbsql_get_autostart_info .......................................................................................................427
    fbsql_hostname.....................................................................................................................428
    fbsql_insert_id ......................................................................................................................428
    fbsql_list_dbs........................................................................................................................429
    fbsql_list_fields.....................................................................................................................429
    fbsql_list_tables....................................................................................................................430
    fbsql_next_result ..................................................................................................................430
    fbsql_num_fields ..................................................................................................................431
    fbsql_num_rows ...................................................................................................................431
    fbsql_password .....................................................................................................................432
    fbsql_pconnect......................................................................................................................432
    fbsql_query ...........................................................................................................................433
    fbsql_read_blob ....................................................................................................................434
    fbsql_read_clob ....................................................................................................................435
    fbsql_result ...........................................................................................................................435
    fbsql_rollback .......................................................................................................................436
    fbsql_select_db .....................................................................................................................436




                                                                                                                                        xviii
fbsql_set_lob_mode..............................................................................................................437
    fbsql_set_transaction ............................................................................................................437
    fbsql_start_db .......................................................................................................................437
    fbsql_stop_db .......................................................................................................................438
    fbsql_tablename....................................................................................................................438
    fbsql_username.....................................................................................................................439
    fbsql_warnings .....................................................................................................................439
XXIX. Funciones filePro................................................................................................................440
    filepro_fieldcount..................................................................................................................441
    filepro_fieldname..................................................................................................................441
    filepro_fieldtype....................................................................................................................441
    filepro_fieldwidth .................................................................................................................441
    filepro_retrieve......................................................................................................................441
    filepro_rowcount...................................................................................................................441
    filepro....................................................................................................................................442
XXX. Funciones del sistema de ficheros .......................................................................................443
    basename ..............................................................................................................................444
    chgrp .....................................................................................................................................444
    chmod ...................................................................................................................................444
    chown....................................................................................................................................445
    clearstatcache........................................................................................................................445
    copy ......................................................................................................................................445
    delete.....................................................................................................................................446
    dirname .................................................................................................................................446
    disk_free_space ....................................................................................................................447
    disk_total_space ...................................................................................................................447
    diskfreespace ........................................................................................................................447
    fclose.....................................................................................................................................448
    feof........................................................................................................................................448
    fflush .....................................................................................................................................448
    fgetc ......................................................................................................................................449
    fgetcsv...................................................................................................................................449
    fgets ......................................................................................................................................450
    fgetss.....................................................................................................................................450
    file_exists ..............................................................................................................................451
    file_get_contents...................................................................................................................451
    file_get_wrapper_data ..........................................................................................................451
    file_register_wrapper ............................................................................................................452
    file .........................................................................................................................................453
    fileatime ................................................................................................................................453
    filectime ................................................................................................................................454
    filegroup................................................................................................................................454
    fileinode ................................................................................................................................454
    filemtime...............................................................................................................................454
    fileowner ...............................................................................................................................455
    fileperms ...............................................................................................................................455
    filesize...................................................................................................................................455
    filetype ..................................................................................................................................455




                                                                                                                                               xix
flock ......................................................................................................................................455
    fopen .....................................................................................................................................456
    fpassthru ...............................................................................................................................457
    fputs ......................................................................................................................................458
    fread......................................................................................................................................458
    fscanf ....................................................................................................................................458
    fseek......................................................................................................................................459
    fstat .......................................................................................................................................460
    ftell........................................................................................................................................460
    ftruncate................................................................................................................................460
    fwrite.....................................................................................................................................461
    glob .......................................................................................................................................461
    is_dir .....................................................................................................................................462
    is_executable ........................................................................................................................462
    is_file ....................................................................................................................................462
    is_link ...................................................................................................................................462
    is_readable............................................................................................................................463
    is_uploaded_file....................................................................................................................463
    is_writable ............................................................................................................................464
    is_writeable...........................................................................................................................464
    link........................................................................................................................................465
    linkinfo .................................................................................................................................465
    lstat .......................................................................................................................................465
    mkdir.....................................................................................................................................466
    move_uploaded_file..............................................................................................................466
    parse_ini_file ........................................................................................................................467
    pathinfo.................................................................................................................................469
    pclose....................................................................................................................................470
    popen ....................................................................................................................................470
    readfile ..................................................................................................................................470
    readlink .................................................................................................................................471
    realpath .................................................................................................................................471
    rename ..................................................................................................................................472
    rewind ...................................................................................................................................472
    rmdir .....................................................................................................................................472
    set_file_buffer .......................................................................................................................472
    stat.........................................................................................................................................473
    symlink .................................................................................................................................473
    tempnam ...............................................................................................................................474
    tmpfile...................................................................................................................................474
    touch .....................................................................................................................................475
    umask....................................................................................................................................475
    unlink....................................................................................................................................475
XXXI. Funciones Forms Data Format (Formato de Datos de Formularios)..................................476
    fdf_add_template..................................................................................................................478
    fdf_close ...............................................................................................................................478
    fdf_create..............................................................................................................................478
    fdf_get_file ...........................................................................................................................479




                                                                                                                                                xx
fdf_get_status .......................................................................................................................479
    fdf_get_value ........................................................................................................................479
    fdf_next_field_name.............................................................................................................479
    fdf_open................................................................................................................................480
    fdf_save ................................................................................................................................480
    fdf_set_ap .............................................................................................................................480
    fdf_set_encoding ..................................................................................................................481
    fdf_set_file............................................................................................................................481
    fdf_set_flags .........................................................................................................................481
    fdf_set_javascript_action......................................................................................................481
    fdf_set_opt............................................................................................................................482
    fdf_set_status........................................................................................................................482
    fdf_set_submit_form_action.................................................................................................482
    fdf_set_value ........................................................................................................................482
XXXII. FriBiDi functions ..............................................................................................................484
    fribidi_log2vis ......................................................................................................................486
XXXIII. Funciones FTP.................................................................................................................487
    ftp_cdup................................................................................................................................488
    ftp_chdir ...............................................................................................................................488
    ftp_close ...............................................................................................................................488
    ftp_connect ...........................................................................................................................488
    ftp_delete ..............................................................................................................................488
    ftp_exec ................................................................................................................................489
    ftp_fget .................................................................................................................................489
    ftp_fput .................................................................................................................................489
    ftp_get_option.......................................................................................................................489
    ftp_get...................................................................................................................................490
    ftp_login ...............................................................................................................................490
    ftp_mdtm ..............................................................................................................................491
    ftp_mkdir ..............................................................................................................................491
    ftp_nlist.................................................................................................................................491
    ftp_pasv ................................................................................................................................491
    ftp_put...................................................................................................................................492
    ftp_pwd.................................................................................................................................492
    ftp_quit .................................................................................................................................492
    ftp_rawlist.............................................................................................................................492
    ftp_rename............................................................................................................................493
    ftp_rmdir...............................................................................................................................493
    ftp_set_option .......................................................................................................................493
    ftp_site ..................................................................................................................................494
    ftp_size .................................................................................................................................494
    ftp_systype............................................................................................................................494
XXXIV. Function Handling functions...........................................................................................496
    call_user_func_array ............................................................................................................497
    call_user_func.......................................................................................................................497
    create_function .....................................................................................................................498
    func_get_arg .........................................................................................................................500
    func_get_args........................................................................................................................501




                                                                                                                                             xxi
func_num_args .....................................................................................................................501
   function_exists......................................................................................................................502
   get_defined_functions...........................................................................................................502
   register_shutdown_function .................................................................................................503
   register_tick_function...........................................................................................................503
   unregister_tick_function.......................................................................................................504
XXXV. GNU Gettext.....................................................................................................................505
   bind_textdomain_codeset .....................................................................................................506
   bindtextdomain .....................................................................................................................506
   dcgettext ...............................................................................................................................506
   dcngettext .............................................................................................................................506
   dgettext .................................................................................................................................507
   dngettext ...............................................................................................................................507
   gettext ...................................................................................................................................507
   ngettext .................................................................................................................................508
   textdomain ............................................................................................................................508
XXXVI. GMP functions ................................................................................................................509
   gmp_abs................................................................................................................................510
   gmp_add ...............................................................................................................................510
   gmp_and ...............................................................................................................................510
   gmp_clrbit.............................................................................................................................510
   gmp_cmp ..............................................................................................................................510
   gmp_com ..............................................................................................................................510
   gmp_div_q ............................................................................................................................511
   gmp_div_qr...........................................................................................................................511
   gmp_div_r.............................................................................................................................512
   gmp_div ................................................................................................................................512
   gmp_divexact........................................................................................................................512
   gmp_fact ...............................................................................................................................512
   gmp_gcd ...............................................................................................................................513
   gmp_gcdext ..........................................................................................................................513
   gmp_hamdist ........................................................................................................................513
   gmp_init................................................................................................................................513
   gmp_intval ............................................................................................................................514
   gmp_invert............................................................................................................................514
   gmp_jacobi ...........................................................................................................................514
   gmp_legendre .......................................................................................................................515
   gmp_mod..............................................................................................................................515
   gmp_mul...............................................................................................................................515
   gmp_neg ...............................................................................................................................515
   gmp_or..................................................................................................................................515
   gmp_perfect_square .............................................................................................................516
   gmp_popcount ......................................................................................................................516
   gmp_pow ..............................................................................................................................516
   gmp_powm ...........................................................................................................................516
   gmp_prob_prime ..................................................................................................................516
   gmp_random.........................................................................................................................517
   gmp_scan0............................................................................................................................517




                                                                                                                                           xxii
gmp_scan1............................................................................................................................517
   gmp_setbit ............................................................................................................................517
   gmp_sign ..............................................................................................................................517
   gmp_sqrt ...............................................................................................................................518
   gmp_sqrtrm...........................................................................................................................518
   gmp_strval ............................................................................................................................518
   gmp_sub ...............................................................................................................................518
   gmp_xor................................................................................................................................519
XXXVII. Funciones HTTP ............................................................................................................520
   header ...................................................................................................................................521
   headers_sent .........................................................................................................................521
   setcookie ...............................................................................................................................522
XXXVIII. Funciones para Hyperwave...........................................................................................524
   hw_Array2Objrec .................................................................................................................529
   hw_changeobject ..................................................................................................................529
   hw_Children .........................................................................................................................529
   hw_ChildrenObj ...................................................................................................................529
   hw_Close ..............................................................................................................................529
   hw_Connect..........................................................................................................................530
   hw_connection_info .............................................................................................................530
   hw_Cp...................................................................................................................................530
   hw_Deleteobject ...................................................................................................................531
   hw_DocByAnchor................................................................................................................531
   hw_DocByAnchorObj..........................................................................................................531
   hw_Document_Attributes.....................................................................................................531
   hw_Document_BodyTag ......................................................................................................532
   hw_Document_Content........................................................................................................532
   hw_Document_SetContent...................................................................................................532
   hw_Document_Size..............................................................................................................532
   hw_dummy ...........................................................................................................................533
   hw_EditText..........................................................................................................................533
   hw_Error...............................................................................................................................533
   hw_ErrorMsg........................................................................................................................533
   hw_Free_Document .............................................................................................................534
   hw_GetAnchors....................................................................................................................534
   hw_GetAnchorsObj..............................................................................................................534
   hw_GetAndLock ..................................................................................................................534
   hw_GetChildColl..................................................................................................................534
   hw_GetChildCollObj............................................................................................................535
   hw_GetChildDocColl ...........................................................................................................535
   hw_GetChildDocCollObj .....................................................................................................535
   hw_GetObject.......................................................................................................................535
   hw_GetObjectByQuery ........................................................................................................536
   hw_GetObjectByQueryColl .................................................................................................536
   hw_GetObjectByQueryCollObj ...........................................................................................537
   hw_GetObjectByQueryObj ..................................................................................................537
   hw_GetParents......................................................................................................................537
   hw_GetParentsObj................................................................................................................538




                                                                                                                                         xxiii
hw_getrellink........................................................................................................................538
    hw_GetRemote .....................................................................................................................538
    hw_GetRemoteChildren .......................................................................................................539
    hw_GetSrcByDestObj ..........................................................................................................539
    hw_GetText ..........................................................................................................................539
    hw_Username .......................................................................................................................540
    hw_Identify...........................................................................................................................540
    hw_InCollections..................................................................................................................540
    hw_Info.................................................................................................................................541
    hw_InsColl ...........................................................................................................................541
    hw_InsDoc............................................................................................................................541
    hw_insertanchors..................................................................................................................541
    hw_InsertDocument .............................................................................................................542
    hw_InsertObject ...................................................................................................................542
    hw_mapid .............................................................................................................................542
    hw_Modifyobject .................................................................................................................543
    hw_Mv..................................................................................................................................545
    hw_New_Document .............................................................................................................546
    hw_Objrec2Array .................................................................................................................546
    hw_Output_Document .........................................................................................................546
    hw_pConnect........................................................................................................................546
    hw_PipeDocument ...............................................................................................................547
    hw_Root ...............................................................................................................................547
    hw_setlinkroot ......................................................................................................................547
    hw_stat..................................................................................................................................548
    hw_Unlock ...........................................................................................................................548
    hw_Who ...............................................................................................................................548
XXXIX. Hyperwave API functions ...............................................................................................549
    hw_api_attribute->key..........................................................................................................551
    hw_api_attribute->langdepvalue ..........................................................................................551
    hw_api_attribute->value .......................................................................................................551
    hw_api_attribute->values .....................................................................................................551
    hw_api_attribute ...................................................................................................................551
    hw_api->checkin ..................................................................................................................552
    hw_api->checkout ................................................................................................................552
    hw_api->children..................................................................................................................553
    hw_api_content->mimetype .................................................................................................553
    hw_api_content->read ..........................................................................................................553
    hw_api->content ...................................................................................................................553
    hw_api->copy .......................................................................................................................554
    hw_api->dbstat .....................................................................................................................554
    hw_api->dcstat .....................................................................................................................554
    hw_api->dstanchors..............................................................................................................554
    hw_api->dstofsrcanchors......................................................................................................555
    hw_api_error->count ............................................................................................................555
    hw_api_error->reason...........................................................................................................555
    hw_api->find.........................................................................................................................555
    hw_api->ftstat.......................................................................................................................556




                                                                                                                                          xxiv
hwapi_hgcsp .........................................................................................................................556
      hw_api->hwstat ....................................................................................................................556
      hw_api->identify ..................................................................................................................556
      hw_api->info ........................................................................................................................557
      hw_api->insert......................................................................................................................557
      hw_api->insertanchor ...........................................................................................................558
      hw_api->insertcollection ......................................................................................................558
      hw_api->insertdocument ......................................................................................................558
      hw_api->link.........................................................................................................................559
      hw_api->lock........................................................................................................................559
      hw_api->move ......................................................................................................................559
      hw_api_content.....................................................................................................................559
      hw_api_object->assign .........................................................................................................560
      hw_api_object->attreditable .................................................................................................560
      hw_api_object->count ..........................................................................................................560
      hw_api_object->insert ..........................................................................................................560
      hw_api_object.......................................................................................................................560
      hw_api_object->remove .......................................................................................................561
      hw_api_object->title.............................................................................................................561
      hw_api_object->value ..........................................................................................................561
      hw_api->object .....................................................................................................................561
      hw_api->objectbyanchor ......................................................................................................563
      hw_api->parents ...................................................................................................................563
      hw_api_reason->description.................................................................................................563
      hw_api_reason->type ...........................................................................................................563
      hw_api->remove...................................................................................................................563
      hw_api->replace ...................................................................................................................564
      hw_api->setcommitedversion...............................................................................................565
      hw_api->srcanchors..............................................................................................................565
      hw_api->srcsofdst.................................................................................................................565
      hw_api->unlock....................................................................................................................565
      hw_api->user ........................................................................................................................566
      hw_api->userlist ...................................................................................................................566
XL. Funciones para ICAP - Internet Calendar Application Protocol ............................................567
      icap_close .............................................................................................................................568
      icap_create_calendar ............................................................................................................568
      icap_delete_calendar ............................................................................................................568
      icap_delete_event .................................................................................................................568
      icap_fetch_event ...................................................................................................................569
      icap_list_alarms....................................................................................................................569
      icap_list_events ....................................................................................................................570
      icap_open..............................................................................................................................570
      icap_rename_calendar ..........................................................................................................571
      icap_reopen...........................................................................................................................571
      icap_snooze ..........................................................................................................................571
      icap_store_event ...................................................................................................................571
XLI. iconv functions ......................................................................................................................573
      iconv_get_encoding..............................................................................................................574




                                                                                                                                            xxv
iconv_set_encoding ..............................................................................................................574
      iconv .....................................................................................................................................574
      ob_iconv_handler .................................................................................................................575
XLII. Funciones para imágenes .....................................................................................................576
      exif_imagetype .....................................................................................................................577
      exif_read_data ......................................................................................................................577
      exif_thumbnail......................................................................................................................580
      GetImageSize .......................................................................................................................580
      image_type_to_mime_type ..................................................................................................581
      image2wbmp ........................................................................................................................582
      imagealphablending..............................................................................................................582
      ImageArc ..............................................................................................................................583
      ImageChar ............................................................................................................................583
      ImageCharUp .......................................................................................................................583
      ImageColorAllocate .............................................................................................................583
      ImageColorAt .......................................................................................................................584
      ImageColorClosest ...............................................................................................................584
      imagecolorclosestalpha.........................................................................................................584
      imagecolorclosesthwb ..........................................................................................................585
      imagecolordeallocate............................................................................................................585
      ImageColorExact..................................................................................................................585
      imagecolorexactalpha ...........................................................................................................586
      ImageColorResolve ..............................................................................................................586
      imagecolorresolvealpha ........................................................................................................586
      ImageColorSet......................................................................................................................586
      ImageColorsForIndex...........................................................................................................587
      ImageColorsTotal .................................................................................................................587
      ImageColorTransparent ........................................................................................................587
      imagecopy.............................................................................................................................587
      imagecopymerge...................................................................................................................588
      imagecopymergegray............................................................................................................588
      imagecopyresampled ............................................................................................................589
      ImageCopyResized...............................................................................................................589
      ImageCreate..........................................................................................................................589
      imagecreatefromgd2 .............................................................................................................589
      imagecreatefromgd2part.......................................................................................................590
      imagecreatefromgd ...............................................................................................................590
      ImageCreateFromGif............................................................................................................590
      imagecreatefromjpeg ............................................................................................................591
      imagecreatefrompng .............................................................................................................592
      imagecreatefromstring..........................................................................................................593
      imagecreatefromwbmp .........................................................................................................593
      imagecreatefromxbm............................................................................................................594
      imagecreatefromxpm............................................................................................................594
      imagecreatetruecolor ............................................................................................................594
      ImageDashedLine.................................................................................................................594
      ImageDestroy .......................................................................................................................595
      imageellipse..........................................................................................................................595




                                                                                                                                             xxvi
ImageFill...............................................................................................................................595
imagefilledarc .......................................................................................................................595
imagefilledellipse..................................................................................................................596
ImageFilledPolygon .............................................................................................................596
ImageFilledRectangle...........................................................................................................596
ImageFillToBorder ...............................................................................................................597
ImageFontHeight ..................................................................................................................597
ImageFontWidth ...................................................................................................................597
imageftbbox..........................................................................................................................597
imagefttext ............................................................................................................................598
imagegammacorrect..............................................................................................................598
imagegd2 ..............................................................................................................................598
imagegd ................................................................................................................................599
ImageGif...............................................................................................................................599
ImageInterlace ......................................................................................................................599
imagejpeg .............................................................................................................................600
ImageLine.............................................................................................................................600
ImageLoadFont.....................................................................................................................600
imagepalettecopy ..................................................................................................................601
imagepng ..............................................................................................................................601
ImagePolygon.......................................................................................................................602
ImagePSBBox ......................................................................................................................602
ImagePSCopyFont................................................................................................................603
ImagePSEncodeFont ............................................................................................................603
imagepsextendfont................................................................................................................604
ImagePSFreeFont .................................................................................................................604
ImagePSLoadFont ................................................................................................................604
imagepsslantfont...................................................................................................................604
ImagePSText.........................................................................................................................605
ImageRectangle ....................................................................................................................605
imagesetbrush .......................................................................................................................606
ImageSetPixel.......................................................................................................................606
imagesetstyle ........................................................................................................................606
imagesetthickness .................................................................................................................607
imagesettile...........................................................................................................................608
ImageString ..........................................................................................................................608
ImageStringUp .....................................................................................................................608
ImageSX ...............................................................................................................................609
ImageSY ...............................................................................................................................609
imagetruecolortopalette ........................................................................................................609
ImageTTFBBox....................................................................................................................609
ImageTTFText ......................................................................................................................610
imagetypes............................................................................................................................611
imagewbmp ..........................................................................................................................612
iptcembed .............................................................................................................................612
iptcparse................................................................................................................................613
jpeg2wbmp ...........................................................................................................................613
png2wbmp ............................................................................................................................613




                                                                                                                                    xxvii
read_exif_data ......................................................................................................................614
XLIII. Funciones IMAP .................................................................................................................615
     imap_8bit..............................................................................................................................616
     imap_alerts ...........................................................................................................................616
     imap_append.........................................................................................................................616
     imap_base64 .........................................................................................................................616
     imap_binary..........................................................................................................................616
     imap_body ............................................................................................................................617
     imap_bodystruct ...................................................................................................................617
     imap_check...........................................................................................................................617
     imap_clearflag_full...............................................................................................................618
     imap_close............................................................................................................................618
     imap_createmailbox .............................................................................................................618
     imap_delete...........................................................................................................................619
     imap_deletemailbox .............................................................................................................619
     imap_errors...........................................................................................................................619
     imap_expunge.......................................................................................................................619
     imap_fetch_overview ...........................................................................................................620
     imap_fetchbody ....................................................................................................................621
     imap_fetchheader .................................................................................................................621
     imap_fetchstructure ..............................................................................................................622
     imap_get_quota ....................................................................................................................623
     imap_getmailboxes...............................................................................................................624
     imap_getsubscribed ..............................................................................................................625
     imap_header .........................................................................................................................625
     imap_headerinfo ...................................................................................................................627
     imap_headers........................................................................................................................629
     imap_last_error.....................................................................................................................629
     imap_listmailbox ..................................................................................................................629
     imap_listsubscribed ..............................................................................................................630
     imap_mail_compose.............................................................................................................630
     imap_mail_copy ...................................................................................................................631
     imap_mail_move ..................................................................................................................631
     imap_mail .............................................................................................................................631
     imap_mailboxmsginfo..........................................................................................................632
     imap_mime_header_decode .................................................................................................632
     imap_msgno .........................................................................................................................633
     imap_num_msg ....................................................................................................................633
     imap_num_recent .................................................................................................................633
     imap_open ............................................................................................................................633
     imap_ping .............................................................................................................................634
     imap_popen ..........................................................................................................................634
     imap_qprint...........................................................................................................................635
     imap_renamemailbox ...........................................................................................................635
     imap_reopen .........................................................................................................................635
     imap_rfc822_parse_adrlist ...................................................................................................636
     imap_rfc822_parse_headers .................................................................................................636
     imap_rfc822_write_address .................................................................................................636




                                                                                                                                       xxviii
imap_scanmailbox................................................................................................................636
    imap_search..........................................................................................................................637
    imap_set_quota.....................................................................................................................638
    imap_setacl ...........................................................................................................................638
    imap_setflag_full ..................................................................................................................639
    imap_sort ..............................................................................................................................639
    imap_status ...........................................................................................................................640
    imap_subscribe .....................................................................................................................640
    imap_thread ..........................................................................................................................641
    imap_uid ...............................................................................................................................641
    imap_undelete.......................................................................................................................641
    imap_unsubscribe .................................................................................................................641
    imap_utf7_decode ................................................................................................................642
    imap_utf7_encode ................................................................................................................642
    imap_utf8..............................................................................................................................642
XLIV. Funciones para Informix.....................................................................................................643
    ifx_affected_rows .................................................................................................................645
    ifx_blobinfile_mode .............................................................................................................645
    ifx_byteasvarchar..................................................................................................................645
    ifx_close ...............................................................................................................................646
    ifx_connect ...........................................................................................................................646
    ifx_copy_blob.......................................................................................................................647
    ifx_create_blob .....................................................................................................................647
    ifx_create_char .....................................................................................................................647
    ifx_do....................................................................................................................................647
    ifx_error................................................................................................................................648
    ifx_errormsg .........................................................................................................................648
    ifx_fetch_row........................................................................................................................649
    ifx_fieldproperties.................................................................................................................650
    ifx_fieldtypes ........................................................................................................................650
    ifx_free_blob ........................................................................................................................651
    ifx_free_char.........................................................................................................................651
    ifx_free_result.......................................................................................................................651
    ifx_get_blob..........................................................................................................................652
    ifx_get_char..........................................................................................................................652
    ifx_getsqlca...........................................................................................................................652
    ifx_htmltbl_result .................................................................................................................653
    ifx_nullformat.......................................................................................................................653
    ifx_num_fields......................................................................................................................654
    ifx_num_rows.......................................................................................................................654
    ifx_pconnect .........................................................................................................................654
    ifx_prepare............................................................................................................................654
    ifx_query...............................................................................................................................655
    ifx_textasvarchar ..................................................................................................................657
    ifx_update_blob....................................................................................................................657
    ifx_update_char ....................................................................................................................657
    ifxus_close_slob ...................................................................................................................657
    ifxus_create_slob..................................................................................................................657




                                                                                                                                           xxix
ifx_free_slob.........................................................................................................................658
     ifxus_open_slob....................................................................................................................658
     ifxus_read_slob.....................................................................................................................658
     ifxus_seek_slob ....................................................................................................................658
     ifxus_tell_slob ......................................................................................................................659
     ifxus_write_slob ...................................................................................................................659
XLV. Funciones InterBase .............................................................................................................660
     ibase_blob_add .....................................................................................................................661
     ibase_blob_cancel.................................................................................................................661
     ibase_blob_close...................................................................................................................661
     ibase_blob_create .................................................................................................................661
     ibase_blob_echo ...................................................................................................................662
     ibase_blob_get......................................................................................................................662
     ibase_blob_import ................................................................................................................662
     ibase_blob_info ....................................................................................................................663
     ibase_blob_open ...................................................................................................................663
     ibase_close............................................................................................................................663
     ibase_commit........................................................................................................................664
     ibase_connect .......................................................................................................................664
     ibase_errmsg.........................................................................................................................664
     ibase_execute........................................................................................................................664
     ibase_fetch_object ................................................................................................................664
     ibase_fetch_row....................................................................................................................665
     ibase_field_info ....................................................................................................................665
     ibase_free_query...................................................................................................................666
     ibase_free_result...................................................................................................................666
     ibase_num_fields ..................................................................................................................666
     ibase_pconnect .....................................................................................................................666
     ibase_prepare........................................................................................................................667
     ibase_query...........................................................................................................................667
     ibase_rollback.......................................................................................................................667
     ibase_timefmt .......................................................................................................................667
     ibase_trans ............................................................................................................................667
XLVI. Ingres II functions ...............................................................................................................668
     ingres_autocommit ...............................................................................................................669
     ingres_close ..........................................................................................................................669
     ingres_commit ......................................................................................................................669
     ingres_connect......................................................................................................................669
     ingres_fetch_array ................................................................................................................670
     ingres_fetch_object...............................................................................................................671
     ingres_fetch_row ..................................................................................................................672
     ingres_field_length ...............................................................................................................673
     ingres_field_name.................................................................................................................673
     ingres_field_nullable ............................................................................................................673
     ingres_field_precision...........................................................................................................673
     ingres_field_scale .................................................................................................................674
     ingres_field_type ..................................................................................................................674
     ingres_num_fields.................................................................................................................674




                                                                                                                                           xxx
ingres_num_rows..................................................................................................................675
    ingres_pconnect....................................................................................................................675
    ingres_query .........................................................................................................................675
    ingres_rollback .....................................................................................................................676
XLVII. IRC Gateway Functions.....................................................................................................678
    ircg_channel_mode...............................................................................................................679
    ircg_disconnect.....................................................................................................................679
    ircg_fetch_error_msg ...........................................................................................................679
    ircg_get_username................................................................................................................679
    ircg_html_encode .................................................................................................................680
    ircg_ignore_add....................................................................................................................680
    ircg_ignore_del.....................................................................................................................680
    ircg_is_conn_alive................................................................................................................680
    ircg_join................................................................................................................................681
    ircg_kick ...............................................................................................................................681
    ircg_lookup_format_messages .............................................................................................681
    ircg_msg ...............................................................................................................................681
    ircg_nick ...............................................................................................................................682
    ircg_nickname_escape..........................................................................................................682
    ircg_nickname_unescape......................................................................................................682
    ircg_notice ............................................................................................................................682
    ircg_part................................................................................................................................682
    ircg_pconnect .......................................................................................................................683
    ircg_register_format_messages ............................................................................................683
    ircg_set_current ....................................................................................................................685
    ircg_set_file ..........................................................................................................................685
    ircg_set_on_die.....................................................................................................................685
    ircg_topic..............................................................................................................................685
    ircg_whois ............................................................................................................................686
XLVIII. Java ...................................................................................................................................687
    java_last_exception_clear.....................................................................................................690
    java_last_exception_get........................................................................................................690
XLIX. Funciones LDAP ................................................................................................................691
    ldap_8859_to_t61 .................................................................................................................694
    ldap_add ...............................................................................................................................694
    ldap_bind ..............................................................................................................................695
    ldap_close .............................................................................................................................695
    ldap_compare .......................................................................................................................695
    ldap_connect.........................................................................................................................697
    ldap_count_entries................................................................................................................697
    ldap_delete............................................................................................................................697
    ldap_dn2ufn..........................................................................................................................697
    ldap_err2str...........................................................................................................................698
    ldap_errno.............................................................................................................................698
    ldap_error .............................................................................................................................699
    ldap_explode_dn...................................................................................................................699
    ldap_first_attribute................................................................................................................699
    ldap_first_entry.....................................................................................................................700




                                                                                                                                             xxxi
ldap_first_reference ..............................................................................................................700
      ldap_free_result ....................................................................................................................700
      ldap_get_attributes................................................................................................................701
      ldap_get_dn ..........................................................................................................................702
      ldap_get_entries....................................................................................................................702
      ldap_get_option ....................................................................................................................703
      ldap_get_values_len .............................................................................................................703
      ldap_get_values ....................................................................................................................704
      ldap_list ................................................................................................................................705
      ldap_mod_add ......................................................................................................................705
      ldap_mod_del .......................................................................................................................706
      ldap_mod_replace.................................................................................................................706
      ldap_modify..........................................................................................................................706
      ldap_next_attribute ...............................................................................................................707
      ldap_next_entry ....................................................................................................................707
      ldap_next_reference..............................................................................................................707
      ldap_parse_reference............................................................................................................707
      ldap_parse_result..................................................................................................................708
      ldap_read ..............................................................................................................................708
      ldap_rename .........................................................................................................................708
      ldap_search ...........................................................................................................................709
      ldap_set_option.....................................................................................................................710
      ldap_set_rebind_proc ...........................................................................................................711
      ldap_sort ...............................................................................................................................711
      ldap_start_tls.........................................................................................................................712
      ldap_t61_to_8859 .................................................................................................................712
      ldap_unbind ..........................................................................................................................712
L. Funciones de Correo ..................................................................................................................713
      ezmlm_hash..........................................................................................................................714
      mail .......................................................................................................................................714
LI. mailparse functions ..................................................................................................................716
      mailparse_determine_best_xfer_encoding ...........................................................................717
      mailparse_msg_create ..........................................................................................................717
      mailparse_msg_extract_part_file..........................................................................................717
      mailparse_msg_extract_part.................................................................................................718
      mailparse_msg_free..............................................................................................................718
      mailparse_msg_get_part_data ..............................................................................................719
      mailparse_msg_get_part.......................................................................................................719
      mailparse_msg_get_structure ...............................................................................................720
      mailparse_msg_parse_file ....................................................................................................720
      mailparse_msg_parse ...........................................................................................................721
      mailparse_rfc822_parse_addresses ......................................................................................721
      mailparse_stream_encode.....................................................................................................722
      mailparse_uudecode_all .......................................................................................................722
LII. Funciones matemáticas ...........................................................................................................724
      abs.........................................................................................................................................725
      acos .......................................................................................................................................725
      acosh .....................................................................................................................................725




                                                                                                                                             xxxii
asin........................................................................................................................................725
      asinh......................................................................................................................................725
      atan2 .....................................................................................................................................726
      atan .......................................................................................................................................726
      atanh .....................................................................................................................................726
      base_convert .........................................................................................................................727
      BinDec..................................................................................................................................727
      ceil ........................................................................................................................................727
      cos.........................................................................................................................................728
      cosh.......................................................................................................................................728
      DecBin..................................................................................................................................728
      DecHex .................................................................................................................................728
      DecOct..................................................................................................................................728
      deg2rad .................................................................................................................................729
      exp ........................................................................................................................................729
      expm1 ...................................................................................................................................729
      floor.......................................................................................................................................730
      getrandmax ...........................................................................................................................730
      HexDec .................................................................................................................................730
      hypot .....................................................................................................................................730
      is_finite .................................................................................................................................731
      is_infinite ..............................................................................................................................731
      is_nan....................................................................................................................................731
      lcg_value...............................................................................................................................731
      log10 .....................................................................................................................................732
      log1p .....................................................................................................................................732
      log .........................................................................................................................................732
      max .......................................................................................................................................733
      min........................................................................................................................................733
      mt_getrandmax .....................................................................................................................733
      mt_rand.................................................................................................................................733
      mt_srand ...............................................................................................................................734
      number_format .....................................................................................................................734
      OctDec..................................................................................................................................735
      pi ...........................................................................................................................................735
      pow .......................................................................................................................................735
      rad2deg .................................................................................................................................735
      rand .......................................................................................................................................736
      round.....................................................................................................................................736
      sin .........................................................................................................................................736
      sinh .......................................................................................................................................736
      sqrt ........................................................................................................................................737
      srand .....................................................................................................................................737
      tan .........................................................................................................................................737
      tanh .......................................................................................................................................737
LIII. Multi-Byte String Functions ..................................................................................................739
      mb_convert_encoding...........................................................................................................747
      mb_convert_kana..................................................................................................................747




                                                                                                                                              xxxiii
mb_convert_variables...........................................................................................................748
     mb_decode_mimeheader......................................................................................................749
     mb_decode_numericentity ...................................................................................................749
     mb_detect_encoding.............................................................................................................750
     mb_detect_order ...................................................................................................................750
     mb_encode_mimeheader......................................................................................................752
     mb_encode_numericentity ...................................................................................................752
     mb_ereg_match ....................................................................................................................753
     mb_ereg_replace...................................................................................................................754
     mb_ereg_search_getpos........................................................................................................755
     mb_ereg_search_getregs ......................................................................................................755
     mb_ereg_search_init.............................................................................................................756
     mb_ereg_search_pos ............................................................................................................756
     mb_ereg_search_regs ...........................................................................................................757
     mb_ereg_search_setpos ........................................................................................................758
     mb_ereg_search ....................................................................................................................758
     mb_ereg ................................................................................................................................759
     mb_eregi_replace..................................................................................................................759
     mb_eregi ...............................................................................................................................760
     mb_get_info..........................................................................................................................760
     mb_http_input.......................................................................................................................761
     mb_http_output.....................................................................................................................761
     mb_internal_encoding ..........................................................................................................761
     mb_language.........................................................................................................................762
     mb_output_handler...............................................................................................................762
     mb_parse_str.........................................................................................................................763
     mb_preferred_mime_name...................................................................................................763
     mb_regex_encoding..............................................................................................................764
     mb_send_mail.......................................................................................................................764
     mb_split ................................................................................................................................765
     mb_strcut ..............................................................................................................................766
     mb_strimwidth......................................................................................................................766
     mb_strlen ..............................................................................................................................766
     mb_strpos .............................................................................................................................767
     mb_strrpos ............................................................................................................................767
     mb_strwidth..........................................................................................................................767
     mb_substitute_character .......................................................................................................768
     mb_substr .............................................................................................................................769
LIV. MCAL functions....................................................................................................................770
     mcal_append_event ..............................................................................................................771
     mcal_close ............................................................................................................................771
     mcal_create_calendar ...........................................................................................................771
     mcal_date_compare..............................................................................................................771
     mcal_date_valid....................................................................................................................771
     mcal_day_of_week...............................................................................................................771
     mcal_day_of_year ................................................................................................................772
     mcal_days_in_month............................................................................................................772
     mcal_delete_calendar ...........................................................................................................772




                                                                                                                                         xxxiv
mcal_delete_event ................................................................................................................772
     mcal_event_add_attribute.....................................................................................................772
     mcal_event_init ....................................................................................................................773
     mcal_event_set_alarm ..........................................................................................................773
     mcal_event_set_category......................................................................................................773
     mcal_event_set_class............................................................................................................773
     mcal_event_set_description..................................................................................................774
     mcal_event_set_end..............................................................................................................774
     mcal_event_set_recur_daily .................................................................................................774
     mcal_event_set_recur_monthly_mday .................................................................................774
     mcal_event_set_recur_monthly_wday .................................................................................775
     mcal_event_set_recur_none .................................................................................................775
     mcal_event_set_recur_weekly..............................................................................................775
     mcal_event_set_recur_yearly ...............................................................................................775
     mcal_event_set_start ............................................................................................................775
     mcal_event_set_title .............................................................................................................776
     mcal_expunge.......................................................................................................................776
     mcal_fetch_current_stream_event........................................................................................776
     mcal_fetch_event..................................................................................................................777
     mcal_is_leap_year ................................................................................................................778
     mcal_list_alarms...................................................................................................................778
     mcal_list_events ...................................................................................................................778
     mcal_next_recurrence...........................................................................................................779
     mcal_open.............................................................................................................................779
     mcal_popen...........................................................................................................................779
     mcal_rename_calendar .........................................................................................................779
     mcal_reopen .........................................................................................................................780
     mcal_snooze .........................................................................................................................780
     mcal_store_event ..................................................................................................................780
     mcal_time_valid ...................................................................................................................780
     mcal_week_of_year..............................................................................................................781
LV. Funciones Criptográficas.........................................................................................................782
     mcrypt_cbc ...........................................................................................................................784
     mcrypt_cfb............................................................................................................................784
     mcrypt_create_iv ..................................................................................................................784
     mcrypt_decrypt.....................................................................................................................785
     mcrypt_ecb ...........................................................................................................................785
     mcrypt_enc_get_algorithms_name.......................................................................................786
     mcrypt_enc_get_block_size .................................................................................................786
     mcrypt_enc_get_iv_size .......................................................................................................786
     mcrypt_enc_get_key_size ....................................................................................................787
     mcrypt_enc_get_modes_name .............................................................................................787
     mcrypt_enc_get_supported_key_sizes .................................................................................787
     mcrypt_enc_is_block_algorithm_mode ...............................................................................788
     mcrypt_enc_is_block_algorithm ..........................................................................................788
     mcrypt_enc_is_block_mode.................................................................................................789
     mcrypt_enc_self_test............................................................................................................789
     mcrypt_encrypt.....................................................................................................................789




                                                                                                                                       xxxv
mcrypt_generic_deinit..........................................................................................................790
      mcrypt_generic_end .............................................................................................................790
      mcrypt_generic_init..............................................................................................................791
      mcrypt_generic .....................................................................................................................791
      mcrypt_get_block_size.........................................................................................................791
      mcrypt_get_cipher_name .....................................................................................................792
      mcrypt_get_iv_size...............................................................................................................792
      mcrypt_get_key_size ............................................................................................................793
      mcrypt_list_algorithms.........................................................................................................793
      mcrypt_list_modes ...............................................................................................................794
      mcrypt_module_close...........................................................................................................794
      mcrypt_module_get_algo_block_size..................................................................................795
      mcrypt_module_get_algo_key_size .....................................................................................795
      mcrypt_module_get_supported_key_sizes...........................................................................795
      mcrypt_module_is_block_algorithm_mode.........................................................................795
      mcrypt_module_is_block_algorithm....................................................................................795
      mcrypt_module_is_block_mode ..........................................................................................796
      mcrypt_module_open ...........................................................................................................796
      mcrypt_module_self_test .....................................................................................................798
      mcrypt_ofb ...........................................................................................................................798
      mdecrypt_generic .................................................................................................................798
LVI. Funciones Hash......................................................................................................................800
      mhash_count.........................................................................................................................802
      mhash_get_block_size..........................................................................................................802
      mhash_get_hash_name.........................................................................................................802
      mhash_keygen_s2k...............................................................................................................803
      mhash....................................................................................................................................803
LVII. Mimetype Functions.............................................................................................................804
      mime_content_type ..............................................................................................................805
LVIII. Funciones de Microsoft SQL Server...................................................................................806
      mssql_bind............................................................................................................................807
      mssql_close...........................................................................................................................807
      mssql_connect ......................................................................................................................807
      mssql_data_seek ...................................................................................................................808
      mssql_execute.......................................................................................................................808
      mssql_fetch_array.................................................................................................................808
      mssql_fetch_assoc ................................................................................................................809
      mssql_fetch_batch ................................................................................................................809
      mssql_fetch_field..................................................................................................................809
      mssql_fetch_object ...............................................................................................................810
      mssql_fetch_row...................................................................................................................810
      mssql_field_length................................................................................................................810
      mssql_field_name .................................................................................................................811
      mssql_field_seek...................................................................................................................811
      mssql_field_type...................................................................................................................811
      mssql_free_result..................................................................................................................811
      mssql_get_last_message.......................................................................................................811
      mssql_guid_string.................................................................................................................812




                                                                                                                                          xxxvi
mssql_init .............................................................................................................................812
     mssql_min_error_severity ....................................................................................................812
     mssql_min_message_severity ..............................................................................................812
     mssql_next_result .................................................................................................................813
     mssql_num_fields .................................................................................................................813
     mssql_num_rows ..................................................................................................................813
     mssql_pconnect ....................................................................................................................814
     mssql_query..........................................................................................................................814
     mssql_result..........................................................................................................................814
     mssql_rows_affected ............................................................................................................815
     mssql_select_db....................................................................................................................815
LIX. Ming functions for Flash .......................................................................................................817
     ming_setcubicthreshold........................................................................................................819
     ming_setscale .......................................................................................................................819
     ming_useswfversion .............................................................................................................819
     SWFAction ...........................................................................................................................819
     SWFBitmap->getHeight.......................................................................................................830
     SWFBitmap->getWidth........................................................................................................830
     SWFBitmap ..........................................................................................................................831
     swfbutton_keypress ..............................................................................................................833
     SWFbutton->addAction .......................................................................................................833
     SWFbutton->addShape.........................................................................................................833
     SWFbutton->setAction.........................................................................................................834
     SWFbutton->setdown ...........................................................................................................834
     SWFbutton->setHit...............................................................................................................835
     SWFbutton->setOver............................................................................................................835
     SWFbutton->setUp...............................................................................................................835
     SWFbutton............................................................................................................................836
     SWFDisplayItem->addColor................................................................................................839
     SWFDisplayItem->move......................................................................................................839
     SWFDisplayItem->moveTo..................................................................................................840
     SWFDisplayItem->multColor ..............................................................................................840
     SWFDisplayItem->remove...................................................................................................841
     SWFDisplayItem->Rotate ....................................................................................................842
     SWFDisplayItem->rotateTo .................................................................................................842
     SWFDisplayItem->scale.......................................................................................................844
     SWFDisplayItem->scaleTo ..................................................................................................845
     SWFDisplayItem->setDepth ................................................................................................845
     SWFDisplayItem->setName.................................................................................................845
     SWFDisplayItem->setRatio .................................................................................................846
     SWFDisplayItem->skewX....................................................................................................848
     SWFDisplayItem->skewXTo ...............................................................................................848
     SWFDisplayItem->skewY....................................................................................................848
     SWFDisplayItem->skewYTo ...............................................................................................849
     SWFDisplayItem ..................................................................................................................849
     SWFFill->moveTo................................................................................................................850
     SWFFill->rotateTo ...............................................................................................................850
     SWFFill->scaleTo.................................................................................................................851




                                                                                                                                       xxxvii
SWFFill->skewXTo..............................................................................................................851
SWFFill->skewYTo..............................................................................................................851
SWFFill ................................................................................................................................852
swffont->getwidth ................................................................................................................852
SWFFont...............................................................................................................................852
SWFGradient->addEntry......................................................................................................853
SWFGradient........................................................................................................................854
SWFMorph->getshape1 .......................................................................................................855
SWFMorph->getshape2 .......................................................................................................855
SWFMorph ...........................................................................................................................856
SWFMovie->add ..................................................................................................................857
SWFMovie->nextframe........................................................................................................858
SWFMovie->output..............................................................................................................858
SWFMovie->remove ............................................................................................................859
SWFMovie->save .................................................................................................................859
SWFMovie->setbackground.................................................................................................859
SWFMovie->setdimension...................................................................................................860
SWFMovie->setframes.........................................................................................................860
SWFMovie->setrate .............................................................................................................860
SWFMovie->streammp3 ......................................................................................................861
SWFMovie ...........................................................................................................................862
SWFShape->addFill .............................................................................................................862
SWFShape->drawCurve.......................................................................................................864
SWFShape->drawCurveTo...................................................................................................865
SWFShape->drawLine .........................................................................................................865
SWFShape->drawLineTo .....................................................................................................866
SWFShape->movePen..........................................................................................................866
SWFShape->movePenTo......................................................................................................867
SWFShape->setLeftFill........................................................................................................867
SWFShape->setLine.............................................................................................................868
SWFShape->setRightFill......................................................................................................869
SWFShape ............................................................................................................................870
SWFSprite->add ...................................................................................................................871
SWFSprite->nextframe.........................................................................................................871
SWFSprite->remove.............................................................................................................872
SWFSprite->setframes .........................................................................................................872
SWFSprite ............................................................................................................................872
SWFText->addString............................................................................................................874
SWFText->getWidth.............................................................................................................874
SWFText->moveTo ..............................................................................................................874
SWFText->setColor..............................................................................................................875
SWFText->setFont................................................................................................................875
SWFText->setHeight ............................................................................................................876
SWFText->setSpacing ..........................................................................................................876
SWFText...............................................................................................................................876
SWFTextField->addstring ....................................................................................................877
SWFTextField->align ...........................................................................................................878
SWFTextField->setbounds ...................................................................................................878




                                                                                                                                 xxxviii
SWFTextField->setcolor ......................................................................................................878
     SWFTextField->setFont .......................................................................................................879
     SWFTextField->setHeight....................................................................................................879
     SWFTextField->setindentation.............................................................................................880
     SWFTextField->setLeftMargin ............................................................................................880
     SWFTextField->setLineSpacing ..........................................................................................880
     SWFTextField->setMargins .................................................................................................881
     SWFTextField->setname ......................................................................................................881
     SWFTextField->setrightMargin ...........................................................................................881
     SWFTextField.......................................................................................................................882
LX. Miscelánea de funciones.........................................................................................................884
     connection_aborted...............................................................................................................885
     connection_status .................................................................................................................885
     connection_timeout ..............................................................................................................885
     constant.................................................................................................................................885
     define ....................................................................................................................................886
     defined ..................................................................................................................................886
     die .........................................................................................................................................887
     eval........................................................................................................................................887
     exit ........................................................................................................................................888
     get_browser ..........................................................................................................................888
     highlight_file.........................................................................................................................890
     highlight_string.....................................................................................................................891
     ignore_user_abort .................................................................................................................892
     leak .......................................................................................................................................892
     pack.......................................................................................................................................892
     show_source .........................................................................................................................893
     sleep......................................................................................................................................894
     uniqid....................................................................................................................................894
     unpack...................................................................................................................................895
     usleep....................................................................................................................................895
LXI. mnoGoSearch Functions .......................................................................................................896
     udm_add_search_limit .........................................................................................................897
     udm_alloc_agent...................................................................................................................897
     udm_api_version ..................................................................................................................898
     udm_cat_list .........................................................................................................................899
     udm_cat_path .......................................................................................................................900
     udm_check_charset ..............................................................................................................901
     udm_check_stored................................................................................................................901
     udm_clear_search_limits......................................................................................................901
     udm_close_stored .................................................................................................................901
     udm_crc32 ............................................................................................................................902
     udm_errno.............................................................................................................................902
     udm_error .............................................................................................................................902
     udm_find...............................................................................................................................903
     udm_free_agent ....................................................................................................................903
     udm_free_ispell_data ...........................................................................................................903
     udm_free_res ........................................................................................................................904




                                                                                                                                             xxxix
udm_get_doc_count .............................................................................................................904
      udm_get_res_field ................................................................................................................904
      udm_get_res_param .............................................................................................................905
      udm_load_ispell_data...........................................................................................................905
      udm_open_stored .................................................................................................................908
      udm_set_agent_param..........................................................................................................908
LXII. funciones mSQL ..................................................................................................................912
      msql_affected_rows..............................................................................................................913
      msql_close ............................................................................................................................913
      msql_connect........................................................................................................................913
      msql_create_db.....................................................................................................................913
      msql_createdb.......................................................................................................................914
      msql_data_seek.....................................................................................................................914
      msql_dbname........................................................................................................................914
      msql_drop_db .......................................................................................................................914
      msql_dropdb .........................................................................................................................915
      msql_error.............................................................................................................................915
      msql_fetch_array ..................................................................................................................915
      msql_fetch_field ...................................................................................................................916
      msql_fetch_object.................................................................................................................916
      msql_fetch_row ....................................................................................................................917
      msql_field_seek ....................................................................................................................917
      msql_fieldflags......................................................................................................................917
      msql_fieldlen ........................................................................................................................917
      msql_fieldname.....................................................................................................................918
      msql_fieldtable .....................................................................................................................918
      msql_fieldtype ......................................................................................................................918
      msql_free_result ...................................................................................................................918
      msql_freeresult .....................................................................................................................918
      msql_list_dbs........................................................................................................................919
      msql_list_fields.....................................................................................................................919
      msql_list_tables ....................................................................................................................919
      msql_listdbs..........................................................................................................................919
      msql_listfields.......................................................................................................................920
      msql_listtables ......................................................................................................................920
      msql_num_fields...................................................................................................................920
      msql_num_rows....................................................................................................................920
      msql_numfields.....................................................................................................................920
      msql_numrows......................................................................................................................921
      msql_pconnect......................................................................................................................921
      msql_query ...........................................................................................................................921
      msql_regcase ........................................................................................................................922
      msql_result ...........................................................................................................................922
      msql_select_db .....................................................................................................................922
      msql_selectdb .......................................................................................................................923
      msql_tablename....................................................................................................................923
      msql ......................................................................................................................................923
LXIII. Funciones MySQL..............................................................................................................925




                                                                                                                                                 xl
mysql_affected_rows............................................................................................................926
mysql_change_user ..............................................................................................................926
mysql_character_set_name...................................................................................................926
mysql_close ..........................................................................................................................927
mysql_connect......................................................................................................................927
mysql_create_db...................................................................................................................928
mysql_data_seek...................................................................................................................929
mysql_db_name....................................................................................................................930
mysql_db_query ...................................................................................................................930
mysql_drop_db .....................................................................................................................931
mysql_errno..........................................................................................................................931
mysql_error...........................................................................................................................931
mysql_escape_string.............................................................................................................932
mysql_fetch_array ................................................................................................................933
mysql_fetch_assoc................................................................................................................934
mysql_fetch_field .................................................................................................................934
mysql_fetch_lengths.............................................................................................................935
mysql_fetch_object...............................................................................................................935
mysql_fetch_row ..................................................................................................................936
mysql_field_flags..................................................................................................................936
mysql_field_len ....................................................................................................................937
mysql_field_name.................................................................................................................937
mysql_field_seek ..................................................................................................................937
mysql_field_table .................................................................................................................937
mysql_field_type ..................................................................................................................938
mysql_free_result .................................................................................................................938
mysql_get_client_info ..........................................................................................................939
mysql_get_host_info ............................................................................................................939
mysql_get_proto_info...........................................................................................................940
mysql_get_server_info .........................................................................................................940
mysql_info............................................................................................................................941
mysql_insert_id ....................................................................................................................942
mysql_list_dbs......................................................................................................................942
mysql_list_fields...................................................................................................................942
mysql_list_processes ............................................................................................................942
mysql_list_tables ..................................................................................................................943
mysql_num_fields.................................................................................................................943
mysql_num_rows..................................................................................................................944
mysql_pconnect....................................................................................................................944
mysql_ping ...........................................................................................................................945
mysql_query .........................................................................................................................945
mysql_real_escape_string.....................................................................................................946
mysql_result .........................................................................................................................947
mysql_select_db ...................................................................................................................947
mysql_stat.............................................................................................................................947
mysql_tablename..................................................................................................................948
mysql_thread_id ...................................................................................................................949
mysql_unbuffered_query......................................................................................................949




                                                                                                                                      xli
LXIV. Mohawk Software session handler functions .....................................................................951
    msession_connect .................................................................................................................952
    msession_count.....................................................................................................................952
    msession_create....................................................................................................................952
    msession_destroy..................................................................................................................952
    msession_disconnect ............................................................................................................953
    msession_find .......................................................................................................................953
    msession_get_array ..............................................................................................................953
    msession_get.........................................................................................................................953
    msession_getdata..................................................................................................................954
    msession_inc.........................................................................................................................954
    msession_list.........................................................................................................................954
    msession_listvar....................................................................................................................955
    msession_lock.......................................................................................................................955
    msession_plugin ...................................................................................................................955
    msession_randstr ..................................................................................................................955
    msession_set_array...............................................................................................................956
    msession_set .........................................................................................................................956
    msession_setdata ..................................................................................................................956
    msession_timeout .................................................................................................................957
    msession_uniq ......................................................................................................................957
    msession_unlock...................................................................................................................957
LXV. muscat functions ..................................................................................................................958
    muscat_close.........................................................................................................................959
    muscat_get............................................................................................................................959
    muscat_give ..........................................................................................................................960
    muscat_setup_net .................................................................................................................960
    muscat_setup ........................................................................................................................960
LXVI. Funciones de Red ...............................................................................................................962
    checkdnsrr.............................................................................................................................963
    closelog.................................................................................................................................963
    debugger_off.........................................................................................................................963
    debugger_on .........................................................................................................................963
    define_syslog_variables........................................................................................................963
    fsockopen..............................................................................................................................964
    gethostbyaddr .......................................................................................................................964
    gethostbyname......................................................................................................................965
    gethostbynamel.....................................................................................................................965
    getmxrr .................................................................................................................................965
    getprotobyname ....................................................................................................................966
    getprotobynumber.................................................................................................................966
    getservbyname......................................................................................................................966
    getservbyport ........................................................................................................................966
    ip2long..................................................................................................................................966
    long2ip..................................................................................................................................967
    openlog .................................................................................................................................967
    pfsockopen............................................................................................................................968
    socket_get_status ..................................................................................................................968




                                                                                                                                           xlii
socket_set_blocking .............................................................................................................968
    socket_set_timeout ...............................................................................................................969
    syslog....................................................................................................................................969
LXVII. Ncurses terminal screen control functions ........................................................................971
    ncurses_addch.......................................................................................................................976
    ncurses_addchnstr.................................................................................................................976
    ncurses_addchstr...................................................................................................................976
    ncurses_addnstr ....................................................................................................................977
    ncurses_addstr ......................................................................................................................977
    ncurses_assume_default_colors ...........................................................................................977
    ncurses_attroff ......................................................................................................................978
    ncurses_attron.......................................................................................................................978
    ncurses_attrset ......................................................................................................................978
    ncurses_baudrate ..................................................................................................................979
    ncurses_beep.........................................................................................................................979
    ncurses_bkgd ........................................................................................................................979
    ncurses_bkgdset....................................................................................................................980
    ncurses_border......................................................................................................................980
    ncurses_can_change_color ...................................................................................................980
    ncurses_cbreak .....................................................................................................................981
    ncurses_clear ........................................................................................................................981
    ncurses_clrtobot....................................................................................................................982
    ncurses_clrtoeol....................................................................................................................982
    ncurses_color_set .................................................................................................................982
    ncurses_curs_set ...................................................................................................................983
    ncurses_def_prog_mode.......................................................................................................983
    ncurses_def_shell_mode.......................................................................................................984
    ncurses_define_key...............................................................................................................984
    ncurses_delay_output ...........................................................................................................984
    ncurses_delch .......................................................................................................................985
    ncurses_deleteln ...................................................................................................................985
    ncurses_delwin .....................................................................................................................986
    ncurses_doupdate .................................................................................................................986
    ncurses_echo.........................................................................................................................986
    ncurses_echochar..................................................................................................................987
    ncurses_end ..........................................................................................................................987
    ncurses_erase........................................................................................................................987
    ncurses_erasechar .................................................................................................................988
    ncurses_filter.........................................................................................................................988
    ncurses_flash.........................................................................................................................988
    ncurses_flushinp ...................................................................................................................989
    ncurses_getch .......................................................................................................................989
    ncurses_getmouse.................................................................................................................990
    ncurses_halfdelay .................................................................................................................991
    ncurses_has_colors ...............................................................................................................991
    ncurses_has_ic......................................................................................................................992
    ncurses_has_il.......................................................................................................................992
    ncurses_has_key ...................................................................................................................992




                                                                                                                                           xliii
ncurses_hline ........................................................................................................................993
ncurses_inch .........................................................................................................................993
ncurses_init_color.................................................................................................................993
ncurses_init_pair...................................................................................................................994
ncurses_init...........................................................................................................................994
ncurses_insch........................................................................................................................994
ncurses_insdelln ...................................................................................................................995
ncurses_insertln ....................................................................................................................995
ncurses_insstr .......................................................................................................................996
ncurses_instr .........................................................................................................................996
ncurses_isendwin..................................................................................................................996
ncurses_keyok ......................................................................................................................997
ncurses_killchar....................................................................................................................997
ncurses_longname ................................................................................................................997
ncurses_mouseinterval..........................................................................................................998
ncurses_mousemask .............................................................................................................998
ncurses_move .....................................................................................................................1000
ncurses_mvaddch................................................................................................................1000
ncurses_mvaddchnstr..........................................................................................................1000
ncurses_mvaddchstr............................................................................................................1001
ncurses_mvaddnstr .............................................................................................................1001
ncurses_mvaddstr ...............................................................................................................1002
ncurses_mvcur....................................................................................................................1002
ncurses_mvdelch ................................................................................................................1002
ncurses_mvgetch ................................................................................................................1003
ncurses_mvhline .................................................................................................................1003
ncurses_mvinch ..................................................................................................................1003
ncurses_mvvline .................................................................................................................1004
ncurses_mvwaddstr ............................................................................................................1004
ncurses_napms....................................................................................................................1004
ncurses_newwin..................................................................................................................1005
ncurses_nl ...........................................................................................................................1005
ncurses_nocbreak ...............................................................................................................1005
ncurses_noecho...................................................................................................................1006
ncurses_nonl .......................................................................................................................1006
ncurses_noqiflush ...............................................................................................................1006
ncurses_noraw ....................................................................................................................1007
ncurses_putp .......................................................................................................................1007
ncurses_qiflush ...................................................................................................................1007
ncurses_raw ........................................................................................................................1008
ncurses_refresh ...................................................................................................................1008
ncurses_resetty ...................................................................................................................1009
ncurses_savetty ...................................................................................................................1009
ncurses_scr_dump ..............................................................................................................1009
ncurses_scr_init ..................................................................................................................1010
ncurses_scr_restore.............................................................................................................1010
ncurses_scr_set ...................................................................................................................1011
ncurses_scrl ........................................................................................................................1011




                                                                                                                                    xliv
ncurses_slk_attr ..................................................................................................................1011
    ncurses_slk_attroff..............................................................................................................1012
    ncurses_slk_attron ..............................................................................................................1012
    ncurses_slk_attrset..............................................................................................................1012
    ncurses_slk_clear................................................................................................................1012
    ncurses_slk_color ...............................................................................................................1013
    ncurses_slk_init ..................................................................................................................1013
    ncurses_slk_noutrefresh .....................................................................................................1014
    ncurses_slk_refresh ............................................................................................................1014
    ncurses_slk_restore.............................................................................................................1014
    ncurses_slk_touch...............................................................................................................1015
    ncurses_standend................................................................................................................1015
    ncurses_standout.................................................................................................................1015
    ncurses_start_color .............................................................................................................1016
    ncurses_termattrs................................................................................................................1016
    ncurses_termname ..............................................................................................................1017
    ncurses_timeout..................................................................................................................1017
    ncurses_typeahead..............................................................................................................1017
    ncurses_ungetch .................................................................................................................1018
    ncurses_ungetmouse...........................................................................................................1018
    ncurses_use_default_colors ................................................................................................1019
    ncurses_use_env .................................................................................................................1019
    ncurses_use_extended_names ............................................................................................1019
    ncurses_vidattr....................................................................................................................1020
    ncurses_vline ......................................................................................................................1020
    ncurses_wrefresh ................................................................................................................1020
LXVIII. Lotus Notes functions ....................................................................................................1022
    notes_body..........................................................................................................................1023
    notes_copy_db ....................................................................................................................1023
    notes_create_db ..................................................................................................................1023
    notes_create_note ...............................................................................................................1024
    notes_drop_db ....................................................................................................................1024
    notes_find_note...................................................................................................................1025
    notes_header_info...............................................................................................................1025
    notes_list_msgs...................................................................................................................1026
    notes_mark_read.................................................................................................................1026
    notes_mark_unread.............................................................................................................1027
    notes_nav_create ................................................................................................................1027
    notes_search .......................................................................................................................1028
    notes_unread.......................................................................................................................1028
    notes_version ......................................................................................................................1029
LXIX. ODBC functions ...............................................................................................................1030
    odbc_autocommit ...............................................................................................................1031
    odbc_binmode ....................................................................................................................1031
    odbc_close_all ....................................................................................................................1032
    odbc_close ..........................................................................................................................1032
    odbc_columnprivileges.......................................................................................................1032
    odbc_columns.....................................................................................................................1033




                                                                                                                                        xlv
odbc_commit ......................................................................................................................1034
    odbc_connect......................................................................................................................1034
    odbc_cursor ........................................................................................................................1035
    odbc_do ..............................................................................................................................1035
    odbc_error...........................................................................................................................1035
    odbc_errormsg....................................................................................................................1035
    odbc_exec ...........................................................................................................................1035
    odbc_execute ......................................................................................................................1036
    odbc_fetch_array ................................................................................................................1036
    odbc_fetch_into ..................................................................................................................1036
    odbc_fetch_object...............................................................................................................1037
    odbc_fetch_row ..................................................................................................................1037
    odbc_field_len ....................................................................................................................1037
    odbc_field_name.................................................................................................................1038
    odbc_field_num ..................................................................................................................1038
    odbc_field_precision...........................................................................................................1038
    odbc_field_scale .................................................................................................................1038
    odbc_field_type ..................................................................................................................1038
    odbc_foreignkeys................................................................................................................1039
    odbc_free_result .................................................................................................................1039
    odbc_gettypeinfo ................................................................................................................1040
    odbc_longreadlen ...............................................................................................................1041
    odbc_next_result.................................................................................................................1041
    odbc_num_fields.................................................................................................................1041
    odbc_num_rows..................................................................................................................1042
    odbc_pconnect....................................................................................................................1042
    odbc_prepare ......................................................................................................................1042
    odbc_primarykeys ..............................................................................................................1042
    odbc_procedurecolumns.....................................................................................................1043
    odbc_procedures.................................................................................................................1044
    odbc_result_all ...................................................................................................................1044
    odbc_result .........................................................................................................................1045
    odbc_rollback .....................................................................................................................1045
    odbc_setoption....................................................................................................................1045
    odbc_specialcolumns..........................................................................................................1046
    odbc_statistics.....................................................................................................................1047
    odbc_tableprivileges ...........................................................................................................1048
    odbc_tables .........................................................................................................................1048
LXX. Funciones de Oracle 8........................................................................................................1050
    OCIBindByName ...............................................................................................................1051
    OCICancel ..........................................................................................................................1052
    OCICollAppend..................................................................................................................1052
    OCICollAssign ...................................................................................................................1052
    OCICollAssignElem...........................................................................................................1053
    OCICollGetElem ................................................................................................................1053
    OCICollMax .......................................................................................................................1053
    OCICollSize .......................................................................................................................1054
    OCICollTrim ......................................................................................................................1054




                                                                                                                                        xlvi
OCIColumnIsNULL...........................................................................................................1054
    OCIColumnName...............................................................................................................1055
    OCIColumnPrecision .........................................................................................................1056
    OCIColumnScale................................................................................................................1056
    OCIColumnSize .................................................................................................................1056
    OCIColumnType ................................................................................................................1057
    OCIColumnTypeRaw .........................................................................................................1058
    OCICommit ........................................................................................................................1058
    OCIDefineByName ............................................................................................................1059
    OCIError.............................................................................................................................1059
    OCIExecute ........................................................................................................................1060
    OCIFetch ............................................................................................................................1060
    OCIFetchInto......................................................................................................................1060
    OCIFetchStatement ............................................................................................................1061
    OCIFreeCollection .............................................................................................................1062
    OCIFreeCursor ...................................................................................................................1062
    OCIFreeDesc ......................................................................................................................1062
    OCIFreeStatement ..............................................................................................................1062
    OCIInternalDebug ..............................................................................................................1062
    OCILoadLob.......................................................................................................................1063
    OCILogOff .........................................................................................................................1063
    OCILogon...........................................................................................................................1063
    OCINewCollection .............................................................................................................1065
    OCINewCursor...................................................................................................................1066
    OCINewDescriptor.............................................................................................................1067
    OCINLogon........................................................................................................................1068
    OCINumCols......................................................................................................................1070
    OCIParse.............................................................................................................................1071
    OCIPLogon.........................................................................................................................1071
    OCIResult ...........................................................................................................................1072
    OCIRollback.......................................................................................................................1072
    OCIRowCount ....................................................................................................................1072
    OCISaveLob .......................................................................................................................1073
    OCISaveLobFile .................................................................................................................1073
    OCIServerVersion...............................................................................................................1073
    OCISetPrefetch...................................................................................................................1074
    OCIStatementType .............................................................................................................1074
    OCIWriteLobToFile ...........................................................................................................1075
LXXI. OpenSSL functions...........................................................................................................1076
    openssl_csr_export_to_file .................................................................................................1079
    openssl_csr_export .............................................................................................................1079
    openssl_csr_new.................................................................................................................1079
    openssl_csr_sign.................................................................................................................1080
    openssl_error_string ...........................................................................................................1080
    openssl_free_key ................................................................................................................1081
    openssl_get_privatekey.......................................................................................................1082
    openssl_get_publickey........................................................................................................1082
    openssl_open ......................................................................................................................1082




                                                                                                                                      xlvii
openssl_pkcs7_decrypt.......................................................................................................1083
    openssl_pkcs7_encrypt.......................................................................................................1084
    openssl_pkcs7_sign ............................................................................................................1085
    openssl_pkcs7_verify .........................................................................................................1087
    openssl_pkey_export_to_file ..............................................................................................1087
    openssl_pkey_export ..........................................................................................................1088
    openssl_pkey_new..............................................................................................................1088
    openssl_private_decrypt .....................................................................................................1089
    openssl_private_encrypt .....................................................................................................1089
    openssl_public_decrypt ......................................................................................................1090
    openssl_public_encrypt ......................................................................................................1090
    openssl_seal........................................................................................................................1091
    openssl_sign .......................................................................................................................1092
    openssl_verify.....................................................................................................................1093
    openssl_x509_check_private_key ......................................................................................1094
    openssl_x509_checkpurpose ..............................................................................................1094
    openssl_x509_export_to_file..............................................................................................1095
    openssl_x509_export ..........................................................................................................1096
    openssl_x509_free..............................................................................................................1096
    openssl_x509_parse............................................................................................................1097
    openssl_x509_read .............................................................................................................1097
LXXII. Funciones Oracle.............................................................................................................1099
    Ora_Bind ............................................................................................................................1100
    Ora_Close ...........................................................................................................................1100
    Ora_ColumnName..............................................................................................................1100
    Ora_ColumnSize ................................................................................................................1101
    Ora_ColumnType ...............................................................................................................1101
    Ora_Commit .......................................................................................................................1101
    Ora_CommitOff..................................................................................................................1101
    Ora_CommitOn ..................................................................................................................1102
    Ora_Do ...............................................................................................................................1102
    Ora_Error............................................................................................................................1102
    Ora_ErrorCode ...................................................................................................................1103
    Ora_Exec ............................................................................................................................1103
    Ora_Fetch_Into...................................................................................................................1103
    Ora_Fetch ...........................................................................................................................1104
    Ora_GetColumn .................................................................................................................1104
    Ora_Logoff .........................................................................................................................1104
    Ora_Logon..........................................................................................................................1105
    Ora_Numcols......................................................................................................................1105
    Ora_Numrows ....................................................................................................................1105
    Ora_Open ...........................................................................................................................1106
    Ora_Parse............................................................................................................................1106
    Ora_pLogon........................................................................................................................1106
    Ora_Rollback......................................................................................................................1106
LXXIII. Ovrimos SQL functions .................................................................................................1107
    ovrimos_close.....................................................................................................................1108
    ovrimos_commit.................................................................................................................1108




                                                                                                                                      xlviii
ovrimos_connect.................................................................................................................1108
    ovrimos_cursor ...................................................................................................................1109
    ovrimos_exec......................................................................................................................1109
    ovrimos_execute .................................................................................................................1109
    ovrimos_fetch_into.............................................................................................................1109
    ovrimos_fetch_row .............................................................................................................1110
    ovrimos_field_len ...............................................................................................................1111
    ovrimos_field_name ...........................................................................................................1111
    ovrimos_field_num.............................................................................................................1112
    ovrimos_field_type .............................................................................................................1112
    ovrimos_free_result ............................................................................................................1112
    ovrimos_longreadlen ..........................................................................................................1112
    ovrimos_num_fields ...........................................................................................................1112
    ovrimos_num_rows ............................................................................................................1113
    ovrimos_prepare .................................................................................................................1113
    ovrimos_result_all ..............................................................................................................1114
    ovrimos_result ....................................................................................................................1115
    ovrimos_rollback ................................................................................................................1116
LXXIV. Output Control Functions ..............................................................................................1117
    flush ....................................................................................................................................1118
    ob_clean..............................................................................................................................1118
    ob_end_clean......................................................................................................................1118
    ob_end_flush.......................................................................................................................1118
    ob_flush ..............................................................................................................................1118
    ob_get_contents..................................................................................................................1119
    ob_get_length .....................................................................................................................1119
    ob_get_level........................................................................................................................1119
    ob_get_status ......................................................................................................................1119
    ob_gzhandler ......................................................................................................................1120
    ob_implicit_flush................................................................................................................1121
    ob_start ...............................................................................................................................1121
LXXV. Object property and method call overloading.................................................................1122
    overload ..............................................................................................................................1124
LXXVI. PDF functions ................................................................................................................1125
    pdf_add_annotation ............................................................................................................1130
    pdf_add_bookmark.............................................................................................................1130
    pdf_add_launchlink ............................................................................................................1130
    pdf_add_locallink ...............................................................................................................1130
    pdf_add_note ......................................................................................................................1130
    PDF_add_outline................................................................................................................1131
    pdf_add_pdflink..................................................................................................................1131
    pdf_add_thumbnail.............................................................................................................1131
    pdf_add_weblink ................................................................................................................1131
    PDF_arc..............................................................................................................................1132
    pdf_arcn..............................................................................................................................1132
    pdf_attach_file ....................................................................................................................1132
    PDF_begin_page ................................................................................................................1132
    pdf_begin_pattern...............................................................................................................1133




                                                                                                                                           xlix
pdf_begin_template ............................................................................................................1133
PDF_circle..........................................................................................................................1133
PDF_clip.............................................................................................................................1133
PDF_close_image...............................................................................................................1133
pdf_close_pdi_page............................................................................................................1134
pdf_close_pdi .....................................................................................................................1134
PDF_close...........................................................................................................................1134
PDF_closepath_fill_stroke .................................................................................................1135
PDF_closepath_stroke ........................................................................................................1135
PDF_closepath....................................................................................................................1135
pdf_concat ..........................................................................................................................1135
PDF_continue_text .............................................................................................................1136
PDF_curveto.......................................................................................................................1136
pdf_delete ...........................................................................................................................1136
PDF_end_page ...................................................................................................................1136
pdf_end_pattern..................................................................................................................1137
pdf_end_template ...............................................................................................................1137
PDF_endpath ......................................................................................................................1137
PDF_fill_stroke...................................................................................................................1137
PDF_fill ..............................................................................................................................1137
pdf_findfont ........................................................................................................................1138
pdf_get_buffer ....................................................................................................................1138
pdf_get_font .......................................................................................................................1138
pdf_get_fontname...............................................................................................................1139
pdf_get_fontsize .................................................................................................................1139
pdf_get_image_height ........................................................................................................1139
pdf_get_image_width .........................................................................................................1139
pdf_get_majorversion.........................................................................................................1139
pdf_get_minorversion.........................................................................................................1140
PDF_get_parameter............................................................................................................1140
pdf_get_pdi_parameter.......................................................................................................1140
pdf_get_pdi_value ..............................................................................................................1140
PDF_get_value ...................................................................................................................1140
pdf_initgraphics..................................................................................................................1141
PDF_lineto..........................................................................................................................1141
pdf_makespotcolor .............................................................................................................1141
PDF_moveto.......................................................................................................................1141
pdf_new ..............................................................................................................................1142
pdf_open_CCITT ...............................................................................................................1142
pdf_open_file......................................................................................................................1142
PDF_open_gif.....................................................................................................................1143
pdf_open_image_file ..........................................................................................................1143
pdf_open_image .................................................................................................................1143
PDF_open_jpeg ..................................................................................................................1144
PDF_open_memory_image................................................................................................1144
pdf_open_pdi_page ............................................................................................................1145
pdf_open_pdi......................................................................................................................1145
PDF_open_png ...................................................................................................................1145




                                                                                                                                        l
pdf_open_tiff ......................................................................................................................1145
PDF_open ...........................................................................................................................1146
PDF_place_image...............................................................................................................1146
pdf_place_pdi_page............................................................................................................1146
PDF_rect.............................................................................................................................1147
PDF_restore........................................................................................................................1147
PDF_rotate..........................................................................................................................1147
PDF_save............................................................................................................................1148
PDF_scale...........................................................................................................................1148
PDF_set_border_color........................................................................................................1148
PDF_set_border_dash.........................................................................................................1148
PDF_set_border_style ........................................................................................................1149
PDF_set_char_spacing .......................................................................................................1149
PDF_set_duration ...............................................................................................................1149
PDF_set_font......................................................................................................................1149
PDF_set_horiz_scaling.......................................................................................................1150
pdf_set_info_author............................................................................................................1150
pdf_set_info_creator...........................................................................................................1150
pdf_set_info_keywords ......................................................................................................1151
pdf_set_info_subject...........................................................................................................1151
pdf_set_info_title................................................................................................................1151
PDF_set_info......................................................................................................................1151
PDF_set_leading.................................................................................................................1152
PDF_set_parameter ............................................................................................................1152
PDF_set_text_matrix ..........................................................................................................1152
PDF_set_text_pos...............................................................................................................1152
PDF_set_text_rendering .....................................................................................................1153
PDF_set_text_rise...............................................................................................................1153
PDF_set_value....................................................................................................................1153
PDF_set_word_spacing ......................................................................................................1153
pdf_setcolor ........................................................................................................................1154
PDF_setdash .......................................................................................................................1154
PDF_setflat .........................................................................................................................1155
pdf_setfont..........................................................................................................................1155
PDF_setgray_fill.................................................................................................................1155
PDF_setgray_stroke ...........................................................................................................1155
PDF_setgray .......................................................................................................................1155
PDF_setlinecap...................................................................................................................1156
PDF_setlinejoin ..................................................................................................................1156
PDF_setlinewidth ...............................................................................................................1156
pdf_setmatrix......................................................................................................................1156
PDF_setmiterlimit ..............................................................................................................1156
pdf_setpolydash..................................................................................................................1157
PDF_setrgbcolor_fill ..........................................................................................................1157
PDF_setrgbcolor_stroke .....................................................................................................1157
PDF_setrgbcolor.................................................................................................................1157
PDF_show_boxed...............................................................................................................1158
PDF_show_xy ....................................................................................................................1158




                                                                                                                                      li
PDF_show ..........................................................................................................................1158
   PDF_skew...........................................................................................................................1158
   PDF_stringwidth.................................................................................................................1159
   PDF_stroke .........................................................................................................................1159
   PDF_translate .....................................................................................................................1159
LXXVII. Verisign Payflow Pro functions ....................................................................................1161
   pfpro_cleanup .....................................................................................................................1162
   pfpro_init ............................................................................................................................1162
   pfpro_process_raw..............................................................................................................1162
   pfpro_process .....................................................................................................................1163
   pfpro_version......................................................................................................................1164
LXXVIII. opciones e información de PHP ..................................................................................1165
   assert_options .....................................................................................................................1166
   assert ...................................................................................................................................1166
   dl .........................................................................................................................................1167
   extension_loaded ................................................................................................................1168
   get_cfg_var .........................................................................................................................1169
   get_current_user .................................................................................................................1169
   get_defined_constants.........................................................................................................1169
   get_extension_funcs ...........................................................................................................1170
   get_included_files...............................................................................................................1171
   get_loaded_extensions........................................................................................................1172
   get_magic_quotes_gpc .......................................................................................................1172
   get_magic_quotes_runtime.................................................................................................1173
   get_required_files ...............................................................................................................1173
   getenv..................................................................................................................................1173
   getlastmod...........................................................................................................................1174
   getmygid .............................................................................................................................1174
   getmyinode .........................................................................................................................1174
   getmypid .............................................................................................................................1174
   getmyuid .............................................................................................................................1175
   getrusage.............................................................................................................................1175
   ini_alter...............................................................................................................................1175
   ini_get_all ...........................................................................................................................1176
   ini_get .................................................................................................................................1176
   ini_restore ...........................................................................................................................1176
   ini_set .................................................................................................................................1176
   php_logo_guid....................................................................................................................1184
   php_sapi_name ...................................................................................................................1184
   php_uname .........................................................................................................................1184
   phpcredits ...........................................................................................................................1185
   phpinfo................................................................................................................................1186
   phpversion ..........................................................................................................................1187
   putenv .................................................................................................................................1187
   set_magic_quotes_runtime .................................................................................................1187
   set_time_limit .....................................................................................................................1188
   version_compare.................................................................................................................1188
   zend_logo_guid ..................................................................................................................1189




                                                                                                                                               lii
zend_version.......................................................................................................................1189
LXXIX. Funciones POSIX ..........................................................................................................1190
    posix_ctermid .....................................................................................................................1191
    posix_getcwd......................................................................................................................1191
    posix_getegid......................................................................................................................1191
    posix_geteuid......................................................................................................................1191
    posix_getgid .......................................................................................................................1191
    posix_getgrgid ....................................................................................................................1192
    posix_getgrnam ..................................................................................................................1192
    posix_getgroups..................................................................................................................1192
    posix_getlogin ....................................................................................................................1192
    posix_getpgid .....................................................................................................................1192
    posix_getpgrp .....................................................................................................................1193
    posix_getpid .......................................................................................................................1193
    posix_getppid .....................................................................................................................1193
    posix_getpwnam.................................................................................................................1193
    posix_getpwuid...................................................................................................................1194
    posix_getrlimit....................................................................................................................1195
    posix_getsid........................................................................................................................1195
    posix_getuid .......................................................................................................................1196
    posix_isatty.........................................................................................................................1196
    posix_kill ............................................................................................................................1196
    posix_mkfifo.......................................................................................................................1196
    posix_setegid ......................................................................................................................1197
    posix_seteuid ......................................................................................................................1197
    posix_setgid........................................................................................................................1197
    posix_setpgid......................................................................................................................1197
    posix_setsid ........................................................................................................................1197
    posix_setuid........................................................................................................................1198
    posix_times.........................................................................................................................1198
    posix_ttyname.....................................................................................................................1198
    posix_uname.......................................................................................................................1199
LXXX. Funciones de PostgreSQL...............................................................................................1200
    pg_affected_rows................................................................................................................1202
    pg_cancel_query.................................................................................................................1202
    pg_client_encoding.............................................................................................................1202
    pg_Close .............................................................................................................................1203
    pg_Connect.........................................................................................................................1203
    pg_connection_busy ...........................................................................................................1203
    pg_connection_reset ...........................................................................................................1204
    pg_connection_status .........................................................................................................1204
    pg_convert ..........................................................................................................................1204
    pg_copy_from.....................................................................................................................1204
    pg_copy_to .........................................................................................................................1205
    pg_DBname........................................................................................................................1205
    pg_delete.............................................................................................................................1205
    pg_end_copy.......................................................................................................................1206
    pg_escape_bytea.................................................................................................................1206




                                                                                                                                          liii
pg_escape_string ................................................................................................................1207
   pg_Fetch_Array..................................................................................................................1207
   pg_Fetch_Object.................................................................................................................1208
   pg_fetch_result ...................................................................................................................1209
   pg_Fetch_Row....................................................................................................................1210
   pg_field_is_null ..................................................................................................................1211
   pg_field_name ....................................................................................................................1211
   pg_field_num......................................................................................................................1211
   pg_field_prtlen....................................................................................................................1212
   pg_field_size.......................................................................................................................1212
   pg_field_type ......................................................................................................................1212
   pg_free_result .....................................................................................................................1213
   pg_get_result ......................................................................................................................1213
   pg_Host...............................................................................................................................1213
   pg_insert .............................................................................................................................1213
   pg_last_error.......................................................................................................................1214
   pg_last_notice.....................................................................................................................1214
   pg_last_oid .........................................................................................................................1215
   pg_lo_close.........................................................................................................................1215
   pg_lo_create .......................................................................................................................1216
   pg_lo_export.......................................................................................................................1216
   pg_lo_import ......................................................................................................................1217
   pg_lo_open .........................................................................................................................1217
   pg_lo_read_all ....................................................................................................................1218
   pg_lo_read ..........................................................................................................................1218
   pg_lo_seek..........................................................................................................................1218
   pg_lo_tell............................................................................................................................1219
   pg_lo_unlink.......................................................................................................................1219
   pg_lo_write.........................................................................................................................1219
   pg_metadata........................................................................................................................1219
   pg_num_fields ....................................................................................................................1220
   pg_num_rows .....................................................................................................................1220
   pg_Options .........................................................................................................................1221
   pg_pConnect.......................................................................................................................1221
   pg_Port ...............................................................................................................................1221
   pg_put_line .........................................................................................................................1221
   pg_query .............................................................................................................................1222
   pg_result_error ...................................................................................................................1223
   pg_result_status ..................................................................................................................1223
   pg_select .............................................................................................................................1223
   pg_send_query....................................................................................................................1224
   pg_set_client_encoding ......................................................................................................1224
   pg_trace ..............................................................................................................................1225
   pg_tty..................................................................................................................................1225
   pg_untrace ..........................................................................................................................1225
   pg_update ...........................................................................................................................1226
LXXXI. Process Control Functions .............................................................................................1227
   pcntl_exec...........................................................................................................................1229




                                                                                                                                           liv
pcntl_fork ...........................................................................................................................1229
   pcntl_signal.........................................................................................................................1229
   pcntl_waitpid ......................................................................................................................1231
   pcntl_wexitstatus ................................................................................................................1232
   pcntl_wifexited ...................................................................................................................1232
   pcntl_wifsignaled ...............................................................................................................1232
   pcntl_wifstopped ................................................................................................................1232
   pcntl_wstopsig....................................................................................................................1233
   pcntl_wtermsig ...................................................................................................................1233
LXXXII. Funciones de ejecución de programas..........................................................................1234
   escapeshellarg.....................................................................................................................1235
   escapeshellcmd ...................................................................................................................1235
   exec.....................................................................................................................................1235
   passthru...............................................................................................................................1236
   proc_close...........................................................................................................................1236
   proc_open ...........................................................................................................................1236
   shell_exec ...........................................................................................................................1238
   system .................................................................................................................................1238
LXXXIII. Printer functions..........................................................................................................1239
   printer_abort .......................................................................................................................1240
   printer_close .......................................................................................................................1240
   printer_create_brush ...........................................................................................................1240
   printer_create_dc ................................................................................................................1241
   printer_create_font .............................................................................................................1242
   printer_create_pen ..............................................................................................................1242
   printer_delete_brush ...........................................................................................................1243
   printer_delete_dc ................................................................................................................1243
   printer_delete_font .............................................................................................................1243
   printer_delete_pen ..............................................................................................................1243
   printer_draw_bmp ..............................................................................................................1243
   printer_draw_chord ............................................................................................................1244
   printer_draw_elipse ............................................................................................................1245
   printer_draw_line................................................................................................................1246
   printer_draw_pie.................................................................................................................1246
   printer_draw_rectangle.......................................................................................................1247
   printer_draw_roundrect ......................................................................................................1248
   printer_draw_text................................................................................................................1249
   printer_end_doc..................................................................................................................1250
   printer_end_page ................................................................................................................1250
   printer_get_option ..............................................................................................................1250
   printer_list...........................................................................................................................1250
   printer_logical_fontheight ..................................................................................................1251
   printer_open........................................................................................................................1252
   printer_select_brush ...........................................................................................................1252
   printer_select_font..............................................................................................................1253
   printer_select_pen...............................................................................................................1253
   printer_set_option...............................................................................................................1254
   printer_start_doc.................................................................................................................1256




                                                                                                                                             lv
printer_start_page ...............................................................................................................1256
   printer_write .......................................................................................................................1256
LXXXIV. Pspell Functions..........................................................................................................1258
   pspell_add_to_personal ......................................................................................................1259
   pspell_add_to_session ........................................................................................................1259
   pspell_check .......................................................................................................................1259
   pspell_clear_session ...........................................................................................................1260
   pspell_config_create ...........................................................................................................1260
   pspell_config_ignore ..........................................................................................................1261
   pspell_config_mode............................................................................................................1262
   pspell_config_personal .......................................................................................................1262
   pspell_config_repl ..............................................................................................................1263
   pspell_config_runtogether ..................................................................................................1263
   pspell_config_save_repl .....................................................................................................1264
   pspell_new_config ..............................................................................................................1264
   pspell_new_personal ..........................................................................................................1265
   pspell_new ..........................................................................................................................1266
   pspell_save_wordlist...........................................................................................................1267
   pspell_store_replacement ...................................................................................................1267
   pspell_suggest.....................................................................................................................1268
LXXXV. GNU Readline..............................................................................................................1269
   readline_add_history ..........................................................................................................1270
   readline_clear_history ........................................................................................................1270
   readline_completion_function............................................................................................1270
   readline_info.......................................................................................................................1270
   readline_list_history ...........................................................................................................1270
   readline_read_history .........................................................................................................1271
   readline_write_history........................................................................................................1271
   readline ...............................................................................................................................1271
LXXXVI. Funciones GNU Recode .............................................................................................1272
   recode_file ..........................................................................................................................1273
   recode_string ......................................................................................................................1273
   recode .................................................................................................................................1273
LXXXVII. Funciones de expresiones regulares compatibles con Perl........................................1274
   Modificadores de Patrones..................................................................................................1275
   Sintaxis de los Patrones ......................................................................................................1276
   preg_grep ............................................................................................................................1296
   preg_match_all ...................................................................................................................1296
   preg_match .........................................................................................................................1298
   preg_quote ..........................................................................................................................1298
   preg_replace_callback ........................................................................................................1299
   preg_replace........................................................................................................................1299
   preg_split ............................................................................................................................1300
LXXXVIII. qtdom functions........................................................................................................1302
   qdom_error .........................................................................................................................1303
   qdom_tree ...........................................................................................................................1303
LXXXIX. Funciones para expresiones regulares.........................................................................1304
   ereg_replace........................................................................................................................1306




                                                                                                                                           lvi
ereg .....................................................................................................................................1306
     eregi_replace.......................................................................................................................1307
     eregi ....................................................................................................................................1307
     split .....................................................................................................................................1307
     spliti ....................................................................................................................................1308
     sql_regcase..........................................................................................................................1308
XC. Funciones Semáforo y de memoria compartida ...................................................................1310
     ftok......................................................................................................................................1311
     msg_get_queue ...................................................................................................................1311
     msg_receive ........................................................................................................................1311
     msg_remove_queue ............................................................................................................1312
     msg_send ............................................................................................................................1313
     msg_set_queue ...................................................................................................................1313
     msg_stat_queue ..................................................................................................................1314
     sem_acquire........................................................................................................................1314
     sem_get...............................................................................................................................1315
     sem_release.........................................................................................................................1315
     sem_remove........................................................................................................................1315
     shm_attach..........................................................................................................................1316
     shm_detach .........................................................................................................................1316
     shm_get_var........................................................................................................................1316
     shm_put_var .......................................................................................................................1316
     shm_remove_var.................................................................................................................1317
     shm_remove........................................................................................................................1317
XCI. SESAM database functions.................................................................................................1318
     sesam_affected_rows..........................................................................................................1323
     sesam_commit ....................................................................................................................1323
     sesam_connect....................................................................................................................1324
     sesam_diagnostic................................................................................................................1324
     sesam_disconnect ...............................................................................................................1326
     sesam_errormsg..................................................................................................................1327
     sesam_execimm..................................................................................................................1327
     sesam_fetch_array ..............................................................................................................1328
     sesam_fetch_result .............................................................................................................1329
     sesam_fetch_row ................................................................................................................1330
     sesam_field_array ...............................................................................................................1332
     sesam_field_name...............................................................................................................1335
     sesam_free_result ...............................................................................................................1335
     sesam_num_fields...............................................................................................................1335
     sesam_query .......................................................................................................................1336
     sesam_rollback ...................................................................................................................1337
     sesam_seek_row .................................................................................................................1338
     sesam_settransaction ..........................................................................................................1339
XCII. Funciones para el manejo de sesiones ...............................................................................1341
     session_cache_expire..........................................................................................................1347
     session_cache_limiter.........................................................................................................1347
     session_decode ...................................................................................................................1348
     session_destroy...................................................................................................................1348




                                                                                                                                               lvii
session_encode ...................................................................................................................1349
     session_get_cookie_params ...............................................................................................1349
     session_id ...........................................................................................................................1349
     session_is_registered ..........................................................................................................1350
     session_module_name........................................................................................................1350
     session_name......................................................................................................................1350
     session_readonly.................................................................................................................1351
     session_register...................................................................................................................1351
     session_save_path...............................................................................................................1352
     session_set_cookie_params................................................................................................1353
     session_set_save_handler ...................................................................................................1353
     session_start........................................................................................................................1355
     session_unregister...............................................................................................................1356
     session_unset ......................................................................................................................1356
     session_write_close ............................................................................................................1357
XCIII. Shared Memory Functions ...............................................................................................1358
     shmop_close .......................................................................................................................1359
     shmop_delete......................................................................................................................1359
     shmop_open........................................................................................................................1359
     shmop_read.........................................................................................................................1360
     shmop_size .........................................................................................................................1361
     shmop_write .......................................................................................................................1361
XCIV. Shockwave Flash functions ..............................................................................................1363
     swf_actiongeturl .................................................................................................................1365
     swf_actiongotoframe ..........................................................................................................1365
     swf_actiongotolabel............................................................................................................1365
     swf_actionnextframe ..........................................................................................................1365
     swf_actionplay....................................................................................................................1365
     swf_actionprevframe ..........................................................................................................1366
     swf_actionsettarget .............................................................................................................1366
     swf_actionstop....................................................................................................................1366
     swf_actiontogglequality .....................................................................................................1366
     swf_actionwaitforframe......................................................................................................1366
     swf_addbuttonrecord ..........................................................................................................1366
     swf_addcolor ......................................................................................................................1367
     swf_closefile .......................................................................................................................1367
     swf_definebitmap ...............................................................................................................1368
     swf_definefont ....................................................................................................................1368
     swf_defineline.....................................................................................................................1368
     swf_definepoly ...................................................................................................................1368
     swf_definerect.....................................................................................................................1368
     swf_definetext.....................................................................................................................1369
     swf_endbutton ....................................................................................................................1369
     swf_enddoaction.................................................................................................................1369
     swf_endshape .....................................................................................................................1369
     swf_endsymbol...................................................................................................................1370
     swf_fontsize........................................................................................................................1370
     swf_fontslant ......................................................................................................................1370




                                                                                                                                         lviii
swf_fonttracking.................................................................................................................1370
    swf_getbitmapinfo..............................................................................................................1370
    swf_getfontinfo...................................................................................................................1371
    swf_getframe ......................................................................................................................1371
    swf_labelframe ...................................................................................................................1371
    swf_lookat ..........................................................................................................................1371
    swf_modifyobject ...............................................................................................................1372
    swf_mulcolor......................................................................................................................1372
    swf_nextid ..........................................................................................................................1372
    swf_oncondition .................................................................................................................1373
    swf_openfile .......................................................................................................................1373
    swf_ortho2..........................................................................................................................1374
    swf_ortho............................................................................................................................1374
    swf_perspective ..................................................................................................................1374
    swf_placeobject ..................................................................................................................1374
    swf_polarview ....................................................................................................................1375
    swf_popmatrix....................................................................................................................1375
    swf_posround .....................................................................................................................1375
    swf_pushmatrix ..................................................................................................................1375
    swf_removeobject...............................................................................................................1376
    swf_rotate ...........................................................................................................................1376
    swf_scale ............................................................................................................................1376
    swf_setfont .........................................................................................................................1376
    swf_setframe.......................................................................................................................1377
    swf_shapearc ......................................................................................................................1377
    swf_shapecurveto3 .............................................................................................................1377
    swf_shapecurveto ...............................................................................................................1377
    swf_shapefillbitmapclip......................................................................................................1377
    swf_shapefillbitmaptile.......................................................................................................1378
    swf_shapefilloff ..................................................................................................................1378
    swf_shapefillsolid ...............................................................................................................1378
    swf_shapelinesolid .............................................................................................................1378
    swf_shapelineto ..................................................................................................................1379
    swf_shapemoveto ...............................................................................................................1379
    swf_showframe...................................................................................................................1379
    swf_startbutton ...................................................................................................................1379
    swf_startdoaction................................................................................................................1379
    swf_startshape ....................................................................................................................1380
    swf_startsymbol..................................................................................................................1380
    swf_textwidth .....................................................................................................................1380
    swf_translate.......................................................................................................................1380
    swf_viewport ......................................................................................................................1381
XCV. Funciones SNMP ...............................................................................................................1382
    snmp_get_quick_print ........................................................................................................1383
    snmp_set_quick_print.........................................................................................................1383
    snmpget...............................................................................................................................1384
    snmprealwalk......................................................................................................................1384
    snmpset ...............................................................................................................................1384




                                                                                                                                           lix
snmpwalk............................................................................................................................1385
    snmpwalkoid.......................................................................................................................1385
XCVI. Socket functions ...............................................................................................................1387
    socket_accept......................................................................................................................1390
    socket_bind.........................................................................................................................1390
    socket_clear_error ..............................................................................................................1391
    socket_close........................................................................................................................1391
    socket_connect ...................................................................................................................1392
    socket_create_listen............................................................................................................1392
    socket_create_pair ..............................................................................................................1393
    socket_create ......................................................................................................................1393
    socket_get_option...............................................................................................................1394
    socket_getpeername ...........................................................................................................1395
    socket_getsockname ...........................................................................................................1395
    socket_iovec_add................................................................................................................1396
    socket_iovec_alloc..............................................................................................................1396
    socket_iovec_delete............................................................................................................1397
    socket_iovec_fetch .............................................................................................................1397
    socket_iovec_free ...............................................................................................................1398
    socket_iovec_set .................................................................................................................1398
    socket_last_error.................................................................................................................1399
    socket_listen .......................................................................................................................1400
    socket_read .........................................................................................................................1400
    socket_readv .......................................................................................................................1401
    socket_recv .........................................................................................................................1402
    socket_recvfrom .................................................................................................................1402
    socket_recvmsg ..................................................................................................................1403
    socket_select.......................................................................................................................1403
    socket_send.........................................................................................................................1405
    socket_sendmsg ..................................................................................................................1406
    socket_sendto .....................................................................................................................1406
    socket_set_nonblock...........................................................................................................1407
    socket_set_option ...............................................................................................................1407
    socket_shutdown ................................................................................................................1408
    socket_strerror ....................................................................................................................1408
    socket_write........................................................................................................................1409
    socket_writev......................................................................................................................1410
XCVII. Funciones de cadenas......................................................................................................1412
    AddCSlashes.......................................................................................................................1413
    AddSlashes .........................................................................................................................1413
    bin2hex ...............................................................................................................................1413
    chop ....................................................................................................................................1413
    chr .......................................................................................................................................1414
    chunk_split .........................................................................................................................1414
    convert_cyr_string ..............................................................................................................1415
    count_chars.........................................................................................................................1415
    crc32 ...................................................................................................................................1416
    crypt....................................................................................................................................1416




                                                                                                                                                lx
echo.....................................................................................................................................1417
explode ...............................................................................................................................1417
get_html_translation_table .................................................................................................1418
get_meta_tags .....................................................................................................................1418
hebrev .................................................................................................................................1419
hebrevc................................................................................................................................1419
htmlentities .........................................................................................................................1420
htmlspecialchars .................................................................................................................1420
implode ...............................................................................................................................1420
join......................................................................................................................................1421
levenshtein ..........................................................................................................................1421
localeconv ...........................................................................................................................1421
ltrim ....................................................................................................................................1424
md5_file..............................................................................................................................1424
md5 .....................................................................................................................................1424
metaphone...........................................................................................................................1424
nl_langinfo..........................................................................................................................1425
nl2br....................................................................................................................................1425
ord.......................................................................................................................................1425
parse_str..............................................................................................................................1426
print.....................................................................................................................................1426
printf ...................................................................................................................................1427
quoted_printable_decode....................................................................................................1427
quotemeta ...........................................................................................................................1427
rtrim ....................................................................................................................................1427
setlocale ..............................................................................................................................1428
similar_text .........................................................................................................................1428
soundex...............................................................................................................................1429
sprintf..................................................................................................................................1429
sscanf ..................................................................................................................................1430
str_pad ................................................................................................................................1431
str_repeat ............................................................................................................................1432
str_replace...........................................................................................................................1432
str_rot13..............................................................................................................................1433
strcasecmp ..........................................................................................................................1433
strchr ...................................................................................................................................1433
strcmp .................................................................................................................................1434
strcoll ..................................................................................................................................1434
strcspn.................................................................................................................................1434
strip_tags.............................................................................................................................1434
stripcslashes........................................................................................................................1435
stripslashes..........................................................................................................................1435
stristr ...................................................................................................................................1435
strlen ...................................................................................................................................1436
strnatcasecmp .....................................................................................................................1436
strnatcmp ............................................................................................................................1436
strncasecmp ........................................................................................................................1437
strncmp ...............................................................................................................................1437




                                                                                                                                           lxi
strpos...................................................................................................................................1438
     strrchr..................................................................................................................................1438
     strrev ...................................................................................................................................1439
     strrpos .................................................................................................................................1439
     strspn...................................................................................................................................1440
     strstr ....................................................................................................................................1440
     strtok ...................................................................................................................................1441
     strtolower ............................................................................................................................1441
     strtoupper............................................................................................................................1442
     strtr......................................................................................................................................1442
     substr_count........................................................................................................................1443
     substr_replace .....................................................................................................................1443
     substr...................................................................................................................................1444
     trim .....................................................................................................................................1445
     ucfirst ..................................................................................................................................1445
     ucwords...............................................................................................................................1446
     vprintf .................................................................................................................................1446
     vsprintf................................................................................................................................1446
     wordwrap ............................................................................................................................1447
XCVIII. Funciones de Sybase......................................................................................................1448
     sybase_affected_rows .........................................................................................................1449
     sybase_close .......................................................................................................................1449
     sybase_connect ...................................................................................................................1449
     sybase_data_seek................................................................................................................1450
     sybase_fetch_array .............................................................................................................1450
     sybase_fetch_field ..............................................................................................................1450
     sybase_fetch_object............................................................................................................1451
     sybase_fetch_row ...............................................................................................................1451
     sybase_field_seek ...............................................................................................................1452
     sybase_free_result ..............................................................................................................1452
     sybase_get_last_message ...................................................................................................1452
     sybase_min_client_severity................................................................................................1452
     sybase_min_error_severity .................................................................................................1453
     sybase_min_message_severity ...........................................................................................1453
     sybase_min_server_severity ...............................................................................................1453
     sybase_num_fields..............................................................................................................1453
     sybase_num_rows...............................................................................................................1453
     sybase_pconnect .................................................................................................................1454
     sybase_query ......................................................................................................................1454
     sybase_result.......................................................................................................................1454
     sybase_select_db ................................................................................................................1455
XCIX. Tokenizer functions ..........................................................................................................1456
     token_get_all ......................................................................................................................1457
     token_name.........................................................................................................................1457
C. Funciones URL........................................................................................................................1458
     base64_decode....................................................................................................................1459
     base64_encode....................................................................................................................1459
     parse_url .............................................................................................................................1459




                                                                                                                                               lxii
rawurldecode ......................................................................................................................1459
      rawurlencode ......................................................................................................................1460
      urldecode ............................................................................................................................1460
      urlencode ............................................................................................................................1461
CI. Funciones sobre variables ......................................................................................................1462
      doubleval.............................................................................................................................1463
      empty ..................................................................................................................................1463
      floatval ................................................................................................................................1463
      get_defined_vars.................................................................................................................1463
      get_resource_type...............................................................................................................1464
      gettype ................................................................................................................................1465
      import_request_variables....................................................................................................1465
      intval ...................................................................................................................................1466
      is_array ...............................................................................................................................1466
      is_bool ................................................................................................................................1466
      is_callable ...........................................................................................................................1467
      is_double.............................................................................................................................1467
      is_float ................................................................................................................................1467
      is_int ...................................................................................................................................1467
      is_integer ............................................................................................................................1468
      is_long ................................................................................................................................1468
      is_null .................................................................................................................................1468
      is_numeric ..........................................................................................................................1468
      is_object..............................................................................................................................1469
      is_real .................................................................................................................................1469
      is_resource..........................................................................................................................1469
      is_scalar ..............................................................................................................................1469
      is_string ..............................................................................................................................1470
      isset .....................................................................................................................................1471
      print_r .................................................................................................................................1471
      serialize...............................................................................................................................1472
      settype.................................................................................................................................1473
      strval ...................................................................................................................................1474
      unserialize...........................................................................................................................1474
      unset....................................................................................................................................1475
      var_dump ............................................................................................................................1476
      var_export ...........................................................................................................................1477
CII. vpopmail functions ...............................................................................................................1479
      vpopmail_add_alias_domain_ex ........................................................................................1480
      vpopmail_add_alias_domain..............................................................................................1480
      vpopmail_add_domain_ex .................................................................................................1480
      vpopmail_add_domain .......................................................................................................1481
      vpopmail_add_user.............................................................................................................1481
      vpopmail_alias_add............................................................................................................1482
      vpopmail_alias_del_domain...............................................................................................1482
      vpopmail_alias_del.............................................................................................................1483
      vpopmail_alias_get_all.......................................................................................................1483
      vpopmail_alias_get.............................................................................................................1484




                                                                                                                                               lxiii
vpopmail_auth_user ...........................................................................................................1484
      vpopmail_del_domain_ex ..................................................................................................1485
      vpopmail_del_domain ........................................................................................................1485
      vpopmail_del_user .............................................................................................................1486
      vpopmail_error ...................................................................................................................1486
      vpopmail_passwd ...............................................................................................................1487
      vpopmail_set_user_quota ...................................................................................................1487
CIII. W32api functions ................................................................................................................1489
      w32api_deftype ..................................................................................................................1490
      w32api_init_dtype ..............................................................................................................1490
      w32api_invoke_function ....................................................................................................1490
      w32api_register_function ...................................................................................................1491
      w32api_set_call_method ....................................................................................................1491
CIV. Funciones WDDX ...............................................................................................................1493
      wddx_add_vars...................................................................................................................1494
      wddx_deserialize ................................................................................................................1494
      wddx_packet_end ...............................................................................................................1494
      wddx_packet_start ..............................................................................................................1494
      wddx_serialize_value .........................................................................................................1494
      wddx_serialize_vars ...........................................................................................................1495
CV. Funciones de intérprete XML...............................................................................................1496
      utf8_decode ........................................................................................................................1505
      utf8_encode ........................................................................................................................1505
      xml_error_string .................................................................................................................1505
      xml_get_current_byte_index ..............................................................................................1506
      xml_get_current_column_number .....................................................................................1506
      xml_get_current_line_number ...........................................................................................1506
      xml_get_error_code............................................................................................................1507
      xml_parse_into_struct ........................................................................................................1507
      xml_parse ...........................................................................................................................1511
      xml_parser_create_ns .........................................................................................................1511
      xml_parser_create...............................................................................................................1512
      xml_parser_free..................................................................................................................1512
      xml_parser_get_option .......................................................................................................1512
      xml_parser_set_option .......................................................................................................1513
      xml_set_character_data_handler ........................................................................................1514
      xml_set_default_handler ....................................................................................................1514
      xml_set_element_handler...................................................................................................1515
      xml_set_end_namespace_decl_handler .............................................................................1516
      xml_set_external_entity_ref_handler .................................................................................1516
      xml_set_notation_decl_handler..........................................................................................1517
      xml_set_object....................................................................................................................1518
      xml_set_processing_instruction_handler ...........................................................................1519
      xml_set_start_namespace_decl_handler ............................................................................1520
      xml_set_unparsed_entity_decl_handler .............................................................................1520
CVI. XMLRPC functions ............................................................................................................1522
      xmlrpc_decode_request......................................................................................................1523
      xmlrpc_decode ...................................................................................................................1523




                                                                                                                                         lxiv
xmlrpc_encode_request......................................................................................................1523
     xmlrpc_encode ...................................................................................................................1524
     xmlrpc_get_type .................................................................................................................1524
     xmlrpc_parse_method_descriptions ...................................................................................1525
     xmlrpc_server_add_introspection_data..............................................................................1525
     xmlrpc_server_call_method ...............................................................................................1526
     xmlrpc_server_create..........................................................................................................1526
     xmlrpc_server_destroy .......................................................................................................1527
     xmlrpc_server_register_introspection_callback .................................................................1527
     xmlrpc_server_register_method .........................................................................................1528
     xmlrpc_set_type .................................................................................................................1528
CVII. XSLT functions ..................................................................................................................1530
     xslt_create...........................................................................................................................1531
     xslt_errno............................................................................................................................1531
     xslt_error.............................................................................................................................1531
     xslt_free ..............................................................................................................................1531
     xslt_output_process ............................................................................................................1531
     xslt_set_base.......................................................................................................................1532
     xslt_set_encoding ...............................................................................................................1532
     xslt_set_error_handler ........................................................................................................1532
     xslt_set_log.........................................................................................................................1532
     xslt_set_sax_handler...........................................................................................................1533
     xslt_set_sax_handlers .........................................................................................................1533
     xslt_set_scheme_handler....................................................................................................1534
     xslt_set_scheme_handlers ..................................................................................................1534
CVIII. YAZ ..................................................................................................................................1535
     yaz_addinfo ........................................................................................................................1537
     yaz_ccl_conf.......................................................................................................................1537
     yaz_ccl_parse .....................................................................................................................1537
     yaz_close ............................................................................................................................1538
     yaz_connect ........................................................................................................................1538
     yaz_database.......................................................................................................................1538
     yaz_element........................................................................................................................1538
     yaz_errno ............................................................................................................................1539
     yaz_error.............................................................................................................................1539
     yaz_hits...............................................................................................................................1539
     yaz_itemorder .....................................................................................................................1539
     yaz_present .........................................................................................................................1542
     yaz_range............................................................................................................................1542
     yaz_record ..........................................................................................................................1542
     yaz_scan_result...................................................................................................................1542
     yaz_scan .............................................................................................................................1543
     yaz_search ..........................................................................................................................1544
     yaz_sort...............................................................................................................................1544
     yaz_syntax ..........................................................................................................................1545
     yaz_wait..............................................................................................................................1545
CIX. NIS funciona .......................................................................................................................1546
     yp_all ..................................................................................................................................1547




                                                                                                                                             lxv
yp_cat .................................................................................................................................1547
             yp_err_string.......................................................................................................................1547
             yp_errno..............................................................................................................................1547
             yp_first................................................................................................................................1548
             yp_get_default_domain ......................................................................................................1548
             yp_master ...........................................................................................................................1549
             yp_match ............................................................................................................................1549
             yp_next ...............................................................................................................................1550
             yp_order..............................................................................................................................1550
        CX. Zip File Functions (Read Only Access) ...............................................................................1552
             zip_close .............................................................................................................................1554
             zip_entry_close...................................................................................................................1554
             zip_entry_compressedsize..................................................................................................1554
             zip_entry_compressionmethod...........................................................................................1554
             zip_entry_filesize................................................................................................................1554
             zip_entry_name ..................................................................................................................1555
             zip_entry_open ...................................................................................................................1555
             zip_entry_read ....................................................................................................................1555
             zip_open .............................................................................................................................1556
             zip_read ..............................................................................................................................1556
        CXI. Funciones de Compresión ...................................................................................................1557
             gzclose ................................................................................................................................1558
             gzcompress .........................................................................................................................1558
             gzdeflate..............................................................................................................................1558
             gzencode .............................................................................................................................1558
             gzeof ...................................................................................................................................1559
             gzfile ...................................................................................................................................1560
             gzgetc..................................................................................................................................1560
             gzgets..................................................................................................................................1560
             gzgetss ................................................................................................................................1560
             gzinflate ..............................................................................................................................1561
             gzopen.................................................................................................................................1561
             gzpassthru ...........................................................................................................................1562
             gzputs..................................................................................................................................1562
             gzread .................................................................................................................................1562
             gzrewind .............................................................................................................................1563
             gzseek .................................................................................................................................1563
             gztell ...................................................................................................................................1563
             gzuncompress .....................................................................................................................1564
             gzwrite ................................................................................................................................1564
             readgzfile ............................................................................................................................1564
V. Extending PHP 4.0..........................................................................................................................1566
        25. Overview ................................................................................................................................1566
              What Is Zend? and What Is PHP? ......................................................................................1567
        26. Extension Possibilities ...........................................................................................................1568
              External Modules................................................................................................................1569
              Built-in Modules.................................................................................................................1569




                                                                                                                                                     lxvi
The Zend Engine ................................................................................................................1570
27. Source Layout ........................................................................................................................1571
      Extension Conventions .......................................................................................................1573
      Macros ................................................................................................................................1573
      Memory Management ........................................................................................................1573
      Directory and File Functions ..............................................................................................1574
      String Handling ..................................................................................................................1574
      Complex Types ...................................................................................................................1574
28. PHP’s Automatic Build System .............................................................................................1576
29. Creating Extensions ...............................................................................................................1579
      Compiling Modules ............................................................................................................1581
30. Using Extensions....................................................................................................................1583
31. Troubleshooting .....................................................................................................................1586
32. Source Discussion ..................................................................................................................1588
      Module Structure ................................................................................................................1589
      Header File Inclusions........................................................................................................1589
      Declaring Exported Functions............................................................................................1589
      Declaration of the Zend Function Block ............................................................................1590
      Declaration of the Zend Module Block ..............................................................................1592
      Creation of get_module()...................................................................................................1593
      Implementation of All Exported Functions........................................................................1594
      Summary.............................................................................................................................1594
33. Accepting Arguments.............................................................................................................1595
      Determining the Number of Arguments.............................................................................1596
      Retrieving Arguments.........................................................................................................1597
      Old way of retrieving arguments (deprecated) ...................................................................1600
      Dealing with a Variable Number of Arguments/Optional Parameters ...............................1601
      Accessing Arguments .........................................................................................................1603
      Dealing with Arguments Passed by Reference...................................................................1606
      Assuring Write Safety for Other Parameters......................................................................1607
34. Creating Variables ..................................................................................................................1609
      Overview ............................................................................................................................1610
      Longs (Integers)..................................................................................................................1612
      Doubles (Floats) .................................................................................................................1613
      Strings.................................................................................................................................1613
      Booleans .............................................................................................................................1614
      Arrays .................................................................................................................................1615
      Objects................................................................................................................................1618
      Resources............................................................................................................................1618
      Macros for Automatic Global Variable Creation................................................................1622
      Creating Constants..............................................................................................................1623
35. Duplicating Variable Contents: The Copy Constructor .........................................................1625
36. Returning Values ....................................................................................................................1627
37. Printing Information...............................................................................................................1630
      zend_printf() .....................................................................................................................1631
      zend_error() ......................................................................................................................1631
      Including Output in phpinfo() ............................................................................................1631
      Execution Information........................................................................................................1632




                                                                                                                                           lxvii
38. Startup and Shutdown Functions ...........................................................................................1634
        39. Calling User Functions...........................................................................................................1636
        40. Initialization File Support ......................................................................................................1639
        41. Where to Go from Here .........................................................................................................1642
        42. Reference: Some Configuration Macros ................................................................................1644
              config.m4 .........................................................................................................................1645
        43. API Macros ............................................................................................................................1646
VI. FAQ: Preguntas frecuentes...............................................................................................................??
        44. General Information ...................................................................................................................??
        45. Mailing lists................................................................................................................................??
        46. Obtaining PHP ...........................................................................................................................??
        47. Database issues ..........................................................................................................................??
        48. Installation..................................................................................................................................??
        49. Build Problems...........................................................................................................................??
        50. Using PHP..................................................................................................................................??
        51. PHP and HTML .........................................................................................................................??
        52. PHP and COM ...........................................................................................................................??
        53. PHP and other languages ...........................................................................................................??
        54. Migrating from PHP 2 to PHP 3 ................................................................................................??
        55. Migrating from PHP 3 to PHP 4 ................................................................................................??
        56. Miscellaneous Questions............................................................................................................??
VII. Apéndices..........................................................................................................................................??
        A. Historia de PHP y proyectos relacionados ..................................................................................??
             Historia de PHP ......................................................................................................................??
                    PHP/FI ..........................................................................................................................??
                    PHP 3 ............................................................................................................................??
                    PHP 4 ............................................................................................................................??
             Historia de los proyectos relacionados con PHP ....................................................................??
                    PEAR ............................................................................................................................??
                    Iniciativa para la Garantía de Calidad de PHP..............................................................??
                    PHP-GTK......................................................................................................................??
             Libros sobre PHP....................................................................................................................??
             Publicaciones sobre PHP........................................................................................................??
        B. Migrating from PHP 3 to PHP 4 .................................................................................................??
             What has changed in PHP 4 ...................................................................................................??
             Running PHP 3 and PHP 4 concurrently................................................................................??
             Migrating Configuration Files ................................................................................................??
             Parser behavior .......................................................................................................................??
             Error reporting ........................................................................................................................??
                    Configuration changes ..................................................................................................??
                    Additional warning messages .......................................................................................??
             Initializers ...............................................................................................................................??
             empty("0")...........................................................................................................................??
             Missing functions ...................................................................................................................??
                    Functions missing due to conceptual changes ..............................................................??
                    Deprecate functions and extensions..............................................................................??
                    Changed status for unset() ............................................................................................??




                                                                                                                                                    lxviii
PHP 3 extension .....................................................................................................................??
      Variable substitution in strings ...............................................................................................??
      Cookies ...................................................................................................................................??
      Handling of global variables...................................................................................................??
C. Migrando de PHP/FI 2.0 a PHP 3.0 ............................................................................................??
      Acerca de las incompatibilidades en PHP 3.0 ........................................................................??
      Tags de inicio y fin..................................................................................................................??
      sintáxis de if..endif .................................................................................................................??
      sintáxis de while (mientras)....................................................................................................??
      Tipos de expresiones...............................................................................................................??
      Cambios en los mensajes de error ..........................................................................................??
      Evaluación booleana por corto-circuito..................................................................................??
      Retorno de valores en funciones verdadero/falso...................................................................??
      Otras incompatibilidades ........................................................................................................??
D. El debugger de PHP ....................................................................................................................??
      Usando el Debugger ...............................................................................................................??
      Protocolo del debugger...........................................................................................................??
E. Desarrollo en PHP .......................................................................................................................??
      Añadiendo funciones al PHP3................................................................................................??
             Prototipo de Función.....................................................................................................??
             Argumentos de Función ................................................................................................??
             Argumentos de Función Variables ................................................................................??
             Usando los Argumentos de Función .............................................................................??
             Manejo de Memoria en las Funciones ..........................................................................??
             Asignando Variables en la Tabla de Símbolos ..............................................................??
             Devolviendo valores simples ........................................................................................??
             Devolviendo valores complejos ....................................................................................??
             Usando la lista de recursos............................................................................................??
             Utilizando la tabla de recursos persistentes ..................................................................??
             Añadiendo directivas de configuración en tiempo de ejecución...................................??
      Llamando a Funciones del Usuario ........................................................................................??
             HashTable *tabla_funciones .........................................................................................??
             pval *objeto...................................................................................................................??
             pval *nombre_func .......................................................................................................??
             pval *valret....................................................................................................................??
             int num_params.............................................................................................................??
             pval *params[] ..............................................................................................................??
      Informando de errores ............................................................................................................??
             E_NOTICE....................................................................................................................??
             E_WARNING ...............................................................................................................??
             E_ERROR.....................................................................................................................??
             E_PARSE ......................................................................................................................??
             E_CORE_ERROR ........................................................................................................??
             E_CORE_WARNING...................................................................................................??
F. Lista de alias de funciones ...........................................................................................................??
G. List of Reserved Words ...............................................................................................................??
      List of Keywords ....................................................................................................................??
      Predefined Variables ...............................................................................................................??




                                                                                                                                             lxix
Server variables: $_SERVER .........................................................................................??
              Environment variables: $_ENV......................................................................................??
              HTTP Cookies: $_COOKIE ...........................................................................................??
              HTTP GET variables: $_GET .......................................................................................??
              HTTP POST variables: $_POST ...................................................................................??
              HTTP File upload variables: $_FILES .........................................................................??
              Request variables: $_REQUEST .....................................................................................??
              Session variables: $_SESSION .....................................................................................??
              Global variables: $GLOBALS .........................................................................................??
              The previous error message: $php_errormsg ............................................................??
       Predefined Classes ..................................................................................................................??
              Standard Defined Classes..............................................................................................??
              Ming Defined Classes ...................................................................................................??
              Oracle 8 Defined Classes ..............................................................................................??
              qtdom Defined Classes..................................................................................................??
       ???...........................................................................................................................................??
              Core Predefined Constants............................................................................................??
              hyperwave Predefined Constants ..................................................................................??
              ingres Predefined Constants..........................................................................................??
              ldap Predefined Constants.............................................................................................??
              mbstring Predefined Constants .....................................................................................??
              mcal Predefined Constants............................................................................................??
              mcrypt Predefined Constants ........................................................................................??
              ming Predefined Constants ...........................................................................................??
              mnogosearch Predefined Constants ..............................................................................??
              msql Predefined Constants............................................................................................??
              mssql Predefined Constants ..........................................................................................??
              ncurses Predefined Constants........................................................................................??
              oci8 Predefined Constants.............................................................................................??
              odbc Predefined Constants............................................................................................??
              openssl Predefined Constants........................................................................................??
              oracle Predefined Constants..........................................................................................??
              pcntl Predefined Constants............................................................................................??
              pcre Predefined Constants.............................................................................................??
              pgsql Predefined Constants ...........................................................................................??
              pspell Predefined Constants ..........................................................................................??
              session Predefined Constants ........................................................................................??
              sockets Predefined Constants........................................................................................??
              standard Predefined Constants ......................................................................................??
              swf Predefined Constants..............................................................................................??
              tokenizer Predefined Constants.....................................................................................??
              w32api Predefined Constants........................................................................................??
              xml Predefined Constants .............................................................................................??
              yp Predefined Constants................................................................................................??
              zlib Predefined Constants..............................................................................................??
H. List of Resource Types ................................................................................................................??
I. Lista de Identificadores (tokens) del Analizador ..........................................................................??
J. Sobre el manual ............................................................................................................................??




                                                                                                                                                  lxx
Formatos .................................................................................................................................??
     Sobre las notas de usuarios.....................................................................................................??
     Como encontrar más información sobre PHP ........................................................................??
     Como ayudar a mejorar la documentación.............................................................................??
     Como generamos los formatos ...............................................................................................??
     Traducciones...........................................................................................................................??
     Sobre la traducción al español................................................................................................??
K. missing stuff ................................................................................................................................??




                                                                                                                                             lxxi
Prefacio
   PHP, acrónimo de "PHP: Hypertext Preprocessor", es un lenguaje "Open Source" interpretado de alto
   nivel, especialmente pensado para desarrollos web y el cual puede ser embebido en páginas HTML. La
   mayoría de su sintaxis es similar a C, Java y Perl y es fácil de aprender. La meta de este lenguaje es
   permitir escribir a los creadores de páginas web, páginas dinámicas de una manera rápida y fácil, aunque
   se pueda hacer mucho más con PHP.



   Este manual contiene principalmente una referencia de funciones PHP, tambien contiene una referencia
   del lenguaje, explicaciones de caracteristicas importantes de PHP y alguna información suplementaria.
   Este manual se puede conseguir en diferentes formatos en http://www.php.net/docs.php. Estos ficheros
   son actualizados a medida que el manual vaya cambiando. Más información sobre como este manual es
   desarrollado puede encontrarse en el apéndice’Sobre este manual’




                                                                                                           i
Parte I. Conceptos Básicos

Capítulo 1. Introducción




                             1
Capítulo 1. Introducción

Qué es PHP?
    PHP (acronimo de "PHP: Hypertext Preprocessor") es un lenguaje "open source" interpretado de alto
    nivel embebido en páginas HTML y ejecutado en el servidor.
    Una respuesta corta y concisa, pero que significa realmente? Un ejemplo nos aclarará las cosas:


    Ejemplo 1-1. Un ejemplo introductorio


    <html>
        <head>
            <title>Example</title>
        </head>
        <body>

               <?php
               echo "Hi, I’m a PHP script!";
               ?>

        </body>
    </html>




    Podemos ver que no es lo mismo que un script escrito en otro lenguaje de programación como Perl o C --
    En vez de escribir un programa con muchos comandos para crear una salida en HTML, escribimos el
    código HTML con cierto código PHP embebido (introducido) en el mismo, que producirá cierta salida
    (en nuestro ejemplo, producir un texto). El código PHP se incluye entre etiquetas especiales de comienzo
    y final que nos permitirán entrar y salir del modo PHP.
    Lo que distingue a PHP de la tecnología Javascript, la cual se ejecuta en la máquina cliente, es que el
    código PHP es ejecutado en el servidor. Si tuviesemos un script similar al de nuestro ejemplo en nuestro
    servidor, el cliente sólamente recibiría el resultado de su ejecución en el servidor, sin ninguna posibilidad
    de determinar que código ha producido el resultado recibido. El servidor web puede ser incluso
    configurado para que procese todos los ficheros HTML con PHP.
    Lo mejor de usar PHP es que es extremadamente simple para el principiante, pero a su vez, ofrece
    muchas caracteristicas avanzadas para los programadores profesionales. No tengais miedo de leer la
    larga lista de caracteristicas de PHP, en poco tiempo podreis empezar a escribir vuestros primeros scripts.
    Aunque el desarrollo de PHP está concentrado en la programación de scripts en la parte del servidor, se
    puede utilizar para muchas otras cosas. Sigue leyendo y descubre más sobre PHP en la sección Qué se
    puede hacer con PHP?.




                                                                                                               2
Capítulo 1. Introducción

Qué se puede hacer con PHP?
     PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la información de
     formularios, generar páginas con contenidos dinámicos, o mandar y recibir cookies. Y esto no es todo, se
     puede hacer mucho más.
     Existen tres campos en los que scripts escritos en PHP son usados.

     •    Scripts en la parte del servidor. Este es el campo más tradicional y el principal campo de trabajo. Se
         necesitan tres cosas para que esto funcione. El parseador PHP (CGI ó módulo), un servidor web y un
         navegador. Se necesita correr el servidor web con PHP instalado. El resultado del programa PHP se
         puede obtener a través del navegador, conectando con el servidor web. Consultar la sección
         Instrucciones de instalación para más información.
     •    Scripts en linea de comandos. Podeis crear un script PHP y correrlo sin ningún servidor web ó
         navegador. Solamente necesitais el parseador PHP para usarlo de esta manera. Este tipo de uso es ideal
         para scripts ejecutados regularmente desde cron (en *nix ó Linux) ó el Planificador de tareas (en
         Windows). Estos scripts tambien pueden ser usados para tareas simples de procesado de texto.
         Consultar la sección Usos de PHP en la linea de comandos para más información.
     •    Escribir aplicaciones gráficas clientes. PHP no es probablemente el mejor lenguaje para escribir
         aplicaciones gráficas, pero si sabeis bien PHP, y os gustaria utilizar algunas características avanzadas
         en programas clientes, podeis utilizar PHP-GTK para escribir dichos programas. Es tambien posible
         escribir aplicaciones independientes de una plataforma. PHP-GTK es una extensión de PHP, no
         disponible en la distribución principal. Si te interesa PHP-GTK, puedes visitar las páginas web del
         projecto (http://gtk.php.net/).


     PHP puede ser utilizado en cualquiera de los principales sistemas operativos del mercado, incluyendo
     Linux, muchas variantes Unix (incluido HP-UX, Solaris y OpenBSD), Microsoft Windows, Mac OS X,
     RISC OS y probablemente alguno más. PHP soporta la mayoría de servidores web de hoy en día,
     incluyendo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape y iPlanet,
     Oreilly Website Pro server, Caudium, Xitami, OmniHTTPd y muchos otros. PHP tiene módulos
     disponibles para la mayoría de los servidores, para aquellos otros que soporten el estándar CGI, PHP
     puede usarse como procesador CGI.
     Asi que, con PHP teneis la libertad de escoger el sistema operativo y el servidor de vuestro gusto.
     Tambien teneis la posibilidad de usar programación de procediminetos ó programación orientada a
     objetos. Aunque no todas la características estándares de la programación orientada a objetos están
     implementadas en la versión actual de PHP, muchas librerías y aplicaciones grandes (incluyendo la
     libreria PEAR) están escritas íntegramente usando programación orientada a objetos.
     Con PHP no estais limitados a resultados en HTML. Entre las habilidades de PHP se incluyen, creación
     de imágenes, ficheros PDF y películas Flash (usando libswf y Ming) sobre la marcha. Tambien podeis
     presentar otros resultados, como XHTM y ficheros XML. PHP puede autogenerar estos ficheros y
     grabarlos en el sistema de ficheros en vez de presentarlos en la pantalla.
     Quizas la característica más potente y destacable de PHP es su soporte para una gran cantidad de bases
     de datos. Escribir un interfaz via web para una base de datos es una tarea simple con PHP. Las siguientes
     bases de datos están soportadas actualmente:

         Adabas D          Ingres         Oracle (OCI7 and OCI8)




                                                                                                                   3
Capítulo 1. Introducción

  dBase               InterBase     Ovrimos
  Empress             FrontBase     PostgreSQL
  FilePro (read-only) mSQL          Solid
  Hyperwave           Direct MS-SQL Sybase
  IBM DB2             MySQL         Velocis
  Informix            ODBC          Unix dbm
Tambien tenemos una extensión DBX de abstracción de base de datos que permite usar de forma
transparente cualquier base de datos soportada por la extension. Adicionalmente, PHP soporta ODBC
(The Open Database Connection standard), asi que podeis conectar a cualquier base de datos que soporte
este estandar.
PHP tambien tiene soporte para comunicarse con otros servicios usando protocolos tales como LDAP,
IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros. Tambien se pueden crear raw
sockets. PHP soporta WDDX para intercambio de datos entre lenguajes de programación en web. Y
hablando de interconexión, PHP puede utilizar objetos Java de forma transparente como objetos PHP Y
la extensión de CORBA puede ser utilizada para acceder a objetos remotos.
PHP tiene unas características muy útiles para el proceso de texto, desde expresiones regulares POSIX
Extended ó Perl hasta parseador de documentos XML. Para parsear y acceder documentos XML,
soportamos los estandares SAX y DOM. Podeis utilizar la extensión XSLT para transformar documentos
XML.
Si usais PHP en el campo del comercio electrónico, encontrareis muy útiles las funciones Cybercash,
CyberMUT, VeriSign Payflow Pro y CCVS para vuestros programas de pago.
Para terminar, tenemos muchas otras extensiones muy interesantes, las funciones del motor de búsquedas
mnoGoSearch, funciones para pasarelas de IRC, utilidades de compresión (gzip, bz2)„ conversión de
calendarios, traducción .....
Como podeis ver esta página no es suficiente para enumerar todas las características y beneficios que
PHP ofrece. Consultar las secciones Instalando PHP y Referencia de las funciones para una explicación
de las extensiones mencionadas aqui.




                                                                                                        4
Capítulo 2. Instalación




                          5
Capítulo 2. Instalación

Bajándose la última versión
      El código fuente y las distribuciones binarias para algunas plataformas (incluído Windows) se pueden
      encontrar en http://www.php.net/.




Instalación en sistemas UNIX
      Esta sección le guiará a través de la configuración e instalación del PHP. Conocimientos y software
      necesarios:


      •   Habilidades básicas en UNIX (ser capaz de manejar el "make" y un compilador de C)
      •   Un compilador ANSI de C
      •   Un servidor web




Instrucciones Rápidas de Instalación (Versión Módulo de Apache)

      1.    gunzip apache_1.3.x.tar.gz
      2.    tar xvf apache_1.3.x.tar
      3.    gunzip php-3.0.x.tar.gz
      4.    tar xvf php-3.0.x.tar
      5.    cd apache_1.3.x
      6.    ./configure --prefix=/www
      7.    cd ../php-3.0.x
      8.    ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
      9.    make
      10.   make install
      11.   cd ../apache_1.3.x
      12.   ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
      13.   make
      14.   make install

          En lugar de este paso quizás prefiera simplemente copiar el binario
          httpd encima del binario existente. Si lo hace, asegúrese antes de
          cerrar su servidor.

      15. cd ../php-3.0.x
      16. cp php3.ini-dist /usr/local/lib/php3.ini

          Puede editar el archivo /usr/local/lib/php3.ini para ajustar opciones
          del PHP. Si prefiere tenerlo en otro sitio, utilice
          --with-config-file-path=/path en el paso 8.

      17. Edite su archivo httpd.conf o srm.conf y añada:




                                                                                                             6
Capítulo 2. Instalación

                        AddType application/x-httpd-php3 .php3

          Puede elegir la extensión que desee aquí. .php3 es simplemente nuestra
          sugerencia.

      18. Utilice su método habitual para iniciar el servidor Apache (debe detener
          y reiniciar el servidor, no solamente hacerlo recargarse usando una
          señal HUP o USR1.)




Configuración
      Hay dos maneras de configurar el PHP.


      •    Utilizando el script de "setup" que viene con el PHP. Este script le hace una serie de preguntas (casi
          como el script "install" del PHP/FI 2.0) y ejecuta el "configure" al final. Para ejecutar este script,
          escriba ./setup.
          Este script también creará un archivo llamado "do-conf", que contendrá las opciones pasadas a la
          configuración. Puede editar este archivo para cambiar algunas opciones sin tener que re-ejecutar el
          "setup". Escriba luego ./do-conf para ejecutar la configuración con las nuevas opciones.


      •   Ejecutar el "configure" a mano. Para ver las opciones de que dispone, escriba ./configure --help.


      Los detalles sobre las distintas opciones de configuración son listados a continuación.



Módulo del Apache
      Para configurar el PHP como módulo de Apache, responda "yes" a "Build as an Apache module?" (la
      opción --with-apache=DIR es la que lo configura) y especifique el directorio base de la distribución de
      Apache. Si ha desempacado el Apache en /usr/local/www/apache_1.2.4, este será su directorio
      base de la distribución de Apache. El directorio por defecto es /usr/local/etc/httpd.



Módulo fhttpd
      Para configurar el PHP como módulo fhttpd, responda "yes" a "Build as an fhttpd module?" (la opción
      --with-fhttpd=DIR es la que lo configura) y especifique el directorio base del fuente del fhttpd. El
      directorio por defecto es /usr/local/src/fhttpd. Si está ejecutando fhttpd, configurar PHP como
      módulo le dará mejor rendimiento, más control y capacidad de ejecución remota.




                                                                                                                    7
Capítulo 2. Instalación

CGI version
      El valor por defecto es configurar el PHP como programa CGI. Si está ejecutando un servidor web para
      el que el PHP tiene soporte como módulo, debería elegir dicha solución por motivos de rendimiento. Sin
      embargo, la versión CGI permite a los usuarios del Apache el ejecutar distintas páginas con PHP bajo
      distintos identificadores de usuario. Por favor, asegúrese de haber leído el capítulo sobre Seguridad si va
      a ejecutar el PHP como CGI.



Opciones de soporte para Base de Datos
      El PHP tiene soporte nativo para bastantes bases de datos (así como para ODBC):


      Adabas D
              --with-adabas=DIR



      Compila con soporte para Adabas D. El parámetro es el directorio de instalación de Adabas D y por
      defecto vale /usr/local/adabasd.
      Página de Adabas (http://www.adabas.com/)



      dBase
              --with-dbase



      Habilita el soporte integrado para DBase. No se precisan librerías externas.



      filePro
              --with-filepro



      Habilita el soporte integrado de sólo lectura para filePro. No se precisan librerías externas.



      mSQL
              --with-msql=DIR



      Habilita el soporte para mSQL. El parámetro es el directorio de instalación de mSQL y por defecto vale
      /usr/local/Hughes. Este es el directorio por defecto de la distribución mSQL 2.0. configure detecta
      automáticamente qué versión de mSQL está ejecutándose y el PHP soporta tanto 1.0 como 2.0, pero si
      compila el PHP con mSQL 1.0 sólo podrá acceder a bases de datos de esa versión y viceversa.
      Vea también Directivas de Configuración de mSQL en el archivo de configuración.




                                                                                                               8
Capítulo 2. Instalación

Página de mSQL (http://www.hughes.com.au)



MySQL
        --with-mysql=DIR



Habilita el soporte para MySQL. El parámetro es el directorio de instalación de MySQL y por defecto
vale /usr/local. Este es el directorio de instalación de la distribución de MySQL.
Vea también Directivas de Configuración de MySQL en el archivo de configuración.
Página de MySQL (http://www.tcx.se)



iODBC
        --with-iodbc=DIR



Incluye soporte para iODBC. Esta característica se desarrolló inicialmente para el iODBC Driver
Manager, un gestor de controlador de ODBC de redistribución libre que ese ejecuta bajo varios sabores
de UNIX. El parámetro es el directorio de instalación de iODBC y por defecto vale /usr/local.
Página de FreeODBC (http://users.ids.net/~bjepson/freeODBC/) o página de iODBC
(http://www.iodbc.org)



OpenLink ODBC
        --with-openlink=DIR



Incluye soporte para OpenLink ODBC. El parámetro es el directorio de instalación de OpenLink ODBC
y por defecto vale /usr/local/openlink.
Página de OpenLink Software (http://www.openlinksw.com/)



Oracle
        --with-oracle=DIR



Incluye soporte para Oracle. Se ha probado y debería funcionar al menos con las versiones de la 7.0 a la
7.3. El parámetro es el directorio ORACLE_HOME. No necesita especificar este parámetro si su entorno
de Oracle ya está ajustado.
Página de Oracle (http://www.oracle.com)




                                                                                                        9
Capítulo 2. Instalación

PostgreSQL
        --with-pgsql=DIR



Incluye soporte para PostgreSQL. El parámetro es el directorio base de la instalación de PostgreSQL y
por defecto vale /usr/local/pgsql.
Vea también Directivas de Configuración de Postgres en el archivo de configuración.
Página de PostgreSQL (http://www.postgreSQL.org/)



Solid
        --with-solid=DIR



Incluye soporte para Solid. El parámetro es el directorio de instalación y vale por defecto
/usr/local/solid.

Página de Solid (http://www.solidtech.com)



Sybase
        --with-sybase=DIR



Incluye soporte para Sybase. El parámetro es el directorio de instalación y vale por defecto
/home/sybase.
Vea también Directivas de Configuración de Sybase en el archivo de configuración.
Página de Sybase (http://www.sybase.com)



Sybase-CT
        --with-sybase-ct=DIR



Incluye soporte para Sybase-CT. El parámetro es el directorio de instalación de Sybase-CT y por defecto
vale /home/sybase.
Vea también Directovas de Configuración de Sybase-CT en el archivo de configuración.



Velocis
        --with-velocis=DIR




                                                                                                       10
Capítulo 2. Instalación

Incluye soporte para Velocis. El parámetro es el directorio de instalación de Velocis y vale por defecto
/usr/local/velocis.

Página de Velocis (http://www.raima.com)



Una librería a medida de ODBC
        --with-custom-odbc=DIR



Incluye soporte para una librería a medida arbitraria de ODBC. El parámetro es el directorio base y por
defecto vale /usr/local.
Esta opción implica que se ha definido CUSTOM_ODBC_LIBS cuando se ejecutó el script de
configuración. También deberá tener una cabecera odbc.h válida en algún lugar de su sendero (path) de
inclusión. Si no tiene uno, créelo e incluya su cabecera específica desde ahí. Su cabecera puede requerir
algunas definiciones extra, particularmente si es multiplataforma. Defínalas en CFLAGS.
Por ejemplo, puede usar Sybase SQL Anywhere bajo QNX como sigue: CFLAGS=-DODBC_QNX
LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure
--with-custom-odbc=/usr/lib/sqlany50



ODBC Unificado
        --disable-unified-odbc



Deshabilita el módulo de ODBC Unificado, que es un interfaz común a todas las bases de datos con
interfaces basados en ODBC, tales como Solid y Adabas D. También funciona para librerías normales de
ODBC. Ha sido probado con iODBC, Solid, Adabas D y Sybase SQL Anywhere. Requiere que uno (y
sólo uno) de estos módulos o el módulo de Velocis esté habilitado, o que se especifique una librería a
medida de ODBC. Esta opción sólo se puede aplicar si alguna de estas opciones es usada: --with-iodbc,
--with-solid, --with-adabas, --with-velocis, o --with-custom-odbc.
Vea también Directivas de Configuración de ODBC Unificado en el archivo de configuración.



LDAP
        --with-ldap=DIR



Incluye soporte para LDAP (Lightweight Directory Access Protocol - Protocolo Ligero de Acceso a
Directorios). El parámetro es el directorio base de instalación de LDAP, y por defecto vale
/usr/local/ldap.

Puede encontrar más información sobre LDAP en RFC1777 (ftp://ftp.isi.edu/in-notes/rfc1777.txt) y en
RFC1778 (ftp://ftp.isi.edu/in-notes/rfc1778.txt).




                                                                                                           11
Capítulo 2. Instalación

Otras opciones de configuración

      --with-mcrypt=DIR
              --with-mcrypt



      Incluye soporte para la librería mcrypt. Vea la documentación de mcrypt para más información. Si utiliza
      el argumento opcional DIR, el PHP buscará mcrypt.h en DIR/include.



      --enable-sysvsem
              --enable-sysvsem



      Incluye soporte para semáforos Sys V (soportados por muchos derivados Unix). Vea la documentación
      sobre Semáforos y Memoria Compartida para más información.



      --enable-sysvshm
              --enable-sysvshm



      Incluye soporte para la memoria compartida Sys V (soportada por muchos derivados Unix). Vea la
      documentación sobre Semáforos y Memoria Compartida para más información.



      --with-xml
              --with-xml



      Incluye soporte para un parser XML no validador que utiliza la librería expat
      (http://www.jclark.com/xml/) de James Clark. Vea la referencia de funciones XML para más detalles.



      --enable-maintainer-mode
              --enable-maintainer-mode



      Activa avisos extra de dependencias y del compilador utilizados por algunos de los desarrolladores del
      PHP.




                                                                                                               12
Capítulo 2. Instalación

--with-system-regex
        --with-system-regex



Utiliza la librería de expresiones regulares del sistema en lugar de la incluída. Si está compilando PHP
como módulo de servidor, debe utilizar la misma librería cuando genere el PHP y cuando lo enlace con
el servidor. Active esto si la librería del sistema proporciona características especiales que pueda
necesitar. Se recomienda utilizar la librería incluída siempre que sea posible.



--with-config-file-path
        --with-config-file-path=DIR



El path utilizado para buscar el archivo de configuración cuando arranca el PHP.



--with-exec-dir
        --with-exec-dir=DIR



Sólo permite ejecutar programas en DIR cuando está en modo seguro. Por defecto vale
/usr/local/bin. Esta opción sólo fija el valor por defecto. Puede ser cambiado posteriormente
mediante la directiva safe_mode_exec_dir en el fichero de configuración .



--enable-debug
        --enable-debug



Habilita información de depuración adicional. Esto hace posible obtener información más detallada
cuando hay problemas con el PHP. (Nótese que esto no tiene que ver con las facilidades de depuración o
con la información disponible para los script PHP).



--enable-safe-mode
        --enable-safe-mode



Habilita el "modo seguro" por defecto. Esto impone varias restricciones sobre lo que el PHP puede hacer,
tales como abrir fichero sólo en el raiz de documentos. Lea el capítulo de Seguridad para más
información. Los usuarios de CGI deberán siempre habilitar el modo seguro. Esta opción sólo fija el
valor por defecto. Puede ser habilitado o deshabilitado posteriormente mediante la directiva safe_mode
en el archivo de configuración.




                                                                                                       13
Capítulo 2. Instalación

--enable-track-vars
        --enable-track-vars



Hace que el PHP lleve el control de dónde proceden las variables GET/POST/cookie usando las matrices
HTTP_GET_VARS, HTTP_POST_VARS y HTTP_COOKIE_VARS. Esta opción sólo fija el valor por
defecto. Puede ser habilitado o deshabilitado posteriormente mediante la directiva track_vars en el
archivo de configuración.



--enable-magic-quotes
        --enable-magic-quotes



Habilita las comillas mágicas por defecto. Esta opción sólo fija el valor por defecto. Puede ser habilitada
o deshabilitada posteriormente mediante la directiva magic_quotes_runtime en el archivo de
configuración. Vea también las directivas magic_quotes_gpc y magic_quotes_sybase.



--enable-debugger
        --enable-debugger



Habilita el soporte de depuración interno del PHP. Esta característica aún está en estado experimental.
Vea también las directivas de Configuración del Depurador en el archivo de configuración.



--enable-discard-path
        --enable-discard-path



Si está habilitado, el ejecutable CGI del PHP se puede situar tranquilamente fuera del árbol de la web y
la gente no podrá saltarse la seguridad del .htaccess. Lea la sección en el capítulo de seguridad sobre esta
opción.



--enable-bcmath
        --enable-bcmath



Habilita las funciones matemáticas de precisión arbitraria estilo bc. Vea también la opción bcmath.scale
en el archivo de configuración.




                                                                                                          14
Capítulo 2. Instalación

--enable-force-cgi-redirect
        --enable-force-cgi-redirect



Habilita la comprobación de seguridad para redirecciones internas del servidor. Deberá usar esta opción
si está ejecutando la versión CGI bajo Apache.
Cuando se utiliza el PHP como un ejecutable CGI, siempre comprueba primero is está siendo utilizado
bajo redirección (por ejemplo bajo Apache, usando directivas Action). Esto asegura que el ejecutable del
PHP no se puede usar para saltarse los mecanismos estánder de autentificación del servidor web
llamando al ejecutale directamente, como en http://my.host/cgi-bin/php/secret/doc.html.
Este ejemplo accede al archivo http://my.host/secret/doc.html pero sin respetar ningún ajuste
de seguridad del httpd para el directorio /secret.
No habilitando esta opción se deshabilita la comprobación y se permite el saltarse los ajustes de
seguridad y autenticación del httpd. Haga esto sólo si el software de su servidor no puede indicar que se
ha realizado una redirección segura y que todos sus archivos bajo la raiz de documentos y los directorios
de los usuarios pueden ser accedidos por cualquiera.
Lea la sección en el capítulo de seguridad acerca de esta opción.



--disable-short-tags
        --disable-short-tags



Deshabilita las etiquetas de PHP en formato corto <? ?>. Debe deshabilitar el formato corto si desea
usar PHP con XML. Con el formato corto deshabilitado, la única etiqueta de código de PHP es <?php
?>. Esta opción sólo fija el valor por defecto. Puede ser habilitada o deshabilitada posteriormente
mediante la directiva short_open_tag en el archivo de configuración.



--enable-url-includes
        --enable-url-includes



Hace posible ejecutar código en otros servidores HTTP o FTP directamente desde el PHP usando
include(). Vea también la opción include_path en el archivo de configuración.



--disable-syntax-hl
        --disable-syntax-hl



Desconecta el resalte de sintáxis.




                                                                                                       15
Capítulo 2. Instalación

      CPPFLAGS y LDFLAGS
      Para hacer que la instalación de PHP busque los archivos de cabecera o de librería en distintos
      directorios, modifique las variables de entorno CPPFLAGS y LDFLAGS respectivamente. Si está
      utilizando un shell "sensible", podrá ejecutar LDFLAGS=-L/my/lib/dir
      CPPFLAGS=-I/my/include/dir ./configure




Construyendo
      Cuando el PHP está configurado, ya está listo para construir el ejecutable CGI o la librería PERL. El
      comando make debería ocuparse de esto. Si fallara y no puede saber el motivo, vea la sección de
      Problemas.



Probando
      Si ha construído el PHP como un programa CGI, puede probar su funcionamiento tecleando make test.
      Siempre es buena idea probar su construcción. Así puede atrapar pronto los problemas del PHP en su
      plataforma sin tener que batallar con ellos luego.



Comprobando la velocidad
      Si ha construído el PHP como un programa CGI, puede comprobar la velocidad de su código escribiendo
      make bench. Nótese que se el modo seguro está habilitado por defecto, el test no podrá finalizar si se
      toma más de los 30 segundos disponibles. Esto se debe a que la función set_time_limit() no se puede
      usar en modo seguro. Use el ajuste de configuración max_execution_time para controlar este tiempo en
      sus propios script. make bench ignora el archivo de configuración.




Instalación en sistemas Windows 95/98/NT
      Esta guía de instalación le ayudará a instalar y configurar el PHP en sus servidores web bajo Windows
      9x/NT. Esta guía fue compilada por Bob Silva (mailto:bob_silva@mail.umesd.k12.or.us). La última
      revisión puede encontrarse en http://www.umesd.k12.or.us/php/win32install.html.
      Esta guía proporciona soporte de instalacion para:

      •   Personal Web Server (se recomienda la última versión)
      •   Internet Information Server 3 ó 4
      •   Apache 1.3.x
      •   Omni HTTPd 2.0b1




                                                                                                             16
Capítulo 2. Instalación

Pasos Generales de Instalación
      Los siguientes pasos deben realizarse en todas las instalaciones antes de las instrucciones específicas de
      cada servidor.


      •   Extraiga el archivo de distribución a un directorio de su elección. "C:PHP3" es un buen comienzo.
      •    Copie el archivo ’php3.ini-dist’ a su directorio ’%WINDOWS%’ y renómbrelo a ’php3.ini’. Su
          directorio ’%WINDOWS%’ es típicamente:
          c:windows para Windows 95/98
          c:winnt o c:winnt40 para servidores NT
      •   Edite su archivo ’php3.ini’:
          •   Necesitaá cambiar la opción ’extension_dir’ para que apunte a su php-install-dir, o a donde quiera
              que haya puesto sus archivos ’php3_*.dll’. P.ej.: c:php3
          •   Si está utilizando Omni Httpd, no siga el siguiente paso. Fije el ’doc_root’ para que apunte a la raiz
              web de sus servidores. P.ej.: c:apachehtdocs o c:webroot
          •    Elija qué módulos desearía cargar cuando comience el PHP. Puede descomentar las líneas:
              ’extension=php3_*.dll’ para cargar estos módulos. Algunos módulos requieren que tenga instaladas
              en sus sistema librerías adicionales para que el módulo funcione correctamente. El FAQ
              (http://www.php.net/FAQ.php) de PHP tiene más información sobre dónde obtener librerías de
              soporte. También puede cargar un módulo dinámicamente en su script utilizando: dl("php_*.dll");
          •    En el PWS y el IIS puede fijar el browscap.ini para que apunte a:
              ’c:windowssysteminetsrvbrowscap.ini’ bajo Windows 95/98 y a
              ’c:winntsystem32inetsrvbrowscap.ini’ bajo NT Server.



      Las DLL para las extensiones del PHP van precedidas de ’php3_’. Esto evita confusiones entre las
      extensiones del PHP y sus librerías de soporte.



Windows 95/98/NT y PWS/IIS 3
      El método recomendado para configurar estos servidores es usar el archivo INF incluído con la
      distribución (php_iis_reg.inf). Quizás desee editar este archivo y asegurarse que las extensiones y
      directorios de instalación se ajustan a su configuración. O puede seguir los pasos que siguen para hacerlo
      de forma manual.
      AVISO: Estos pasos conllevan el trabajar directamente con el registro de windows. Un error aquí puede
      dejar su sistema en un estado inestable. Le recomendamos encarecidamente que haga una copia de
      seguridad del registro con antelación. El equipo de Desarrollo del PHP no se hará responsable si se daña
      su registro.


      •   Ejecute Regedit.
      •   Navegue hasta: HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc
          /Parameters /ScriptMap.

      •   En el menú de edición elija: New->String Value.



                                                                                                                 17
Capítulo 2. Instalación

      •   Escriba la extensión que desea usar para sus script PHP. P.ej.: .php3
      •    Haga doble click en el nuevo valor de cadena y escriba la ruta al php.exe en el campo del valor. P.ej.:
          c:php3php.exe %s %s. La parte ’%s %s’ son MUY importantes, pues el PHP no funcionará
          correctamente sin ella.
      •   Repita estos pasos para cada extensión que desee asociar con los scripts PHP.
      •   Ahora navegue hasta: HKEY_CLASSES_ROOT
      •   En el menú de edición elija: New->Key.
      •   Déle a la clave el nombre de la extensión que preparó en la sección anterior. P.ej.: .php3
      •   Marque la nueva clave y en el panel del lado derecho haga doble click en "default value" y escriba
          phpfile.
      •   Repita el último paso para cada extensión que haya preparado en la sección previa.
      •   Ahora cree otra New->Key bajo HKEY_CLASSES_ROOT y denomínela phpfile.
      •    Marque la nueva clave phpfile y haga doble click en el panel derecho sobre "default value" y
          escriba PHP Script.
      •   Pulse el botón derecho sobre la clave phpfile y seleccione New->Key y llámela Shell.
      •   Pulse el botón derecho sobre la clave Shell y elija New->Key y llámela open.
      •   Pulse el botón derecho sobre la clave open y elija New->Key y llámela command.
      •    Marque la nueva clave command y en el panel derecho haga doble click sobre "default value" y entre
          la ruta hasta el php.exe. P.ej.: c:php3php.exe -q %1. (no olvide el %1).
      •   Salga del Regedit.


      Los usuarios de PWS e IIS3 tienen ahora un sistema completamente operativo. Los usuarios del IIS3
      también pueden usar una curiosa herramienta (http://www.genusa.com/iis/iiscfg.html) de Steven Genusa
      para configurar sus mapeados de script.



Windows NT e IIS 4
      Para instalar el PHP en un NT Server con IIS 4, siga estas instrucciones:


      •    En el Controlador de Servicios de Internet (MMC), elija el sitio Web o el directorio de comienzo de
          una aplicación.
      •    Abra las propiedades del directorio (haciendo click derecho y eligiendo propiedades) y luego pulse
          sobre la pestaña Carpeta Inicial, Directorio Virtual o Directorio.
      •   Pulse el botón Configuración y luego pulse sobre la pestaña Mapas de Aplicación.
      •   Pulse en Añadir, y en la caja Programa, escriba: c:path-to-php-dirphp.exe %s %s. DEBE
          mantene los %s %s al final, pues el PHP no funcionará correctamente si se equivoca al hacerlo.
      •    En la caja Extensión, escriba la extensión de fichero que desea asociar a los script de PHP. Debe
          repetir los pasos 5 y 6 para cada extensión que desee asociar con los scripts PHP ( .php3 y .phtml
          son habituales).



                                                                                                                18
Capítulo 2. Instalación

      •    Ajuste la seguridad apropiada (esto se realiza en el Controlador de Servicio de Internet (ISM)), y si su
          NT Server usa el sistema de archivos NTFS, añada derechos de ejecución para I_USR_ al directorio
          que contenga el php.exe.




Windows 9x/NT y Apache 1.3.x
      Debe editar sus archivos srm.conf o httpd.conf para configurar el Apache para que trabaje con el
      ejecutable CGI del PHP.
      Aunque puede haber algunas variaciones al configurar PHP bajo Apache, esta es lo suficientemente
      simple para ser usada por el novato. Por favor, consulte la Documentación del Apache para saber de las
      subsiguientes directivas de configuración.


      •     ScriptAlias /php3/ "c:/ruta-al-dir-del-php/"

      •     AddType application/x-httpd-php3 .php3
      •     AddType application/x-httpd-php3 .phtml

      •     Action application/x-httpd-php3 "/php3/php.exe"



      Para utilizar la capacidad de marcado del código fuente, cree simplemente un script de PHP y pegue este
      código en él: <?php show_source("script_original_php.php3"); ?>. Sustituya
      script_original_php.php3 por el nombre del archivo del que desea visualizar el código fuente (esta
      es la única forma de hacerlo). Nota: Bajo Win-Apache todas las barras invertidas de una ruta tal como:
      "c:directoryfile.ext", deben ser convertidas a barras hacia adelante.



Omni HTTPd 2.0b1 para Windows
      Esta ha resultado ser la configuración más sencilla:

      Paso 1: Instale el servidor Omni
      Paso 2: Pulse el botón derecho sobre el icono azul del OmniHTTPd que está en la barrita del sistema y elija Propiedades
      Paso 3: Pulse sobre Web Server Global Settings
      Paso 4: En la pestaña ’External’, escriba: virtual = .php3 | actual = c:ruta-al-dir-del-phpphp.exe
      Paso 5: En la pestaña Mime, escriba: virtual = wwwserver/stdcgi | actual = .php3
      Paso 6: Pulse en OK
      Repita los pasos 2 a 6 para cada extensión que desee asociar al PHP.



Módulos del PHP

      Tabla 2-1. Módulos del PHP

      php3_calendar.dll                                      Funciones de conversión de calendario




                                                                                                                19
Capítulo 2. Instalación


      php3_crypt.dll                                      Funciones de criptografía
      php3_dbase.dll                                      Funciones para DBase
      php3_dbm.dll                                        Emulación GDBM con la librería Berkeley DB2
      php3_filepro.dll                                     Acceso SÓLO LECTURA a bases de datos filepro
      php3_gd.dll                                         Funciones de librería GD para manipular GIF
      php3_hyperwave.dll                                  Funciones de HyperWave
      php3_imap4r2.dll                                    Funciones de IMAP 4
      php3_ldap.dll                                       Funciones de LDAP
      php3_msql1.dll                                      Cliente de mSQL 1
      php3_msql2.dll                                      Cliente de mSQL 2
      php3_mssql.dll                                      Cliente de MSSQL client (requiere las librerías de
                                                          MSSQL DB
      php3_mysql.dll                                      Funciones de MySQL
      php3_nsmail.dll                                     Funciones de correo de Netscape
      php3_oci73.dll                                      Funciones de Oracle
      php3_snmp.dll                                       Funciones get y walk de SNMP (¡sólo en NT!)
      php3_zlib.dll                                       Funciones de ZLib




¿Problemas?

Lea las PMF (FAQ)
      Algunos problemas son más comunes que otros. Los más comunes están listados en las PMF (Preguntas
      Más Frecuentes) del PHP, que están en http://www.php.net/FAQ.php



Informes de error
      Si cree que ha encontrado un error en el PHP, por favor infórmenos. Los desarrolladores del PHP
      probablemente no tengan conocimiento del mismo, y salvo si informa del mismo, pocas probabilidades
      habrá de que lo solucionen. Puede informar de los errores usando el sistema de rastreo de errores en
      http://bugs.php.net/.



Otros problemas
      Si aún se encuentra atascado, alguien de la lista de correos del PHP puede ser capaz de ayudarle. Deberá
      buscar primero en los archivos, por si acaso alguien ya ha respondido a otra persona que tuvo el mismo
      problema que usted. Los archivos están disponibles desde la página de soporte en http://www.php.net/.



                                                                                                            20
Capítulo 2. Instalación

Para suscribirse a la lista de correo de PHP, envíe un correo vacío a php-general-subscribe@lists.php.net
(mailto:php-general-subscribe@lists.php.net). La dirección de la lista de correo es
php-general@lists.php.net.

Si desea ayuda sobre la lista de correo, intente ser preciso y de los detalles necesarios sobre su entorno
(qué sistema operativo, qué versión de PHP, qué servidor web, si está ejecutando el PHP como CGI o
como módulo de servidor, etc.) y también código suficiente para que otros puedan reproducir y
comprobar su problema.




                                                                                                             21
Capítulo 3. Configuración




                           22
Capítulo 3. Configuración

El archivo de configuración
         El archivo de configuración (llamado php3.ini en PHP 3.0, y simplemente php.ini a partir del PHP
         4.0) es leído cuando arranca el PHP. Para las versiones de PHP como módulo de servidor esto sólo ocurre
         una vez al arrancar el servidor web. Para la versión CGI, esto ocurre en cada llamada.
         Cuando se utiliza PHP como módulo Apache, también puede cambiar los ajustes de configuración
         utilizando directivas en los archivos de configuración del Apache y en los .htaccess.
         Con el PHP 3.0 hay directivas Apache que se corresponden a cada uno de los ajustes de configuración
         del php3.ini, con la excepción que su nombre va precedido de "php3_".
         Con el PHP 4.0 sólo hay unas pocas directivas de Apache que le permiten cambiar los ajustes de
         configuración del PHP.

php_value nombre valor
              Fija el valor de la variable especificada.

php_flag nombre on|off
              Fija una opción de configuración de tipo Boolean.

php_admin_value nombre valor
              Fija el valor de la variable especificada. Los ajustes de configuración de tipo "Admin" sólo se
             pueden fijar desde los archivos principales de configuración del Apache, y no desde los .htaccess.

php_admin_flag nombre on|off
              Fija una opción de configuración de tipo Boolean.


         Puede ver los ajustes de los valores de configuración en la salida de phpinfo(). También puede acceder a
         los valores individuales de los ajustes de configuración utilizando get_cfg_var().


Directivas Generales de Configuración

asp_tags boolean
             Permite el uso de las etiquetas estilo ASP <% %> además de las habituales etiquetas <?php ?>.
             También se incluye el atajo para imprimir variables <%= $valor %>. Para más información, vea
             Escapando del HTML.

                   Nota: El soporte para etiquetas estilo ASP se añadió en la 3.0.4.




                                                                                                                23
Capítulo 3. Configuración

auto_append_file string
                  Especifica el nombre de un archivo que es troceado automáticamente después del archivo principal.
                 El archivo se incluye como si fuese llamado mediante la función include(), así que se utiliza
                 include_path.
                 El valor especial none desconecta la adición automática de archivos.

                      Nota: Si el script es terminado con exit(), no tendrá lugar la adición automática.




auto_prepend_file string
                  Especifica el nombre de un archivo que es troceado automáticamente antes del archivo principal.
                 Specifies the name of a file that is automatically parsed before the main file. El archivo se incluye
                 como si fuese llamado mediante la función include(), así que se utiliza include_path.
                 El valor especial none desconecta la adición automática de archivos.



cgi_ext string



display_errors boolean
                 Determina si los errores se visualizan en pantalla como parte de la salida en HTML o no.

doc_root string
                  "Directorio raiz" del PHP en el servidor. Sólo se usa si no está vacío. Si el PHP se configura con
                 safe mode, no se sirven archivos fuera de este directorio.

engine boolean
                  Esta directiva sólo es realmente útil en la versión de PHP como módulo Apache. Se utiliza por
                 sitios que desean habilitar la ejecución del PHP directorio por directorio o en base a cada servidor
                 virtual. Poniendo php3_engine off en los sitios apropiados del archivo httpd.conf, se puede
                 habilitar o deshabilitar el PHP.

error_log string
                  Nombre del fichero para registrar los errores de un script. Si se utiliza el valor especial syslog, los
                 errores se envían al registro de errores del sistema. En UNIX se refiere a syslog(3) y en Windows
                 NT al registro de eventos. El registro de errores del sistema no es soportado bajo Windows 95.




                                                                                                                      24
Capítulo 3. Configuración

error_reporting integer
             Fija el nivel de informe de errores. El parámetro es un entero que representa un campo de bits.
             Sume los valores de los niveles de informe de error que desea.

         Tabla 3-1. Niveles de Informe de Errores

             valor de bit                                         informe habilitado
             1                                                    errores normales
             2                                                    avisos normales
             4                                                    errores del troceador (parser)
             8                                                    avisos de estilo no críticos

             El valor por defecto para esta directiva es 7 (se muestran los errores normales, avisos normales y
             errores de parser).

open_basedir string
              Limita los archivos que se pueden abrir por el PHP al árbol de directorios especificado.
             Cuando un script intenta abrir un archivo con, por ejemplo, fopen o gzopen, se comprueba su
             localización. Si el fichero está fuera del árbol de directorios especificado, PHP se negará a abrirlo.
             Todos los enlaces simbólicos son resueltos, de modo que no es posible evitar esta limitación usando
             uno de ellos.
             El valor especial . indica que el directorio base será aquel en el que reside el script.
             Bajo Windows, separe los directorios mediante punto y coma. En el resto de sistemas, sepárelos con
             dos puntos ":". Como módulo de Apache, los senderos para open_basedir de los directorios padre se
             heredan ahora automáticamente.

                   Nota: El soporte para directorios múltiples se añadió en la 3.0.7.



             El valor por defecto es permitir abrir todos los archivos.



gpc_order string
              Fija el order de troceo de variables GET/POST/COOKIE. El valor por defecto de esta directiva es
             "GPC". Fijándola, por ejemplo, a "GP", hará que el PHP ignore por completo las cookies y que
             sobreescriba las variables recibidas por GET con las que tengan el mismo nombre y vengan por
             POST.

ignore_user_abort string
             Por defecto está a on. Si se cambia a off, los script terminarán tan pronto como intenten enviar algo
             después de que un cliente ha roto la conexión. ignore_user_abort().

include_path string
              Especifica una lista de directorios en los que las funciones require(), include() y
             fopen_with_path() buscan los archivos. El formato es similar a la variable de entorno de sistema




                                                                                                                  25
Capítulo 3. Configuración

             PATH: una lista de directorios separados por dos puntos en UNIX o por punto y coma en Windows.

         Ejemplo 3-1. include_path en UNIX

             include_path=.:/home/httpd/php-lib


         Ejemplo 3-2. include_path en Windows

             include_path=".;c:wwwphplib"

             El valor por defecto para esta directiva es . (sólo el directorio actual).

isapi_ext string



log_errors boolean
             Dice si los mensajes de error de los script deben ser registrados o no en el registro del servidor. Esta
             opción, por tanto, es específica del mismo.

magic_quotes_gpc boolean
              Fija el estado magic_quotes para operaciones GPC (Get/Post/Cookie). Si magic_quotes vale on,
             todas las ’ (comilla sencilla), " (comilla doble),  (barra invertida) y los NUL son automáticamente
             marcados con una barra invertida. Si además magic_quotes_sybase vale on, la comilla sencilla es
             marcada con otra comilla sencilla en lugar de la barra invertida.

magic_quotes_runtime boolean
              Si se habilita magic_quotes_runtime, muchas de las funciones que devuelven datos de algún
             tipo de fuente externa incluyendo bases de datos y archivos de texto devolverán las comillas
             marcadas con una barra invertida. Si también está activo magic_quotes_sybase, la comilla
             simple es marcada con una comilla simple en lugar de la barra invertida.

magic_quotes_sybase boolean
              Si magic_quotes_sybase está a on, la comilla simple es marcada con una comilla simple en
             lugar de la barra invertida cuando están habilitados magic_quotes_gpc o
             magic_quotes_runtime.

max_execution_time integer
              Fija el tiempo máximo en segundos que se le permite usar a un script antes de ser finalizado por el
             intérprete. Así se evita que scripts mal escritos puedan bloquear el servidor.

memory_limit integer
              Fija el tamaño máximo de memoria en bytes que se permite reclamar a un script. Así se evita que
             script mal escritos se coman toda la memoria dispomible de un servidor.

nsapi_ext string




                                                                                                                  26
Capítulo 3. Configuración

short_open_tag boolean
               Indica si se debe permitir el formato corto (<? ?>) de la etiqueta de apertura del PHP. Si desea
              utilizar PHP en combinación con XML, deberá desactivar esta opción. Si está desactivada, deberá
              utilizar el formato largo de la etiqueta de apertura (<?php ?>).

sql.safe_mode boolean



track_errors boolean
              Si está habilitada, el último mensaje de error estará siempre presente en la variable global
              $php_errormsg.

track_vars boolean
               Si está activada, la información de entrada de GET, POST y de las cookies se puede encontrar en
              las matrices asociativas $HTTP_GET_VARS,$HTTP_POST_VARS y $HTTP_COOKIE_VARS
              respectivamente.

upload_tmp_dir string
               El directorio temporal utilizado para almacenar archivos cuando se envían al servidor. Debe tener
              permiso de escritura para el usuario bajo el que corra el PHP.

user_dir string
              El nombre base del directorio utilizado bajo el directorio inicial de un usuario para los archivos
              PHP. Por ejemplo: paginas_html.

warn_plus_overloading boolean
               Si está activada, esta opción hace que el PHP muestre un aviso cuando el operador suma (+) se
              utiliza en cadenas. Así es más fácil encontrar scripts que necesitan ser reescritos utilizando en su
              lugar el concatenador de cadenas (.).




Directivas de Configuración de Correo

SMTP string
               Nombre DNS o dirección IP del servidor de SMTP que el PHP bajo Windows deberá usar para
              enviar correo con la función mail().

sendmail_from string
              La dirección del remitente ("De:") para los correos enviados desde PHP bajo Windows.

sendmail_path string
              Localización del programa sendmail. Generalmente /usr/sbin/sendmail o
              /usr/lib/sendmail. configure intenta localizarle este archivo lo mejor que puede y fijar un
              valor por defecto, pero en caso de fallo, lo puede usted fijar aquí.



                                                                                                                     27
Capítulo 3. Configuración

             Los sistemas que no usan sendmail deberán fijar esta directiva al nombre del programa alternativo
             que ofrezca su sistema de correo, si es que existe. Por ejemplo, los usuarios del Qmail
             (http://www.qmail.org/) pueden fijarlo normalmente a /var/qmail/bin/sendmail.




Directivas de Configuración de Modo Seguro

safe_mode boolean
             Para activar el modo seguro del PHP. Lea el Capítulo de seguridad para más información.

safe_mode_exec_dir string
              Si el PHP se utiliza en modo seguro, la función system() y el resto de funciones que ejecutan
             programas del sistema se niegan a ejecutar programas que no estén en este directorio.



Directivas de Configuración del Debugger

debugger.host string
             Nombre DNS o dirección IP del servidor usado por el debugger.

debugger.port string
             Número de puerto usado por el debugger.

debugger.enabled boolean
             Indica si el debugger está habilitado o no.



Directivas de Carga de Extensiones

enable_dl boolean
              Esta directiva sólo es útil en la versión del PHP como módulo del Apache. Puede habilitar o
             deshabilitar para un servidor virtual o para un directorio la carga dinámica de extensiones de PHP
             mediante dl().
             La razón principal para deshabilitar la carga dinámica es la seguridad. Con la carga dinámica es
             posible ignorar las restricciones safe_mode y open_basedir.
             El valor por defecto es permitir la carga dinámica, excepto cuando se usa el modo seguro. En modo
             seguro, siempre es imposible usar dl().



extension_dir string
             En qué directorio debe buscar el PHP las extensiones cargables dinámicamente.




                                                                                                                28
Capítulo 3. Configuración

extension string
              Qué extensiones dinámicas debe cargar el PHP cuando arranca.



Directivas de Configuración de MySQL

mysql.allow_persistent boolean
              Si permitir o no conexiones MySQL persistentes.

mysql.default_host string
              El servidor por defecto para utilizar cuando se conecte al servidor de bases de datos si no se
             especifica otro distinto.

mysql.default_user string
              El nombre de usuario por defecto para utilizar cuando se conecta al servidor de base de datos si no
             se especifica otro.

mysql.default_password string
             La clave por defecto para utilizar cuando se conecta al servidor de base de datos si no se especifica
             otro.

mysql.max_persistent integer
              El número máximo de conexiones persistentes de MySQL por proceso.

mysql.max_links integer
              El número máximo de conexiones de MySQL por proceso, incluyendo las persistentes.



Directivas de Configuración de mSQL

msql.allow_persistent boolean
              Si se permiten o no conexiones persistentes de mSQL.

msql.max_persistent integer
              El número máximo de conexiones persistentes mSQL por proceso.

msql.max_links integer
              El número máximo de conexiones de mSQL por proceso, incluyendo las persistentes.




                                                                                                               29
Capítulo 3. Configuración

Directivas de Configuración de Postgres

pgsql.allow_persistent boolean
              Si se permiten o no conexiones persistentes de Postgres.

pgsql.max_persistent integer
              El número máximo de conexiones persistentes Postgres por proceso.

pgsql.max_links integer
              El número máximo de conexiones de Postgres por proceso, incluyendo las persistentes.



SESAM Configuration Directives

sesam_oml string
             Name of BS2000 PLAM library containing the loadable SESAM driver modules. Required for
             using SESAM functions. The BS2000 PLAM library must be set ACCESS=READ,SHARE=YES
             because it must be readable by the apache server’s user id.

sesam_configfile string
             Name of SESAM application configuration file. Required for using SESAM functions. The
             BS2000 file must be readable by the apache server’s user id.
             The application configuration file will usually contain a configuration like (see SESAM reference
             manual):

             CNF=B
             NAM=K
             NOTYPE




sesam_messagecatalog string
              Name of SESAM message catalog file. In most cases, this directive is not neccessary. Only if the
             SESAM message file is not installed in the system’s BS2000 message file table, it can be set with
             this directive.
             The message catalog must be set ACCESS=READ,SHARE=YES because it must be readable by
             the apache server’s user id.




                                                                                                                30
Capítulo 3. Configuración

Directivas de Configuración de Sybase

sybase.allow_persistent boolean
             Si se permiten o no conexiones persistentes de Sybase.

sybase.max_persistent integer
             El número máximo de conexiones persistentes Sybase por proceso.

sybase.max_links integer
             El número máximo de conexiones de Sybase por proceso, incluyendo las persistentes.



Directivas de Configuración de Sybase-CT

sybct.allow_persistent boolean
             Si se permiten o no conexiones persistentes de Sybase-CT. El valor por defecto es on.

sybct.max_persistent integer
             El número máximo de conexiones persistentes Sybase-CT por proceso. El valor por defecto es -1,
             que significa ilimitadas.

sybct.max_links integer
             El número máximo de conexiones de Sybase-CT por proceso, incluyendo las persistentes. El valor
             por defecto es -1, que significa ilimitadas.

sybct.min_server_severity integer
              Los mensajes de servidor con gravedad mayor o igual que sybct.min_server_severity
             serán reportados como avisos. Este valor también se puede cambiar desde un script usando la
             función sybase_min_server_severity(). El valor por defecto es 10, que reporta los errores de
             información con gravedad o mayores.

sybct.min_client_severity integer
              Los mensajes de librería de cliente con gravedad mayor o igual que
             sybct.min_client_severity serán reportados como avisos. Este valor también se puede
             cambiar desde un script usando la función sybase_min_client_severity(). El valor por defecto es 10,
             que desconecta los avisos.

sybct.login_timeout integer
              El número máximo de segundos de espera por un intento de conexión con éxito antes de indicar un
             fallo. Nótese que si se ha excedido max_execution_time cuando finaliza la espera de un
             intento de conexión, el script será finalizado antes de que se pueda tomar una acción en caso de
             fallo. El valor por defecto es 1 minuto.




                                                                                                             31
Capítulo 3. Configuración

sybct.timeout integer
              El número máximo de segundos de espera por una operación de consulta o select_db con éxito
             antes de indicar un fallo. Nótese que si se ha excedido max_execution_time cuando finaliza la
             espera de un intento de conexión, el script será finalizado antes de que se pueda tomar una acción en
             caso de fallo. El valor por defecto es sin límite.

sybct.hostname string
             El nombre de la máquina desde la que dice estarse conectando, para que se visualize con sp_who().
             El valor por defecto es "none".



Directivas de Configuración de Informix

ifx.allow_persistent boolean
             Si se permiten o no conexiones persistentes de Informix.

ifx.max_persistent integer
             El número máximo de conexiones persistentes de Informix por proceso.

ifx.max_links integer
             El número máximo de conexiones Informix por proceso, incluyendo las persistentes.

ifx.default_host string
              El servidor por defecto al que conectarse si no se especifica uno en ifx_connect() o en
             ifx_pconnect().

ifx.default_user string
              El id de usuario por defecto para utilizar si no se especifica uno en ifx_connect() o en
             ifx_pconnect().

ifx.default_password string
             La clave por defecto para utilizar si no se especifica uno en ifx_connect() o en ifx_pconnect().

ifx.blobinfile boolean
             Fíjelo a TRUE si desea recibir las columnas blob (objetos binarios grandes) en un archivo, y a
             FALSE si las desea en memoria. Puede cambiar el ajuste en tiempo de ejecución utilizando
             ifx_blobinfile_mode().

ifx.textasvarchar boolean
              Fíjelo a TRUE si desea recibir las columnas TEXT como cadenas normales en las instrucciones
             select, y a FALSE si quiere usar parámetros de identificador de blobs. Puede cambiar el ajuste en
             tiempo de ejecución utilizando ifx_textasvarchar().




                                                                                                                32
Capítulo 3. Configuración

ifx.byteasvarchar boolean
              Fíjelo a TRUE si desea devolver las columnas BYTE como cadenas normales en las instrucciones
             select, y a FALSE si quiere usar parámetros de identificador de blobs. Puede cambiar el ajuste en
             tiempo de ejecución utilizando ifx_byteasvarchar().

ifx.charasvarchar boolean
              Fíjelo a TRUE si desea suprimir los espacios a la derecha de las columnas CHAR cuando las solicita.

ifx.nullformat boolean
              Fíjelo a TRUE si desea que las columnas NULL (nulas) se devuelvan como la cadena literal "NULL",
             y a FALSE si desea que se devuelvan como la cadena vacía "". Puede cambiar el ajuste en tiempo de
             ejecución utilizando ifx_nullformat().



Directivas de Configuración de Matemática BC

bcmath.scale integer
              Número de dígitos decimales para todas las funciones de bcmath.



Directivas de Configuración de Capacidades de los Navegadores

browscap string
              Nombre del archivo de capacidades del navegador. Vea también get_browser().



Directivas Unificadas de Configuración de ODBC

uodbc.default_db string
              Fuentes de datos ODBC a utilizar si no se especifica una en odbc_connect() o en odbc_pconnect().

uodbc.default_user string
              Nombre de usuario si no se especifica uno en odbc_connect() o en odbc_pconnect().

uodbc.default_pw string
              Clave para usar si no se especifica una en odbc_connect() o en odbc_pconnect().

uodbc.allow_persistent boolean
              Si se permiten o no conexiones persistentes de ODBC.

uodbc.max_persistent integer
              El número máximo de conexiones persistentes de ODBC por proceso.




                                                                                                                33
Capítulo 3. Configuración

uodbc.max_links integer
             El número máximo de conexiones ODBC por proceso, incluyendo las persistentes.




                                                                                                      34
Capítulo 4. Seguridad




                        35
Capítulo 4. Seguridad

      PHP es un potente lenguaje y el interprete, tanto incluido en el servidor web como modulo o ejecutado
      como un binario CGI, puede acceder a ficheros, ejecutar comandos y abrir comunicaciones de red en el
      servidor. Todas estas caracteristicas hacen que lo que se ejecute en el servidor web sea inseguro por
      defecto. PHP ha sido disenado especificamente, para ser un lenguaje mas seguro para escribir programas
      CGI, que Perl o C y con la correcta seleccion de las opciones de configuración del tiempo de
      compilación y ejecucion se consigue la exacta combinación de libertad y seguridad que se necesita.
      Ya que existen diferentes modos de utilizar PHP, existen multitud de opciones de configuración que
      permiten controlar su funcionamiento. Una gran selección de opciones garantiza que se pueda usar PHP
      para diferentes usos, pero tambien significa que existen combinaciones de estas opciones y
      configuraciones del servidor que producen instalaciones inseguras. Este capitulo explica las diferentes
      combinaciones de opciones de configuración y las situaciones donde pueden ser usadas de manera
      segura.



Binarios CGI

Posibles ataques
      Usando PHP como un binario CGI es una opción para instalaciones que por cualquier causa no quieren
      integrar PHP como modulo en el software servidor (p.ej: Apache), o usaran PHP con diferentes clases de
      CGI wrappers para crear entornos chroot y setuid seguros para los scripts. Esta configuración implica
      generalmente el instalar el binario ejecutable de PHP en el directorio cgi-bin del servidor web. El
      documento del CERT CA-96.11
      (http://www.cert.org/advisories/CA-96.11.interpreters_in_cgi_bin_dir.html) recomienda no instalar
      interpretes en cgi-bin. Aunque el binario PHP puede ser usado como interprete independiente, PHP esta
      diseñado para prevenir los ataques que esta configuración hace posible.

      •   Accediendo a ficheros del sistema: http://my.host/cgi-bin/php?/etc/passwd
          La información introducida despues del signo de interrogación (?) es transferida como argumento de
          la línea de comando al intérprete por el interfaz del CGI. Normalmente los interpretes abren y ejecutan
          el fichero especificado como el primer argumento en la línea de comando.
          Cuando se ejecuta como un CGI script, PHP rechaza interpretar los argumentos de la línea de
          comando.


      •   Accediendo cualquier documento web en el servidor:
          http://my.host/cgi-bin/php/secret/doc.html

          La información con el camino (path) de la URL despues del nombre del binario PHP,
          /secret/doc.html es usada convencionalmente para especificar el nombre del fichero que sera
          abierto e interpretado por el programa CGI. Normalmente, algunas directivas del servidor web
          (Apache:Action) son usadas para redireccionar peticiones de documentos como
          http://my.host/secret/script.php3 al interprete PHP. Con esta configuración, el servidor
          web comprueba primero los permisos de acceso al directorio /secret, y despues crea la petición
          redireccionada http://my.host/cgi-bin/php/secret/script.php3. Desafortunadamente, si
          la petición es hecha de esta forma en un principio, el servidor web no comprueba los permisos de




                                                                                                              36
Capítulo 4. Seguridad

        acceso del fichero /secret/script.php3, sino solamente del fichero /cgi-bin/php. De esta
        manera cualquier usuario que pueda acceder /cgi-bin/php tambien puede acceder a cualquier
        documento protegido en el servidor web.
        En PHP, a la hora de compilar, la opción de configuracion --enable-force-cgi-redirect y las directivas
        de configuracion a la hora de ejecutar doc_root y user_dir pueden ser usadas para prevenir este ataque,
        si el arbol de documentos del servidor tiene cualquier directorio con acceso restringido. Ver mas
        adelante la explicacion de las diferentes combinaciones.




Caso 1: solamente se sirven ficheros publicos
      Si tu servidor no contiene informacion que este protegida con clave o acceso de control de IPs, no se
      necesitan estas opciones de configuracion. Si tu servidor web no permite realizar redireccionamientos, o
      el servidor no tiene modo de comunicar al binario PHP que la peticion es una peticion segura
      redireccionada, podeis especificar la opcion --disable-force-cgi-redirect en el script de configuracion. De
      todas maneras, teneis que aseguraros que vuestros scripts PHP no confíen en la manera al llamar al
      script, ni de forma directa http://my.host/cgi-bin/php/dir/script.php3 o por redireccion
      http://my.host/dir/script.php3.
      Redireccionamiento puede ser configurado en Apache usando las directivas AddHandler y Action (ver
      mas abajo).



Caso 2: usando --enable-force-cgi-redirect
      Esta opcion a la hora de compilar previene que alguien llame PHP directamente con una url como la
      siguiente http://my.host/cgi-bin/php/secretdir/script.php3. PHP solamente analizara en
      este modo si ha pasado por una regla de redireccionamiento en el servidor.
      Normalmente la redireccion en la configuracion de Apache es hecha con la siguientes directivas:

           Action php3-script /cgi-bin/php
           AddHandler php3-script .php3


      Esta opcion ha sido solo comprobada con el servidor web Apache, y depende de Apache para fijar la
      variable de entorno CGI no estandar REDIRECT_STATUS en las peticiones de redireccionamiento. Si tu
      servidor web no soporta ningun modo para informar si una peticion es directa o redireccionada, no
      podeis usar esta opcion y debereis usar alguno de los otros modos de ejecucion de la version CGI
      documentados aqui.



Caso 3: Usando doc_root or user_dir
      Incluir contenidos activos, como script y ejecutables, en el directorio de documentos del servidor web, es
      algunas veces considerada una practica insegura. Si por algun fallo de configuracion, los scripts no son
      ejecutados pero mostrados como documentos HTML, cualquiera podra conseguir codigo registrado o
      informacion de seguridad, como p.ej: claves de acceso. Por ello, muchos administradores prefieren




                                                                                                             37
Capítulo 4. Seguridad

      utilizar otra estructura de directorios que contenga solamente los scripts, los cuales seran solamente
      accesibles via PHP CGI, y por ello siempre seran interpretados y no mostrados.
      Habra que tener en cuenta que si el metodo que asegura que las peticiones no son redireccionadas, como
      hemos descrito en la seccion anterior, no esta disponible, sera necesario configurar un script doc_root
      que sea diferente del "web document root".
      Podeis definir el script PHP "document root" con la directiva de configuracion doc_root en el fichero de
      configuracion, o definir la variable de entorno PHP_DOCUMENT_ROOT. Si esta definida, la version
      CGI de PHP siempre obtendra el nombre del fichero a abrir con doc_root y el camino (path) utilizado
      en la peticion, asi podeis estar seguros que ningun script sera ejecutado fuera de este directorio (excepto
      para user_dir, ver a continuacion)
      Otra opcion que se puede usar aqui es user_dir. Cuando user_dir no esta definido, lo unico que controla
      la apertura del fichero es doc_root. Si intentamos abrir una url tal como esta
      http://my.host/~user/doc.php3 no se abrira un fichero en el directorio de usuarios, en su lugar se
      abrira un fichero llamado ~user/doc.php3 en el directorio doc_root. (si, un directorio que empieza por
      tilde [~]).
      Si user_dir esta definido por ejemplo como public_php, una peticion tal como
      http://my.host/~user/doc.php3, abrira un fichero llamado doc.php3 en el directorio llamado
      public_php del directorio "home" del usuario. Si el directorio del usuario es /home/user, el fichero
      ejecutado sera /home/user/public_php/doc.php3.
      La expansion de user_dir ocurre sin tener en cuenta la configuracion de doc_root, de este modo se
      puede controlar los accesos al directorio principal (document root) y al directorio de usuario
      separadamente.



Caso 4: Analizador PHP fuera del arbol web.
      Una opcion muy segura es poner el analizador binario PHP, en algun lugar fuera del arbol de ficheros
      web. Por ejemplo en /usr/local/bin. La unica pega real de esta opcion es que habra que poner una
      linea similar a:

              #!/usr/local/bin/php


      como primera linea en cualquier fichero que contenga codigo PHP. Tambien sera necesario asignar al
      fichero permisos de ejecucion. De esta manera, es tratado de la misma manera que cualquier otro CGI
      script escrito en Perl o sh o otro lenguaje utilizado para scripts y que utilicen el mecanismo #! para
      ejecutarse.
      Para conseguir que PHP maneje correctamente con esta configuracion, la informacion de PATH_INFO y
      PATH_TRANSLATED, el analizador PHP deberia ser compilado con la opcion de configuracion
      --enable-discard-path.




                                                                                                               38
Capítulo 4. Seguridad

Modulo Apache
    Cuando PHP es usado como modulo Apache, hereda los permisos de usuario de Apache (normalmente
    "nobody")




                                                                                                39
Parte II. Referencia del Lenguaje

Capítulo 5. Síntaxis básica




                                    40
Capítulo 5. Síntaxis básica

Saliendo de HTML
     Para interpretar un archivo, php símplemente interpreta el texto del archivo hasta que encuentra uno de
     los carácteres especiales que delimitan el inicio de código PHP. El intérprete ejecuta entonces todo el
     código que encuentra, hasta que encuentra una etiqueta de fin de código, que le dice al intérprete que siga
     ignorando el código siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo
     que está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta como código.
     Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques de código PHP. De estas
     cuatro, sólo 2 (<?php. . .?> y <script language="php">. . .</script>) están siempre disponibles; el resto
     pueden ser configuradas en el fichero de php.ini para ser o no aceptadas por el intérprete. Mientras que
     el formato corto de etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes,
     no son portables como la versión de formato largo de etiquetas. Además, si se pretende embeber código
     PHP en XML o XHTML, será obligatorio el uso del formato <?php. . .?> para la compatibilidad con
     XML.
     Las etiquetas soportadas por PHP son:


     Ejemplo 5-1. Formas de escapar de HTML


     1.   <?php echo("si quieres servir documentos XHTML o XML, haz como aqu&iacute;n"); ?>

     2.   <? echo ("esta es la más simple, una instrucci&oacute;n de procesado SGML n"); ?>
          <?= expression ?> Esto es una abreviatura de "<? echo expression ?>"

     3.   <script language="php">
              echo ("muchos editores (como FrontPage) no
                    aceptan instrucciones de procesado");
          </script>

     4.   <% echo ("Opcionalmente, puedes usar las etiquetas ASP"); %>
          <%= $variable; # Esto es una abreviatura de "<% echo . . ." %>




     El método primero, <?php. . .?>, es el más conveniente, ya que permite el uso de PHP en código XML
     como XHTML.
     El método segundo no siempre está disponible. El formato corto de etiquetas está disponible con la
     función short_tags() (sólo PHP 3), activando el parámetro del fichero de configuración de PHP
     short_open_tag, o compilando PHP con la opción --enable-short-tags del comando configure. Aunque
     esté activa por defecto en php.ini-dist, se desaconseja el uso del formato de etiquetas corto.
     El método cuarto sólo está disponible si se han activado las etiquetas ASP en el fichero de configuración:
     asp_tags.

          Nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4.




                                                                                                             41
Capítulo 5. Síntaxis básica




          Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen aplicaciones o librerías
          con intención de redistribuirlas, o cuando se desarrolle para servidores que no están bajo nuestro
          control, porque puede ser que el formato corto de etiquetas no esté soportado en el servidor. Para
          generar código portable y redistribuíble, asegúrate de no usar el formato corto de etiquetas.



     La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna presente. Además, la
     etiqueta de fin de bloque lleva implícito el punto y coma; no necesitas por lo tanto añadir el punto y coma
     final de la última línea del bloque PHP.
     PHP permite estructurar bloques como:

     Ejemplo 5-2. Métodos avanzados de escape


     <?php
     if ($expression) {
         ?>
         <strong>This is true.</strong>
         <?php
     } else {
         ?>
         <strong>This is false.</strong>
         <?php
     }
     ?>




     Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?> de fin de bloque, empieza
     a escribir lo que encuentra tal cual hasta que encuentra otra etiqueta de inicio de bloque. El ejemplo
     anterior es, por supuesto, inventado. Para escribir bloques grandes de texto generamente es más eficiente
     separalos del código PHP que enviar todo el texto mediante las funciones echo(), print() o similares.




Separación de instrucciones
     Las separación de instrucciones se hace de la misma manera que en C o Perl - terminando cada
     declaración con un punto y coma.
     La etiqueta de fin de bloque (?>) implica el fin de la declaración, por lo tanto lo siguiente es equivalente:


     <?php
         echo "This is a test";
     ?>

     <?php echo "This is a test" ?>




                                                                                                              42
Capítulo 5. Síntaxis básica




Comentarios
    PHP soporta el estilo de comentarios de ’C’, ’C++’ y de la interfaz de comandos de Unix. Por ejemplo:



    <?php
        echo "This is a test"; // This is a one-line c++ style comment
        /* This is a multi line comment
           yet another line of comment */
        echo "This is yet another test";
        echo "One Final Test"; # This is shell-style style comment
    ?>




    Los estilos de comentarios de una linea actualmente sólo comentan hasta el final de la linea o el bloque
    actual de código PHP, lo primero que ocurra.


    <h1>This is an <?php # echo "simple";?> example.</h1>
    <p>The header above will say ’This is an example’.




    Hay que tener cuidado con no anidar comentarios de estilo ’C’, algo que puede ocurrir al comentar
    bloques largos de código.


    <?php
     /*
        echo "This is a test"; /* This comment will cause a problem */
     */
    ?>




    Los estilos de comentarios de una linea actualmente sólo comentan hasta el final de la linea o del bloque
    actual de código PHP, lo primero que ocurra. Esto implica que el código HTML tras // ?> SER???
    impreso: ?> sale del modo PHP, retornando al modo HTML, el comentario // no le influye.




                                                                                                          43
Capítulo 6. Types




                    44
Capítulo 6. Types

     PHP soporta los siguientes tipos:
     •    array
     •    números en punto flotante
     •    entero
     •    objeto
     •    cadena


     El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide PHP en tiempo
     de ejecución dependiendo del contexto en el que se utilice esa variable.
     Si se quisiese obligar a que una variable se convierta a un tipo concreto, se podría forzar la variable o
     usar la función settype() para ello.
     Nótese que una variable se puede comportar de formas diferentes en ciertas situaciones, dependiendo de
     qué tipo sea en ese momento. Para más información, vea la sección Conversión de Tipos.



Enteros
     Los enteros se puede especificar usando una de las siguientes sintaxis:


     $a   =   1234;   #   número decimal
     $a   =   -123;   #   un número negativo
     $a   =   0123;   #   número octal (equivalente al 83 decimal)
     $a   =   0x12;   #   número hexadecimal (equivalente al 18 decimal)




Números en punto flotante
     Los números en punto flotante ("double") se pueden especificar utilizando cualquiera de las siguientes
     sintaxis:


     $a = 1.234; $a = 1.2e3;




Cadenas
     Las cadenas de caracteres se pueden especificar usando uno de dos tipos de delimitadores.




                                                                                                                 45
Capítulo 6. Types

Si la cadena está encerrada entre dobles comillas ("), las variables que estén dentro de la cadena serán
expandidas (sujetas a ciertas limitaciones de interpretación). Como en C y en Perl, el carácter de barra
invertida ("") se puede usar para especificar caracteres especiales:

Tabla 6-1. Caracteres protegidos

secuencia                                            significado
n                                                   Nueva línea
r                                                   Retorno de carro
t                                                   Tabulación horizontal
                                                   Barra invertida
$                                                   Signo del dólar
"                                                   Comillas dobles
[0-7]{1,3}                                           la secuencia de caracteres que coincida con la
                                                     expresión regular es un carácter en notación octal
x[0-9A-Fa-f]{1,2}                                    la secuencia de caracteres que coincida con la
                                                     expresión regular es un carácter en notación
                                                     hexadecimal



Se puede proteger cualquier otro carácter, pero se producirá una advertencia en el nivel de depuración
más alto.
La segunda forma de delimitar una cadena de caracteres usa el carácter de comilla simple ("’"). Cuando
una cadena va encerrada entre comillas simples, los únicos caracteres de escape que serán comprendidos
son "" y "’". Esto es por convenio, así que se pueden tener comillas simples y barras invertidas en una
cadena entre comillas simples. Las variables no se expandirán dentro de una cadena entre comillas
simples.
Otra forma de delimitar cadenas es usando la sintaxis de documento incrustado ("<<<"). Se debe
proporcionar un identificador después de <<<, después la cadena, y después el mismo identificador para
cerrar el entrecomillado.

Ejemplo 6-1. He aquí un ejemplo de entrecomillado de cadenas con sintaxis de documento
incrustado

$str = <<<EOD
Ejemplo de cadena
Expandiendo múltiples líneas
usando sintaxis de documento incrustado.
EOD;




     Nota: La sintaxis de documento incristado fue añadida en PHP 4.




                                                                                                           46
Capítulo 6. Types

      Las cadenas se pueden concatenar usando el operador ’.’ (punto). Nótese que el operador ’+’ (suma) no
      sirve para esto. Por favor mire Operadores de cadena para más información.
      Se puede acceder a los caracteres dentro de una cadena tratándola como un array de caracteres indexado
      numéricamente, usando una sintaxis similar a la de C. Vea un ejemplo más abajo.


      Ejemplo 6-2. Algumos ejemplos de cadenas

      <?php
      /* Asignando una cadena. */
      $str = "Esto es una cadena";

      /* Añadiendo a la cadena. */
      $str = $str . " con algo más de texto";

      /* Otra forma de añadir, incluye un carácter de nueva línea protegido. */
      $str .= " Y un carácter de nueva línea al final.n";

      /* Esta cadena terminará siendo ’<p>Número: 9</p>’ */
      $num = 9;
      $str = "<p>Número: $num</p>";

      /* Esta será ’<p>Número: $num</p>’ */
      $num = 9;
      $str = ’<p>Número: $num</p>’;

      /* Obtener el primer carácter de una cadena                  */
      $str = ’Esto es una prueba.’;
      $first = $str[0];

      /* Obtener el último carácter de una cadena. */
      $str = ’Esto es aún una prueba.’;
      $last = $str[strlen($str)-1];
      ?>




Conversión de cadenas
      Cuando una cadena se evalúa como un valor numérico, el valor resultante y el tipo se determinan como
      sigue.
      La cadena se evaluará como un doble si contiene cualquiera de los caracteres ’.’, ’e’, o ’E’. En caso
      contrario, se evaluará como un entero.
      El valor viene dado por la porción inicial de la cadena. Si la cadena comienza con datos de valor
      numérico, este será el valor usado. En caso contrario, el valor será 0 (cero). Los datos numéricos válidos
      son un signo opcional, seguido por uno o más dígitos (que opcionalmente contengan un punto decimal),
      seguidos por un exponente opcional. El exponente es una ’e’ o una ’E’ seguidos por uno o más dígitos.
      Cuando la primera expresión es una cadena, el tipo de la variable dependerá de la segunda expresión.




                                                                                                              47
Capítulo 6. Types

      $foo   =   1 + "10.5";              // $foo es doble (11.5)
      $foo   =   1 + "-1.3e3";            // $foo es doble (-1299)
      $foo   =   1 + "bob-1.3e3";         // $foo es entero (1)
      $foo   =   1 + "bob3";              // $foo es entero (1)
      $foo   =   1 + "10 Cerditos";     // $foo es entero (11)
      $foo   =   1 + "10 Cerditos"; // $foo es entero (11)
      $foo   =   "10.0 cerdos " + 1;        // $foo es entero (11)
      $foo   =   "10.0 cerdos " + 1.0;      // $foo es double (11)


      Para más información sobre esta conversión, mire en la página del manual de Unix strtod(3).
      Si quisiera probar cualquiera de los ejemplos de esta sección, puede cortar y pegar los ejemplos e insertar
      la siguiente línea para ver por sí mismo lo que va ocurriendo:

      echo "$foo==$foo; el tipo es " . gettype( $foo ) . "<br>n";




Arrays
      Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como arrays indexados
      (vectores).


Arrays unidimensionales
      PHP soporta tanto arrays escalares como asociativos. De hecho, no hay diferencias entre los dos. Se
      puede crear una array usando las funciones list() o array(), o se puede asignar el valor de cada elemento
      del array de manera explícita.

      $a[0] = "abc";
      $a[1] = "def";
      $b["foo"] = 13;




      También se puede crear un array simplemente añadiendo valores al array. Cuando se asigna un valor a
      una variable array usando corchetes vacíos, el valor se añadirá al final del array.

      $a[] = "hola"; // $a[2] == "hola"
      $a[] = "mundo"; // $a[3] == "mundo"




      Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(), rsort(), sort(), uasort(),
      usort(), y uksort() dependiendo del tipo de ordenación que se desee.




                                                                                                                 48
Capítulo 6. Types

      Se puede contar el número de elementos de un array usando la función count().
      Se puede recorrer un array usando las funciones next() y prev(). Otra forma habitual de recorrer un array
      es usando la función each().



Arrays Multidimensionales
      Los arrays multidimensionales son bastante simples actualmente. Para cada dimensión del array, se
      puede añadir otro valor [clave] al final:

      $a[1]         = $f;                 # ejemplos de una sola dimensión
      $a["foo"]     = $f;

      $a[1][0]     = $f;                  # bidimensional
      $a["foo"][2] = $f;                  # (se pueden mezclar índices numéricos y asociativos)
      $a[3]["bar"] = $f;                  # (se pueden mezclar índices numéricos y asociativos)

      $a["foo"][4]["bar"][0] = $f;              # tetradimensional!




      En PHP3 no es posible referirse a arrays multidimensionales directamente dentro de cadenas. Por
      ejemplo, lo siguiente no tendrá el resultado deseado:

      $a[3][’bar’] = ’Bob’;
      echo "Esto no va a funcionar: $a[3][bar]";


      En PHP3, lo anterior tendrá la salida Esto no va a funcionar: Array[bar]. De todas formas, el
      operador de concatenación de cadenas se puede usar para solucionar esto:


      $a[3][’bar’] = ’Bob’;
      echo "Esto no va a funcionar: " . $a[3][bar];




      En PHP4, sin embargo, todo el problema se puede circunvenir encerrando la referencia al array (dentro
      de la cadena) entre llaves:

      $a[3][’bar’] = ’Bob’;
      echo "Esto va a funcionar: {$a[3][bar]}";




      Se pueden "rellenar" arrays multidimensionales de muchas formas, pero la más difícil de comprender es
      cómo usar el comando array() para arrays asociativos. Estos dos trozos de código rellenarán el array
      unidimensional de la misma manera:




                                                                                                             49
Capítulo 6. Types

# Ejemplo 1:

$a["color"] = "rojo";
$a["sabor"] = "dulce";
$a["forma"] = "redondeada";
$a["nombre"] = "manzana";
$a[3] = 4;

# Example 2:
$a = array(
     "color" => "rojo",
     "sabor" => "dulce",
     "forma" => "redondeada",
     "nombre" => "manzana",
     3       => 4
);




La función array() se puede anidar para arrays multidimensionales:

<?
$a = array(
     "manzana" =>        array(
          "color"        => "rojo",
          "sabor"        => "dulce",
          "forma"        => "redondeada"
     ),
     "naranja" =>        array(
          "color"        => "naranja",
          "sabor"        => "ácido",
          "forma"        => "redondeada"
     ),
     "plátano" =>        array(
          "color"        => "amarillo",
          "sabor"        => "paste-y",
          "forma"        => "aplatanada"
     )
);

echo $a["manzana"]["sabor"];              # devolverá "dulce"
?>




                                                                                   50
Capítulo 6. Types

Objetos

Inicialización de Objetos
       Para inicializar un objeto, se usa la sentencia new para instanciar el objeto a una variable.

       class foo {
           function do_foo () {
               echo "Doing foo.";
           }
       }

       $bar = new foo;
       $bar->do_foo();




Type juggling
       PHP no requiere (o soporta) la declaración explícita del tipo en la declaración de variables; el tipo de una
       variable se determina por el contexto en el que se usa esa variable. Esto quiere decir que si se asigna un
       valor de cadena a la variable var, var se convierte en una cadena. Si después se asigna un valor entero
       a la variable var, se convierte en una variable entera.
       Un ejemplo de conversión de tipo automática en PHP3 es el operador suma ’+’. Si cualquiera de los
       operandos es un doble, entonces todos los operandos se evalúan como dobles, y el resultado será un
       doble. En caso contrario, los operandos se interpretarán como enteros, y el resultado será también un
       entero. Nótese que esto NO cambia los tipos de los operandos propiamente dichos; el único cambio está
       en cómo se evalúan los operandos.

       $foo = "0"; // $foo es una cadena (ASCII 48)
       $foo++;      // $foo es la cadena "1" (ASCII 49)
       $foo += 1;   // $foo ahora es un entero (2)
       $foo = $foo + 1.3; // $foo ahora es un doble (3.3)
       $foo = 5 + "10 Cerditos Pequeñitos"; // $foo es entero (15)
       $foo = 5 + "10 Cerditos";     // $foo es entero (15)




       Si los últimos dos ejemplos anteriores parecen confusos, vea Conversión de cadenas.
       Si se desea obligar a que una variable sea evaluada con un tipo concreto, mire la sección Forzado de
       tipos. Si se desea cambiar el tipo de una variable, vea la función settype().
       Si quisiese probar cualquiera de los ejemplos de esta sección, puede cortar y pegar los ejemplos e
       insertar la siguiente línea para ver por sí mismo lo que va ocurriendo:




                                                                                                                51
Capítulo 6. Types

      echo "$foo==$foo; el tipo es " . gettype( $foo ) . "<br>n";




            Nota: La posibilidad de una conversión automática a array no está definida actualmente.

            $a = 1;            // $a es un entero
            $a[0] = "f";       // $a se convierte en un array, en el que $a[0] vale "f"




            Aunque el ejemplo anterior puede parecer que claramente debería resultar en que $a se convierta
            en un array, el primer elemento del cual es ’f’, consideremos esto:

            $a = "1";          // $a es una cadena
            $a[0] = "f";       // ¿Qué pasa con los índices de las cadenas? ¿Qué ocurre?




            Dado que PHP soporta indexación en las cadenas vía offsets usando la misma sintaxis que la
            indexación de arrays, el ejemplo anterior nos conduce a un problema: ¿debería convertirse $a en un
            array cuyo primer elemento sea "f", o debería convertirse "f" en el primer carácter de la cadena $a?
            Por esta razón, tanto en PHP 3.0.12 como en PHP 4.0b3-RC4, el resultado de esta conversión
            automática se considera que no está definido. Los parches se están discutiendo, de todas formas.




Forzado de tipos
      El forzado de tipos en PHP funciona como en C: el nombre del tipo deseado se escribe entre paréntesis
      antes de la variable a la que se pretende forzar.

      $foo = 10;   // $foo es un entero
      $bar = (double) $foo;   // $bar es un doble




      Los forzados de tipo permitidos son:

      •   (int), (integer) - fuerza a entero (integer)
      •   (real), (double), (float) - fuerza a doble (double)
      •   (string) - fuerza a cadena (string)
      •   (array) - fuerza a array (array)
      •   (object) - fuerza a objeto (object)




                                                                                                             52
Capítulo 6. Types

Nótese que las tabulaciones y espacios se permiten dentro de los paréntesis, así que los siguientes
ejemplos son funcionalmente equivalentes:

$foo = (int) $bar;
$foo = ( int ) $bar;




Puede no ser obvio que ocurrirá cuando se fuerce entre ciertos tipos. Por ejemplo, lo siguiente debería ser
tenido en cuenta.
Cuando se fuerza el cambio de un escalar o una variable de cadena a un array, la variable se convertirá en
el primer elemento del array:

$var = ’ciao’;
$arr = (array) $var;
echo $arr[0]; // produce la salida ’ciao’




Cuando se fuerza el tipo de una variable escalar o de una cadena a un objeto, la variable se convertirá en
un atributo del objeto; el nombre del atributo será ’scalar’:

$var = ’ciao’;
$obj = (object) $var;
echo $obj->scalar; // produce la salida ’ciao’




                                                                                                        53
Capítulo 7. Variables




                        54
Capítulo 7. Variables

Conceptos Básicos
     En PHP las variables se representan como un signo de dólar seguido por el nombre de la variable. El
     nombre de la variable es sensible a minúsculas y mayúsculas.


     $var = "Bob";
     $Var = "Joe";
     echo "$var, $Var"; // produce la salida "Bob, Joe"




     En PHP3, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a
     una variable, el valor íntegro de la expresión original se copia en la variable de destino. Esto quiere decir
     que, por ejemplo, después e asignar el valor de una variable a otra, los cambios que se efectúen a una de
     esas variables no afectará a la otra. Para más información sobre este tipo de asignación, vea Expresiones.
     PHP4 ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la
     nueva variable simplemente referencia (en otras palabras, "se convierte en un alias de" o "apunta a") la
     variable original. Los cambios a la nueva variable afectan a la original, y viceversa. Esto también
     significa que no se produce una copia de valores; por tanto, la asignación ocurre más rápidamente. De
     cualquier forma, cualquier incremento de velocidad se notará sólo en los bucles críticos cuando se
     asignen grandes arrays u objetos.
     Para asignar por referencia, simplemente se antepone un ampersand (&) al comienzo de la variable cuyo
     valor se está asignando (la variable fuente). Por ejemplo, el siguiente trozo de código produce la salida
     ’Mi nombre es Bob’ dos veces:

     <?php
     $foo = ’Bob’;              // Asigna el valor ’Bob’ a $foo
     $bar = &$foo;              // Referencia $foo vía $bar.
     $bar = "Mi nombre es $bar"; // Modifica $bar...
     echo $foo;                 // $foo también se modifica.
     echo $bar;
     ?>




     Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por
     referencia.

     <?php
     $foo = 25;
     $bar = &$foo;             // Esta es una asignación válida.
     $bar = &(24 * 7);         // Inválida; referencia una expresión sin nombre.

     function test() {
        return 25;
     }

     $bar = &test();           // Inválida.




                                                                                                                55
Capítulo 7. Variables

       ?>




Variables predefinidas
       PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se ejecute. De todas
       formas, muchas de esas variables no pueden estar completamente documentadas ya que dependen de
       sobre qué servidor se esté ejecutando, la versión y configuración de dicho servidor, y otros factores.
       Algunas de estas variables no estarán disponibles cuando se ejecute PHP desde la línea de comandos.
       A pesar de estos factores, aquí tenemos una lista de variables predefinidas disponibles en una instalación
       por defecto de PHP 3 corriendo como modulo de un Apache (http://www.apache.org/) 1.3.6 con su
       configuración también por defecto.
       Para una lista de variables predefinidas (y muchas más información útil), por favor, vea (y use) phpinfo().

            Nota: Esta lista no es exhaustiva ni pretende serlo. Simplemente es una guía de qué tipo de
            variables predefinidas se puede esperar tener disponibles en un script.




Variables de Apache
       Estas variables son creadas por el servidor web Apache (http://www.apache.org/). Si se está utilizando
       otro servidor web, no hay garantía de que proporcione las mismas variables; pueden faltar algunas, o
       proporcionar otras no listadas aquí. Dicho esto, también están presentes las variables de la especificación
       CGI 1.1 (http://hoohoo.ncsa.uiuc.edu/cgi/env.html), por lo que también se deben tener en cuenta.
       Tenga en cuenta que unas pocas, como mucho, de estas variables van a estar disponibles (o simplemente
       tener sentido) si se ejecuta PHP desde la línea de comandos.


GATEWAY_INTERFACE
            Qué revisión de la especificación CGI está usando el servidor; por ejemplo ’CGI/1.1’.

SERVER_NAME
             El nombre del equipo servidor en el que se está ejecutando el script. Si el script se está ejecutando
            en un servidor virtual, este será el valor definido para dicho servidor virtual.

SERVER_SOFTWARE
             Una cadena de identificación del servidor, que aparece en las cabeceras al responderse a las
            peticiones.

SERVER_PROTOCOL
            Nombre y revisión del protocolo a través del que se solicitó la página; p.ej. ’HTTP/1.0’;




                                                                                                                56
Capítulo 7. Variables

REQUEST_METHOD
              Qué método de petición se usó para acceder a la página; p.ej. ’GET’, ’HEAD’, ’POST’, ’PUT’.

QUERY_STRING
              La cadena de la petición, si la hubo, mediante la que se accedió a la página.

DOCUMENT_ROOT
              El directorio raíz del documento bajo el que se ejecuta el script, tal y como está definido en el
              fichero de configuración del servidor.

HTTP_ACCEPT
              Los contenidos de la cabecera Accept: de la petición actual, si hay alguna.

HTTP_ACCEPT_CHARSET
               Los contenidos de la cabecera Accept-Charset: de la petición actual, si hay alguna. Por
              ejemplo: ’iso-8859-1,*,utf-8’.

HTTP_ENCODING
               Los contenidos de la cabecera Accept-Encoding: de la petición actual, si la hay. Por ejemplo:
              ’gzip’.

HTTP_ACCEPT_LANGUAGE
               Los contenidos de la cabecera Accept-Language: de la petición actual, si hay alguna. Por
              ejemplo: ’en’.

HTTP_CONNECTION
               Los contenidos de la cabecera Connection: de la petición actual, si hay alguna. Por ejemplo:
              ’Keep-Alive’.

HTTP_HOST
              Los contenidos de la cabecera Host: de la petición actual, si hay alguna.

HTTP_REFERER
               La dirección de la página (si la hay) desde la que el navegador saltó a la página actual. Esto lo
              establece el navegador del usuario; no todos los navegadores lo hacen.

HTTP_USER_AGENT
               Los contenidos de la cabecera User_Agent: de la petición actual, si hay alguna. Indica el
              navegador que se está utilizando para ver la página actual; p.ej. Mozilla/4.5 [en] (X11; U;
              Linux 2.2.9 i586). Entre otras cosas, se puede usar este valor con get_browser() para adaptar la
              funcionalidad de la página a las posibilidades del navegador del usuario.

REMOTE_ADDR
              La dirección IP desde la que el usuario está viendo la página actual.




                                                                                                                   57
Capítulo 7. Variables

REMOTE_PORT
              El puerto que se está utilizando en la máquina del usuario para comunicarse con el servidor web.

SCRIPT_FILENAME
              La vía de acceso absoluta del script que se está ejecutando.

SERVER_ADMIN
               El valor que se haya dado a la directiva SERVER_ADMIN (en Apache) en el fichero de
              configuración del servidor web. Si el script se está ejecutando en un servidor virtual, será el valor
              definido para dicho servidor virtual.

SERVER_PORT
               El puerto del equipo servidor que está usando el servidor web para la comunicación. Para
              configuraciones por defecto, será ’80’; al usar SSL, por ejemplo, cambiará al puerto que se haya
              definido como seguro para HTTP.

SERVER_SIGNATURE
               Una cadena que contiene la versión del servidor y el nombre del servidor virtual que es añadida a
              las páginas generadas por el servidor, si está característica está activa.

PATH_TRANSLATED
               Vía de acceso basada en el sistema de ficheros- (no el directorio raíz del documento-) del script en
              cuestión, después de que el servidor haya hecho la conversión virtual-a-real.

SCRIPT_NAME
              Contiene la vía de acceso del script actual. Es útil para páginas que necesitan apuntar a sí mismas.

REQUEST_URI
              La URI que se dió para acceder a esta página; por ejemplo, ’/index.html’.




Variables de entorno
        Estas variables se importan en el espacio de nombres global de PHP desde el entorno en el que se esté
        ejecutando el intérprete PHP. Muchas son proporcionadas por el intérprete de comandos en el que se está
        ejecutando PHP, y dado que a sistemas diferentes les gusta ejecutar diferentes tipos de intérpretes de
        comandos, es imposible hacer una lista definitiva. Por favor, mire la documentación de su intérprete de
        comandos para ver una lista de las variables de entorno definidas.
        Otras variables de entorno son las de CGI, que están ahí sin importar si PHP se está ejecutando como un
        módulo del servidor o como un intérprete CGI.



Variables de PHP
        Estas variables son creadas por el propio PHP.



                                                                                                                     58
Capítulo 7. Variables

argv
                Array de argumentos pasados al script. Cuando el script se ejecuta desde la línea de comandos, esto
                da un acceso, al estilo de C, a los parámetros pasados en línea de comandos. Cuando se le llama
                mediante el método GET, contendrá la cadena de la petición.

argc
                 Contiene el número de parámetros de la línea de comandos pasados al script (si se ejecuta desde la
                línea de comandos).

PHP_SELF
                El nombre del fichero que contiene el script que se esta ejecutando, relativo al directorio raíz de los
                documentos. Si PHP se está ejecutando como intérprete de línea de comandos, esta variable no está
                disponible.

HTTP_COOKIE_VARS
                 Un array asociativo de variables pasadas al script actual mediante cookies HTTP. Sólo está
                disponible si el seguimiento de variables ha sido activado mediante la directiva de configuración
                track_vars o la directiva <?php_track_vars?>.

HTTP_GET_VARS
                Un array asociativo de variables pasadas al script actual mediante el método HTTP GET. Sólo está
                disponible si --variable tracking-- ha sido activado mediante la directiva de configuración track_vars
                o la directiva <?php_track_vars?>.

HTTP_POST_VARS
                Un array asociativo de variables pasadas al script actual mediante el método HTTP POST. Sólo está
                disponible si --variable tracking-- ha sido activado mediante la directiva de configuración track_vars
                o la directiva <?php_track_vars?>.




Ambito de las variables
           El ámbito de una variable es el contexto dentro del que la variable está definida. La mayor parte de las
           variables PHP sólo tienen un ámbito simple. Este ámbito simple también abarca los ficheros incluidos y
           los requeridos. Por ejemplo:

           $a = 1;
           include "b.inc";


           Aquí, la variable $a dentro del script incluido b.inc. De todas formas, dentro de las funciones definidas
           por el usuario aparece un ámbito local a la función. Cualquier variables que se use dentro de una función
           está, por defecto, limitada al ámbito local de la función. Por ejemplo:




                                                                                                                   59
Capítulo 7. Variables

$a = 1; /* ámbito global */

Function Test () {
    echo $a; /* referencia a una variable de ámbito local */
}

Test ();


Este script no producirá salida, ya que la orden echo utiliza una versión local de la variable $a, a la que
no se ha asignado ningún valor en su ámbito. Puede que usted note que hay una pequeña diferencia con
el lenguaje C, en el que las variables globales están disponibles automáticamente dentro de la función a
menos que sean expresamente sobreescritas por una definición local. Esto puede causar algunos
problemas, ya que la gente puede cambiar variables globales inadvertidamente. En PHP, las variables
globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro de dicha
función. Veamos un ejemplo:

$a = 1;
$b = 2;

Function Sum () {
    global $a, $b;

     $b = $a + $b;
}

Sum ();
echo $b;


El script anterior producirá la salida "3". Al declarar $a y $b globales dentro de la función, todas las
referencias a tales variables se referirán a la versión global. No hay límite al número de variables
globales que se pueden manipular dentro de una función.
Un segundo método para acceder a las variables desde un ámbito global es usando el array $GLOBALS
propio de PHP3. El ejemplo anterior se puede reescribir así:

$a = 1;
$b = 2;

Function Sum () {
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}

Sum ();
echo $b;


El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los
contenidos de dicha variable como el valor del elemento del array.




                                                                                                           60
Capítulo 7. Variables

     Otra característica importante del ámbito de las variables es la variable static. Una variable estática existe
     sólo en el ámbito local de la función, pero no pierde su valor cuando la ejecución del programa abandona
     este ámbito. Consideremos el siguiente ejemplo:

     Function Test () {
         $a = 0;
         echo $a;
         $a++;
     }


     Esta función tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 y representa un
     "0". La sentencia $a++, que incrementa la variable, no sirve para nada, ya que en cuanto la función
     termina la variable $a desaparece. Para hacer una función útil para contar, que no pierda la pista del valor
     actual del conteo, la variable $a debe declararse como estática:

     Function Test () {
         static $a = 0;
         echo $a;
         $a++;
     }


     Ahora, cada vez que se llame a la función Test(), se representará el valor de $a y se incrementará.
     Las variables estáticas también proporcionan una forma de manejar funciones recursivas. Una función
     recursiva es la que se llama a sí misma. Se debe tener cuidado al escribir una función recursiva, ya que
     puede ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse de implementar una forma
     adecuada de terminar la recursión. La siguiente función cuenta recursivamente hasta 10, usando la
     variable estática $count para saber cuándo parar:

     Function Test () {
         static $count = 0;

          $count++;
          echo $count;
          if ($count < 10) {
              Test ();
          }
          $count--;
     }




Variables variables
     A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de
     variables que se pueden establecer y usar dinámicamente. Una variable normal se establece con una
     sentencia como:




                                                                                                                61
Capítulo 7. Variables

      $a = "hello";


      Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el
      ejemplo anterior, hello, se puede usar como el nombre de una variable utilizando dos signos de dólar.
      p.ej.

      $$a = "world";


      En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que
      contiene "hello", y $hello, que contiene "world". Es más, esta sentencia:

      echo "$a ${$a}";


      produce el mismo resultado que:

      echo "$a $hello";


      p.ej. ambas producen el resultado: hello world.
      Para usar variables variables con arrays, hay que resolver un problema de ambigüedad. Si se escribe
      $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía
      utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta
      ambiguedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.




Variables externas a PHP

Formularios HTML (GET y POST)
      Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar
      automáticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente
      formulario:


      Ejemplo 7-1. Variables de formulario simples

      <form action="foo.php3" method="post">
          Name: <input type="text" name="name"><br>
          <input type="submit">
      </form>




      Cuando es enviado, PHP creará la variable $name, que contendrá lo que sea que se introdujo en el campo
      Name: del formulario.




                                                                                                                   62
Capítulo 7. Variables

     PHP también maneja arrays en el contexto de variables de formularios, pero sólo en una dimensión. Se
     puede, por ejemplo, agrupar juntas variables relacionadas, o usar esta característica para recuperar
     valores de un campo select input múltiple:


     Ejemplo 7-2. Variables de formulario más complejas

     <form action="array.php" method="post">
         Name: <input type="text" name="personal[name]"><br>
         Email: <input type="text" name="personal[email]"><br>
         Beer: <br>
         <select multiple name="beer[]">
             <option value="warthog">Warthog
             <option value="guinness">Guinness
             <option value="stuttgarter">Stuttgarter Schwabenbräu
             </select>
         <input type="submit">
     </form>




     Si la posibilidad de PHP de track_vars está activada, ya sea mediante la opción de configuración
     track_vars o mediante la directiva <?php_track_vars?>, las variables enviadas con los métodos POST
     o GET también se encontrarán en los arrays asociativos globales $HTTP_POST_VARS y
     $HTTP_GET_VARS.


     IMAGE SUBMIT variable names
     Cuando se envía un formulario, es posible usar una imagen en vez del botón submit estándar con una
     etiqueta como:

     <input type=image src="image.gif" name="sub">


     Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña se
     transmitirá al servidor con dos variables adicionales, sub_x y sub_y. Estas contienen las coordenadas del
     click del usuario dentro de la imagen. Los más experimentados puede notar que los nombres de variable
     enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte
     el guión en subrayado automáticamente.




Cookies HTTP
     PHP soporta cookies de HTTP de forma transparente tal y como están definidas en en las Netscape’s
     Spec (http://www.netscape.com/newsref/std/cookie_spec.html). Las cookies son un mecanismo para
     almacenar datos en el navegador y así rastrear o identificar a usuarios que vuelven. Se pueden crear
     cookies usando la función SetCookie(). Las cookies son parte de la cabecera HTTP, así que se debe
     llamar a la función SetCookie antes de que se envíe cualquier salida al navegador. Es la misma




                                                                                                            63
Capítulo 7. Variables

      restricción que para la función header(). Cualquier cookie que se reciba procedente del cliente será
      convertida automáticamente en una variable de PHP como con los datos en los métodos GET y POST.
      Si se quieren asignar múltiples valores a una sola cookie, basta con añadir [] al nombre de la. Por
      ejemplo:

      SetCookie ("MyCookie[]", "Testing", time()+3600);


      Nótese que una cookie reemplazará a una cookie anterior que tuviese el mismo nombre en el navegador a
      menos que el camino (path) o el dominio fuesen diferentes. Así, para una aplicación de carro de la
      compra se podría querer mantener un contador e ir pasándolo. P.ej.

      Ejemplo 7-3. SetCookie Example

      $Count++;
      SetCookie ("Count", $Count, time()+3600);
      SetCookie ("Cart[$Count]", $item, time()+3600);




Variables de entorno
      PHP hace accesibles las variables de entorno automáticamente tratándolas como variables normales.

      echo $HOME;      /* Shows the HOME environment variable, if set. */




      Dado que la información que llega vía mecanismos GET, POST y Cookie crean automáticamente
      variables de PHP, algunas veces es mejor leer variables del entorno explícitamente para asegurarse de
      que se está trabajando con la versión correcta. La función getenv() se puede usar para ello. También se
      puede asignar un valor a una variable de entorno con la función putenv().



Puntos en los nombres de variables de entrada
      Típicamente, PHP no altera los nombres de las variables cuando se pasan a un script. De todas formas,
      hay que notar que el punto no es un carácter válido en el nombre de una variable PHP. Por esta razón,
      mire esto:

      $varname.ext;       /* nombre de variable no válido */


      Lo que el intérprete ve es el nombre de una variable $varname, seguido por el operador de concatenación,
      y seguido por la prueba (es decir, una cadena sin entrecomillar que no coincide con ninguna palabra
      clave o reservada conocida) ’ext’. Obviamente, no se pretendía que fuese este el resultado.
      Por esta razón, es importante hacer notar que PHP reemplazará automáticamente cualquier punto en los
      nombres de variables de entrada por guiones bajos (subrayados).




                                                                                                                64
Capítulo 7. Variables

Determinando los tipos de variables
      Dado que PHP determina los tipos de las variables y los convierte (generalmente) según necesita, no
      siempre resulta obvio de qué tipo es una variable dada en un momento concreto. PHP incluye varias
      funciones que descubren de qué tipo es una variable. Son gettype(), is_long(), is_double(), is_string(),
      is_array(), y is_object().




                                                                                                                 65
Capítulo 8. Constantes




                         66
Capítulo 8. Constantes

     Una constante es un identificador para expresar un valor simple. Como el nombre sugiere, este valor no
     puede variar durante la ejecución del script. (Las constantes especiales __FILE__ y __LINE__ son una
     excepción a esto, ya que actualmente no lo soin). Una constante es sensible a mayúsculas por defecto.
     Por convención, los identificadores de constantes suelen declararse en mayúsculas
     El nombre de una constante sigue las mismas reglas que cualquier etiqueta en PHP. Un nombre de
     constante válido empieza con una letra o un caracter de subrayado, seguido por cualquier número de
     letras, números, o subrayados. Se podrían expresar mediante la siguiente expresión regular:
     [a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*

           Nota: Para nuestros propósitos , entenderemos como letra los carácteres a-z, A-Z, y los ASCII del
           127 hasta el 255 (0x7f-0xff).



     El alcanze de una constante es global, Es decir, es posible acceder a ellas sin preocuparse por el ámbito
     de alcance.



Sintaxis
     Se puede definir una constante usando la función define(). Una vez definida, no puede ser modificada ni
     eliminada .
     Solo se puede definir como constantes valores escalares (boolean, integer, float y string ).
     Para obtener el valor de una constante solo es necesario especificar su nombre. A diferencia de las
     variables, no se tiene que especificar el prefijo $. Tambien se puede utilizar la función constant(), para
     obtener el valor de una constante, en el caso de que queramos expresarla de forma dinámica Usa la
     función get_defined_constants() parar obtener una lista de todas las constantes definidas.

           Nota: Las contantes y las variables (globales) se encuentran en un espacio de nombres distinto.
           Esto implica que por ejemplo TRUE y $TRUE son diferentes.



     Si usas una constante todavia no definida, PHP asume que estás refiriéndote al nombre de la constante en
     si. Se lanzará un aviso si esto sucede. Usa la función defined() para comprobar la existencia de dicha
     constante.
     Estas son las diferencias entre constantes y variables:

     •   Las constantes no son precedidas por un símbolo de dolar ($)
     •   Las contantes solo pueden ser definidas usando la función() define , nunca por simple asignación
     •   Las constantes pueden ser definidas y accedidas sin tener en cuenta las reglas de alcanze del ámbito.
     •   Las constantes no pueden ser redefinidas o eliminadas despues de establecerse; y
     •   Las constantes solo puede albergar valores escalares




                                                                                                                67
Capítulo 8. Constantes

     Ejemplo 8-1. Definiendo constantes


     <?php
     define("CONSTANT", "Hello world.");
     echo CONSTANT; // outputs "Hello world."
     echo Constant; // outputs "Constant" and issues a notice.
     ?>




Constantes predefinidas
     PHP ofrece un largo número de constantes predefinidas a cualquier script en ejecución. Muchas de estas
     constantes, sin embargo, son creadas por diferentes extensiones, y solo estarán presentes si dichas
     extensiones están disponibles, bien por carga dinámica o porque has sido compiladas.
     Se puede encontrar una lista de constantes predefinidas en la seccion Constantes predefinidas.




                                                                                                        68
Capítulo 9. Expresiones




                          69
Capítulo 9. Expresiones

Las expresiones son la piedra angular de PHP. En PHP, casi cualquier cosa que escribes es una expresión.
La forma más simple y ajustada de definir una expresión es "cualquier cosa que tiene un valor".
Las formas más básicas de expresiones son las constantes y las variables. Cuando escribes "$a = 5", estás
asignando ’5’ a $a. ’5’, obviamente, tiene el valor 5 o, en otras palabras ’5’ es una expresión con el valor
5 (en este caso, ’5’ es una constante entera).
Después de esta asignación, esperarás que el valor de $a sea 5 también, de manera que si escribes $b =
$a, esperas que se comporte igual que si escribieses $b = 5. En otras palabras, $a es una expresión
también con el valor 5. Si todo va bien, eso es exactamente lo que pasará.
Las funciones son un ejemplo algo más complejo de expresiones. Por ejemplo, considera la siguiente
función:

function foo () {
    return 5;
}




Suponiendo que estés familiarizado con el concepto de funciones (si no lo estás échale un vistazo al
capítulo sobre funciones), asumirás que teclear $c = foo() es esencialmente lo mismo que escribir $c
= 5, y has acertado. Las funciones son expresiones que valen el valor que retornan. Como foo() devuelve
5, el valor de la expresión ’foo()’ es 5. Normalmente las funciones no devuelven un valor fijo, sino que
suele ser calculado.
Desde luego, los valores en PHP no se limitan a enteros, y lo más normal es que no lo sean. PHP soporta
tres tipos escalares: enteros, punto flotante y cadenas (los tipos escalares son aquellos cuyos valores no
pueden ’dividirse’ en partes menores, no como los arrays, por ejemplo). PHP también soporta dos tipos
compuestos (no escalares): arrays y objetos. Se puede asignar cada uno de estos tipos de valor a variables
o bien retornarse de funciones, sin ningún tipo de limitación.
Hasta aquí, los usuarios de PHP/FI 2 no deberían haber notado ningún cambio. Sin embargo, PHP lleva
las expresiones mucho más allá, al igual que otros lenguajes. PHP es un lenguaje orientado a
expresiones, en el sentido de que casi todo es una expresión. Considera el ejemplo anterior ’$a = 5’. Es
sencillo ver que hay dos valores involucrados, el valor de la constante entera ’5’, y el valor de $a que está
siendo actualizado también a 5. Pero la verdad es que hay un valor adicional implicado aquí, y es el valor
de la propia asignación. La asignación misma se evalúa al valor asignado, en este caso 5. En la práctica,
quiere decir que ’$a = 5’, independientemente de lo que hace, es una expresión con el valor 5. De esta
manera, escribir algo como ’$b = ($a = 5)’ es como escribir ’$a = 5; $b = 5;’ (un punto y coma marca el
final de una instrucción). Como las asignaciones se evalúan de derecha a izquierda, puedes escribir
también ’$b = $a = 5’.
Otro buen ejemplo de orientación a expresiones es el pre y post incremento y decremento. Los usuarios
de PHP/FI 2 y los de otros muchos lenguajes les sonará la notación variable++ y variable--. Esto son las
operaciones de incremento y decremento. En PHP/FI 2, la instrucción ’$a++’ no tiene valor (no es una
expresión), y no puedes asignarla o usarla de ningún otro modo. PHP mejora las características del
incremento/decremento haciéndolos también expresiones, como en C. En PHP, como en C, hay dos tipos
de incremento - pre-incremento y post-incremento. Ambos, en esencia, incrementan la variable y el
efecto en la variable es idéntico. La diferencia radica en el valor de la propia expresion incremento. El
preincremento , escrito ’++$variable’, se evalúa al valor incrementado (PHP incrementa la variable antes
de leer su valor, de ahí el nombre ’preincremento’). El postincremento, escrito ’$variable++’, se evalúa al



                                                                                                          70
Capítulo 9. Expresiones

valor original de $variable antes de realizar el incremento (PHP incrementa la variable después de leer su
valor, de ahí el nombre ’postincremento’).
Un tipo muy corriente de expresiones son las expresiones de comparación. Estas expresiones se evalúan
a 0 o 1, significando FALSO (FALSE) o CIERTO (TRUE), respectivamente. PHP soporta > (mayor que),
>= (mayor o igual que), == (igual que), != (distinto), < (menor que) y <= (menor o igual que). Estas
expresiones se usan frecuentemente dentro de la ejecución condicional como la instrucción if.
El último tipo de expresiones que trataremos, es la combinación operador-asignación. Ya sabes que si
quieres incrementar $a en 1, basta con escribir ’$a++’ o ++$a’. Pero qué pasa si quieres añadir más de 1,
por ejemplo 3? Podrías escribir ’$a++’ múltiples veces, pero no es una forma de hacerlo ni eficiente ni
cómoda. Una práctica mucho más corriente es escribir ’$a = $a + 3’. ’$a + 3’ se evalúa al valor de $a más
3, y se asigna de nuevo a $a, lo que resulta en incrementar $a en 3. En PHP, como en otros lenguajes
como C, puedes escribir esto de una forma más concisa, que con el tiempo será más clara y también fácil
de entender. Añadir 3 al valor actual de $a se puede escribir como ’$a += 3’. Esto quiere decir
exactamente "toma el valor de $a, súmale 3, y asígnalo otra vez a $a". Además de ser más corto y claro,
también resulta en una ejecución más rápida. El valor de ’$a += 3’, como el valor de una asignación
normal y corriente, es el valor asignado. Ten en cuenta que NO es 3, sino el valor combinado de $a más 3
(ése es el valor asignado a $a). Cualquier operación binaria puede ser usada en forma de
operador-asignación, por ejemplo ’$a -= 5’ (restar 5 del valor de $a), ’$b *= 7’ (multiplicar el valor de $b
por 5), etc.
Hay otra expresión que puede parecer extraña si no la has visto en otros lenguaes, el operador
condicional ternario:

$first ? $second : $third

Si el valor de la primera subexpresión es verdadero (distinto de cero), entonces se evalúa la segunda
subexpresión, si no, se evalúa la tercera y ése es el valor.
El siguiente ejemplo te ayudará a comprender un poco mejor el pre y post incremento y las expresiones
en general:

function double($i)        {
    return $i*2;
}
$b = $a = 5;               /* asignar el valor cinco a las variables $a y $b */
$c = $a++;                 /* postincremento, asignar el valor original de $a (5) a $c */
$e = $d = ++$b;            /* preincremento, asignar el valor incrementado de $b (6) a
                              $d y a $e */

/* en este punto, tanto $d como $e son iguales a 6 */

$f = double($d++);         /* asignar el doble del valor de $d antes
                              del incremento, 2*6 = 12 a $f */
$g = double(++$e);         /* asignar el doble del valor de $e después
                              del incremento, 2*7 = 14 a $g */
$h = $g += 10;             /* primero, $g es incrementado en 10 y termina valiendo 24.
                              después el valor de la asignación (24) se asigna a $h,
                              y $h también acaba valiendo 24. */




                                                                                                         71
Capítulo 9. Expresiones

Al principio del capítulo hemos dicho que describiríamos los distintos tipos de instrucciones y, como
prometimos, las expresiones pueden ser instrucciones. Sin embargo, no todas las expresiones son
instrucciones. En este caso, una instrucción tiene la forma ’expr’ ’;’, es decir, una expresión seguida de
un punto y coma. En ’$b=$a=5;’, $a=5 es una expresión válida, pero no es una instrucción en sí misma.
Por otro lado ’$b=$a=5:’ sí es una instrucción válida.
Una última cosa que vale la pena mencionar, es el valor booleano de las expresiones. En muchas
ocasiones, principalmente en condicionales y bucles, no estás interesado en el valor exacto de la
expresión, sino únicamente si es CIERTA (TRUE) o FALSA (FALSE) (PHP no tiene un tipo booleano
específico). El valor de verdad de las expresiones en PHP se calcula de forma similar a perl. Cualquier
valor numérico distinto de cero es CIERTO (TRUE), cero es FALSO (FALSE). Fíjate en que los valores
negativos son distinto de cero y considerados CIERTO (TRUE)! La cadena vacía y la cadena "0" son
FALSO (FALSE); todas las demás cadenas son TRUE. Con los tipos no escalares (arrays y objetos) - si el
valor no contiene elementos se considera FALSO (FALSE), en caso contrario se considera CIERTO
(TRUE).
PHP te brinda una completa y potente implementación de expresiones, y documentarla enteramente está
más allá del objetivo de ete manual. Los ejemplos anteriores, deberían darte una buena idea de qué son
las expresiones y cómo construir expresiones útiles. A lo largo del resto del manual, escribiremos expr
para indicar una expresión PHP válida.




                                                                                                        72
Capítulo 10. Operadores




                          73
Capítulo 10. Operadores

Operadores Aritméticos
     ¿Recuerdas la aritmética básica del colegio? Pues estos operadores funcionan exactamente igual.

     Tabla 10-1. Operadores Aritméticos

     ejemplo                             nombre                              resultado
     $a + $b                             Adición                             Suma de $a y $b.
     $a - $b                             Substracción                        Diferencia entre $a y $b.
     $a * $b                             Multiplicación                      Producto de $a and $b.
     $a / $b                             División                            Cociente de $a entre $b.
     $a % $b                             Módulo                              Resto de $a dividido entre $b.




Operadores de Asignación
     El operador básico de asignación es "=". A primera vista podrías pensar que es el operador de
     comparación "igual que". Pero no. Realmente significa que el operando de la izquierda toma el valor de
     la expresión a la derecha, (esto es, "toma el valor de").
     El valor de una expresión de asignación es el propio valor asignado. Esto es, el valor de "$a = 3" es 3.
     Esto permite hacer cosas curiosas como

     $a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4.



     Además del operador básico de asignación, existen los "operadores combinados" para todas las
     operaciones aritméticas y de cadenas que sean binarias. Este operador combinado te permite, de una sola
     vez, usar una variable en una expresión y luego establecer el valor de esa variable al resultado de la
     expresión. Por ejemplo:

     $a   = 3;
     $a   += 5; // establece $a a 8, como si hubiésemos escrito: $a = $a + 5;
     $b   = "Hola ";
     $b   .= "Ahí!"; // establece $b a "Hola Ahí!", igual que si hiciésemos $b = $b . "Ahí!";



     Fíjate en que la asignación realiza una nueva copia de la variable original (asignación por valor), por lo
     que cambios a la variable original no afectan a la copia. Esto puede tener interés si necesitas copiar algo
     como un array con muchos elementos dentro de un bucle que se repita muchas veces (cada vez se
     realizará una nueva copia del array). PHP4 soporta asignación por referencia, usando la sintaxis $var =
     &$othervar;, pero esto no es posible en PHP3. ’Asignación por referencia’ quiere decir que ambas
     variables acabarán apuntando al mismo dato y que nada es realmente copiado.




                                                                                                                74
Capítulo 10. Operadores

Operadores Bit a bit
     Los operadores bit a bit te permiten activar o desactivar bits individuales de un entero.

     Tabla 10-2. Operadores Bit a bit

     ejemplo                             nombre                              resultado
     $a & $b                             Y                                   Se activan los bits que están
                                                                             activos tanto en $a como $b.
     $a | $b                             O                                   Se activan los bits que están
                                                                             activos en $a o que lo están en $b.
     $a ^ $b                             Xor ("o exclusiva")                 Se activan los bits que están
                                                                             activos en $a o en $b pero no en
                                                                             ambos a la vez.
     ~ $a                                No                                  Se activan los bits que no están
                                                                             activos en $a.
     $a << $b                            Desplazamiento a la izquierda       Desplaza los bits de $a, $b
                                                                             posiciones hacia la izquierda (por
                                                                             aritmética binaria, cada posición
                                                                             desplazada equivale a multiplicar
                                                                             por dos el valor de $a)
     $a >> $b                            Desplazamiento a la derecha         Desplaza los bits de $a, $b
                                                                             posiciones hacia la derecha (por
                                                                             aritmética binaria, cada posición
                                                                             desplazada equivale a dividir entre
                                                                             dos el valor de $a)




Operadores de Comparación
     Los operadores de comparación, como su nombre indica, permiten comparar dos valores.

     Tabla 10-3. Operadores de Comparación

     ejemplo                             nombre                              resultado
     $a == $b                            Igualdad                            Cierto si $a es igual a $b.
     $a === $b                           Identidad                           Cierto si $a es igual a $b y si son
                                                                             del mismo tipo (sólo PHP4)
     $a != $b                            Desigualdad                         Cierto si $a no es igual a $b.
     $a < $b                             Menor que                           Cierto si $a es estrictamente
                                                                             menor que $b.
     $a > $b                             Mayor que                           Cierto si $a es estrictamente
                                                                             mayor que $b.




                                                                                                                75
Capítulo 10. Operadores

     ejemplo                            nombre                                resultado
     $a <= $b                           Menor o igual que                     Cierto si $a es menor o igual que
                                                                              $b.
     $a >= $b                           Mayor o igual que                     Cierto si $a es mayor o igual que
                                                                              $b.

     Otro operador condicional es el operador "?:" (o ternario), que funciona como en C y otros muchos
     lenguajes.


     (expr1) ? (expr2) : (expr3);


     La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se evalúa a falso.




Operador de ejecución
     PHP soporta un operador de ejecución: el apóstrofe invertido (“). ¡Fíjate que no son apostrofes normales!
     PHP intentará ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un
     comando del shell; y su salida devuelta como el valor de esta expresión (i.e., no tiene por qué ser
     simplemente volcada como salida; puede asignarse a una variable).


     $output = ‘ls -al‘;
     echo "<pre>$output</pre>";




     Ver también system(), passthru(), exec(), popen(), y escapeshellcmd().




Operadores de Incremento/decremento
     PHP soporta los operadores de predecremento y post incremento al estilo de C.

     Tabla 10-4. Operadores de Incremento/decremento

     ejemplo                            nombre                                efecto
     ++$a                               Preincremento                         Incrementa $a en uno y después
                                                                              devuelve $a.
     $a++                               Postincremento                        Devuelve $a y después incrementa
                                                                              $a en uno.
     --$a                               Predecremento                         Decrementa $a en uno y después
                                                                              devuelve $a.
     $a--                               Postdecremento                        Devuelve $a y después decrementa
                                                                              $a en uno.




                                                                                                               76
Capítulo 10. Operadores

     He aquí un listado de ejemplo:


     <?php
     echo "<h3>Postincremento</h3>";
     $a = 5;
     echo "Debería ser 5: " . $a++ . "<br>n";
     echo "Debería ser 6: " . $a . "<br>n";

     echo   "<h3>Preincremento</h3>";
     $a =   5;
     echo   "Debería ser 6: " . ++$a . "<br>n";
     echo   "Debería ser 6: " . $a . "<br>n";

     echo   "<h3>Postdecremento</h3>";
     $a =   5;
     echo   "Debería ser 5: " . $a-- . "<br>n";
     echo   "Debería ser 4: " . $a . "<br>n";

     echo   "<h3>Predecremento</h3>";
     $a =   5;
     echo   "Debería ser 4: " . --$a . "<br>n";
     echo   "Debería ser 4: " . $a . "<br>n";
     ?>




Operadores Lógicos
     Tabla 10-5. Operadores Lógicos

     ejemplo                            nombre                             resultado
     $a and $b                          Y                                  Cierto si tanto $a como $b son
                                                                           ciertos.
     $a or $b                           O                                  Cierto si $a o $b son ciertos.
     $a xor $b                          O exclusiva                        Cierto si $a es cierto o $b es cierto,
                                                                           pero no ambos a la vez.
     ! $a                               Negación                           Cierto si $a no es cierto.
     $a && $b                           Y                                  Cierto si tanto $a como $b son
                                                                           ciertos.
     $a || $b                           O                                  Cierto si $a o $b son ciertos.

     La razón de las dos variaciones de "y" y "o" es que operan con distinta precedencia (ver Precedencia de
     Operadores.)




                                                                                                             77
Capítulo 10. Operadores

Precedencia de Operadores
     La precedencia de operadores especifica cómo se agrupan las expresiones. Por ejemplo, en la expresión 1
     + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una mayor
     precedencia que el de adición ("+").
     La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia.

     Tabla 10-6. Precedencia de Operadores

     Asociatividad                                       Operadores
     izquierda                                           ,
     izquierda                                           or
     izquierda                                           xor
     izquierda                                           and
     derecha                                             print
     izquierda                                           = += -= *= /= .= %= &= |= ^= ~= <<= >>=
     izquierda                                           ?:
     izquierda                                           ||
     izquierda                                           &&
     izquierda                                           |
     izquierda                                           ^
     izquierda                                           &
     no asociativo                                       == != ===
     no asociativo                                       < <= > >=
     izquierda                                           << >>
     izquierda                                           +-.
     izquierda                                           */%
     derecha                                             ! ~ ++ -- (int) (double) (string) (array) (object) @
     derecha                                             [
     no asociativo                                       new




Operadores de Cadenas
     Hay dos operadores de cadenas. El primero es el operador de concatenación (’.’), que devuelve el
     resultado de concatenar sus operandos izquierdo y derecho. El segundo es el operador de concatenación
     y asignación (’.=’). Consulta Operadores de Asignación para más información.


     $a = "Hola ";
     $b = $a . "Mundo!"; // ahora $b contiene "Hola Mundo!"




                                                                                                                78
Capítulo 10. Operadores

$a = "Hola ";
$a .= "Mundo!"; // ahora $a contiene "Hola Mundo!"




                                                                         79
Capítulo 11. Estructuras de Control




                                      80
Capítulo 11. Estructuras de Control

     Todo archivo de comandos PHP se compone de una serie de sentencias. Una sentencia puede ser una
     asignación, una llamada a función, un bucle, una sentencia condicional e incluso una sentencia que no
     haga nada (una sentencia vacía). Las sentencias normalmente acaban con punto y coma. Además, las
     sentencias se pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con llaves.
     Un grupo de sentencias es también una sentencia. En este capítulo se describen los diferentes tipos de
     sentencias.



if
     La construcción if es una de las más importantes características de muchos lenguajes, incluido PHP.
     Permite la ejecución condicional de fragmentos de código. PHP caracteriza una estructura if que es
     similar a la de C:


      if (expr)
          sentencia




     Como se describe en la sección sobre expresiones, expr se evalúa a su valor condicional. Si expr se
     evalúa como TRUE, PHP ejecutará la sentencia, y si se evalúa como FALSE - la ignorará.
     El siguiente ejemplo mostraría a es mayor que b si $a fuera mayor que $b:

      if ($a > $b)
          print "a es mayor que b";




     A menudo, se desea tener más de una sentencia ejecutada de forma condicional. Por supuesto, no hay
     necesidad de encerrar cada sentencia con una cláusula if. En vez de eso, se pueden agrupar varias
     sentencias en un grupo de sentencias. Por ejemplo, este código mostraría a es mayor que b si $a
     fuera mayor que $b, y entonces asignaría el valor de $a a $b:

      if ($a > $b) {
          print "a es mayor que b";
          $b = $a;
      }




     Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona
     una flexibilidad completa para ejecuciones condicionales en las diferentes partes de tu programa.




                                                                                                              81
Capítulo 11. Estructuras de Control

else
       A menudo queremos ejecutar una sentencia si se cumple una cierta condicion, y una sentencia distinta si
       la condición no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar
       una sentencia en caso de que la expresión en la sentencia if se evalúe como FALSE. Por ejemplo, el
       siguiente código mostraría a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b
       en cualquier otro caso:


        if ($a > $b) {
            print "a es mayor que b";
        } else {
            print "a NO es mayor que b";
        }


       La sentencia else se ejecuta solamente si la expresión if se evalúa como FALSE, y si hubiera alguna
       expresión elseif - sólo si se evaluaron también a FALSE (Ver elseif).




elseif
       elseif, como su nombre sugiere, es una combinación de if y else. Como else, extiende una
       sentencia if para ejecutar una sentencia diferente en caso de que la expresión if original se evalúa como
       FALSE. No obstante, a diferencia de else, ejecutará esa expresión alternativa solamente si la expresión
       condicional elseif se evalúa como TRUE. Por ejemplo, el siguiente código mostraría a es mayor
       que b, a es igual a b o a es menor que b:


        if ($a > $b)      {
            print "a      es mayor que b";
        } elseif ($a      == $b) {
            print "a      es igual que b";
        } else {
            print "a      es mayor que b";
        }




       Puede haber varios elseifs dentro de la misma sentencia if. La primera expresión elseif (si hay
       alguna) que se evalúe como TRUE se ejecutaría. En PHP, también se puede escribir ’else if’ (con dos
       palabras) y el comportamiento sería idéntico al de un ’elseif’ (una sola palabra). El significado sintáctico
       es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la línea básica es
       que ambos resultarían tener exactamente el mismo comportamiento.
       La sentencia elseif se ejecuta sólo si la expresión if precedente y cualquier expresión elseif
       precedente se evalúan como FALSE, y la expresión elseif actual se evalúa como TRUE.




                                                                                                               82
Capítulo 11. Estructuras de Control

Sintaxis Alternativa de Estructuras de Control
        PHP ofrece una sintaxis altenativa para alguna de sus estructuras de control; a saber, if, while, for, y
        switch. En cada caso, la forma básica de la sintaxis alternativa es cambiar abrir-llave por dos puntos (:)
        y cerrar-llave por endif;, endwhile;, endfor;, or endswitch;, respectivamente.


         <?php if ($a==5): ?>
         A es igual a 5
         <?php endif; ?>




        En el ejemplo de arriba, el bloque HTML "A = 5" se anida dentro de una sentencia if escrita en la
        sintaxis alternativa. El bloque HTML se mostraría solamente si $a fuera igual a 5.
        La sintaxis alternativa se aplica a else y también a elseif. La siguiente es una estructura if con
        elseif y else en el formato alternativo:

         if ($a == 5):
             print "a es igual a 5";
             print "...";
         elseif ($a == 6):
             print "a es igual a 6";
             print "!!!";
         else:
             print "a no es ni 5 ni 6";
         endif;




        Mirar también while, for, e if para más ejemplos.




while
        Los bucles while son los tipos de bucle más simples en PHP. Se comportan como su contrapartida en C.
        La forma básica de una sentencia while es:


         while (expr) sentencia




        El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s) sentencia(s) anidada(s)
        repetidamente, mientras la expresión while se evalúe como TRUE. El valor de la expresión es
        comprobado cada vez al principio del bucle, así que incluso si este valor cambia durante la ejecución de
        la(s) sentencia(s) anidada(s), la ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta
        las sentencias en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde
        el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarán ni siquiera una vez.




                                                                                                                83
Capítulo 11. Estructuras de Control

     Como con la sentencia if, se pueden agrupar multiples sentencias dentro del mismo bucle while
     encerrando un grupo de sentencias con llaves, o usando la sintaxis alternativa:

      while (expr): sentencia ... endwhile;




     Los siguientes ejemplos son idénticos, y ambos imprimen números del 1 al 10:

      /* ejemplo 1 */

      $i = 1;
      while ($i <= 10) {
          print $i++; /* el valor impreso sería
                         $i antes del incremento
                         (post-incremento) */
      }

      /* ejemplo 2 */

      $i = 1;
      while ($i <= 10):
          print $i;
          $i++;
      endwhile;




do..while
     Los bucles do..while son muy similares a los bucles while, excepto que las condiciones se
     comprueban al final de cada iteración en vez de al principio. La principal diferencia frente a los bucles
     regulares while es que se garantiza la ejecución de la primera iteración de un bucle do..while (la
     condición se comprueba sólo al final de la iteración), mientras que puede no ser necesariamente
     ejecutada con un bucle while regular (la condición se comprueba al principio de cada iteración, si esta
     se evalúa como FALSE desde el principio la ejecución del bucle finalizará inmediatamente).
     Hay una sola sintaxis para los bucles do..while:

      $i = 0;
      do {
           print $i;
      } while ($i>0);




                                                                                                            84
Capítulo 11. Estructuras de Control

      El bucle de arriba se ejecutaría exactamente una sola vez, después de la primera iteración, cuando la
      condición se comprueba, se evalúa como FALSE ($i no es más grande que 0) y la ejecución del bucle
      finaliza.
      Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do..while, para
      permitir parar la ejecución en medio de los bloques de código, encapsulandolos con do..while(0), y
      usando la sentencia break. El siguiente fragmento de código demuestra esto:

       do {
           if ($i < 5) {
               print "i no es lo suficientemente grande";
               break;
           }
           $i *= $factor;
           if ($i < $minimum_limit) {
               break;
           }
           print "i es correcto";
           ...procesa i...
       } while(0);




      No se preocupes si no entiende esto completamente o en absoluto. Se pueden codificar archivos de
      comandos e incluso archivos de comandos potentes sin usar esta ’propiedad’.




for
      Los bucles for son los bucles más complejos en PHP. Se comportan como su contrapartida en C. La
      sintaxis de un bucle for es:


      for (expr1; expr2; expr3) sentencia




      La primera expresión (expr1) se evalúa (ejecuta) incondicionalmente una vez al principio del bucle.
      Al comienzo de cada iteración, se evalúa expr2 . Si se evalúa como TRUE, el bucle continúa y las
      sentencias anidadas se ejecutan. Si se evalúa como FALSE, la ejecución del bucle finaliza.
      Al final de cada iteración, se evalúa (ejecuta) expr3.
      Cada una de las expresiones puede estar vacía. Que expr2 esté vacía significa que el bucle debería
      correr indefinidamente (PHP implicitamente lo considera como TRUE, al igual que C). Esto puede que no
      sea tan inútil como se podría pensar, puesto que a menudo se quiere salir de un bucle usando una
      sentencia break condicional en vez de usar la condición de for.
      Considera los siguientes ejemplos. Todos ellos muestran números del 1 al 10:

       /* ejemplo 1 */




                                                                                                              85
Capítulo 11. Estructuras de Control


 for ($i = 1; $i <= 10; $i++) {
     print $i;
 }

 /* ejemplo 2 */

 for ($i = 1;;$i++) {
     if ($i > 10) {
         break;
     }
     print $i;
 }

 /* ejemplo 3 */

 $i = 1;
 for (;;) {
     if ($i > 10) {
         break;
     }
     print $i;
     $i++;
 }

 /* ejemplo 4 */

 for ($i = 1; $i <= 10; print $i, $i++) ;




Por supuesto, el primer ejemplo parece ser el mas elegante (o quizás el cuarto), pero uno puede descubrir
que ser capaz de usar expresiones vacías en bucles for resulta útil en muchas ocasiones.
PHP también soporta la "sintaxis de dos puntos" alternativa para bucles for.

 for (expr1; expr2; expr3): sentencia; ...; endfor;




Otros lenguajes poseen una sentencia foreach para traducir un array o una tabla hash. PHP3 no posee
tal construcción; PHP4 sí (ver foreach). En PHP3, se puede combinar while con las funciones list() y
each() para conseguir el mismo efecto. Mirar la documentación de estas funciones para ver un ejemplo.




                                                                                                      86
Capítulo 11. Estructuras de Control

foreach
     PHP4 (PHP3 no) incluye una construcción foreach, tal como perl y algunos otros lenguajes. Esto
     simplemente da un modo fácil de iterar sobre arrays. Hay dos sintaxis; la segunda es una extensión
     menor, pero útil de la primera:


     foreach(expresion_array as $value) sentencia
     foreach(expresion_array as $key => $value) sentencia




     La primera forma recorre el array dado por expresion_array. En cada iteración, el valor del elemento
     actual se asigna a $value y el puntero interno del array se avanza en una unidad (así en el siguiente
     paso, se estará mirando el elemento siguiente).
     La segunda manera hace lo mismo, salvo que la clave del elemento actual será asignada a la variable
     $key en cada iteración.


          Nota: Cuando foreach comienza su primera ejecución, el puntero interno a la lista (array) se
          reinicia automáticamente al primer elemento del array. Esto significa que no se necesita llamar a
          reset() antes de un bucle foreach.




          Nota: Hay que tener en cuanta queforeach con una copia de la lista (array) especificada y no la
          lista en si, por ello el puntero de la lista no es modificado como en la construcción each.




     Puede haber observado que las siguientes son funcionalidades idénticas:

     reset( $arr );
     while( list( , $value ) = each( $arr ) ) {
        echo "Valor: $value<br>n";
     }

     foreach( $arr as $value ) {
        echo "Valor: $value<br>n";
     }


     Las siguientes también son funcionalidades idénticas:


     reset( $arr );
     while( list( $key, $value ) = each( $arr ) ) {
        echo "Key: $key; Valor: $value<br>n";
     }




                                                                                                             87
Capítulo 11. Estructuras de Control


        foreach( $arr as $key => $value ) {
           echo "Key: $key; Valor: $value<br>n";
        }




        Algunos ejemplos más para demostrar su uso:

        /* foreach ejemplo 1: sólo valor*/
        $a = array(1, 2, 3, 17);

        foreach($a as $v) {
           print "Valor actual de $a: $v.n";
        }

        /* foreach ejemplo 2: valor (con clave impresa para ilustrar) */
        $a = array(1, 2, 3, 17);

        $i = 0; /* sólo para propósitos demostrativos */

        foreach($a as $v) {
           print "$a[$i] => $k.n";
        }

        /* foreach ejemplo 3: clave y valor */
        $a = array(
           "uno" => 1,
           "dos" => 2,
           "tres" => 3,
           "diecisiete" => 17
        );

        foreach($a as $k => $v) {
           print "$a[$k] => $v.n";
        }




break
        break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch.

        break accepta un parámetro opcional, el cual determina cuantas estructuras de control hay que escapar.


        $arr = array (’one’, ’two’, ’three’, ’four’, ’stop’, ’five’);
        while (list (, $val) = each ($arr)) {
            if ($val == ’stop’) {
                break;    /* You could also write ’break 1;’ here. */




                                                                                                            88
Capítulo 11. Estructuras de Control

          }
          echo "$val<br>n";
     }

     /* Using the optional argument. */

     $i = 0;
     while (++$i) {
         switch ($i) {
         case 5:
             echo "At 5<br>n";
             break 1; /* Exit only the switch. */
         case 10:
             echo "At 10; quitting<br>n";
             break 2; /* Exit the switch and the while. */
         default:
             break;
         }
     }




continue
     continue se usa dentro de la estructura del bucle para saltar el resto de la iteración actual del bucle y
     continuar la ejecución al comienzo de la siguiente iteración.
     continue accepta un parámetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes
     de continuar con la ejecución.


       while (list($key,$value) = each($arr)) {
            if ($key % 2) { // salta los miembros impares
                continue;
            }
            do_something_odd ($value);
       }
     $i = 0;
     while ($i++ < 5) {
          echo "Outer<br>n";
          while (1) {
               echo " Middle<br>n";
               while (1) {
                   echo " Inner<br>n";
                   continue 3;
               }
               echo "This never gets output.<br>n";
          }
          echo "Neither does this.<br>n";
     }




                                                                                                                 89
Capítulo 11. Estructuras de Control




switch
     La sentencia switch es similar a una serie de sentencias IF en la misma expresión. En muchas
     ocasiones, se quiere comparar la misma variable (o expresión) con nuchos valores diferentes, y ejecutar
     una parte de código distinta dependiendo de a qué valor es igual. Para ello sirve la sentencia switch.
     Los siguientes dos ejemplos son dos modos distintos de escribir la misma cosa, uno usa una serie de
     sentencias if, y el otro usa la sentencia switch:

      if ($i ==    0) {
          print    "i es igual a 0";
      }
      if ($i ==    1) {
          print    "i es igual a 1";
      }
      if ($i ==    2) {
          print    "i es igual a 2";
      }

      switch ($i) {
          case 0:
              print "i es igual a 0";
              break;
          case 1:
              print "i es igual a 1";
              break;
          case 2:
              print "i es igual a 2";
              break;
      }




     Es importante entender cómo se ejecuta la sentencia switch para evitar errores. La sentencia switch
     ejecuta línea por línea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta código. Sólo
     cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresión switch
     PHP comienza a ejecutar las sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque
     switch, o la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de
     una lista de sentencias case, PHP seguirá ejecutando las sentencias del siguiente case. Por ejemplo:

      switch ($i) {
          case 0:
              print "i es igual a 0";
          case 1:
              print "i es igual a 1";




                                                                                                           90
Capítulo 11. Estructuras de Control

       case 2:
           print "i es igual a 2";
 }




Aquí, si $i es igual a 0, ¡PHP ejecutaría todas las sentecias print! Si $i es igual a 1, PHP ejecutaría las
últimas dos sentencias print y sólo si $i es igual a 2, se obtendría la conducta ’esperada’ y solamente se
mostraría ’i es igual a 2’. Así, es importante no olvidar las sentencias break (incluso aunque pueda
querer evitar escribirlas intencionadamente en ciertas circunstancias).
En una sentencia switch, la condición se evalúa sólo una vez y el resultado se compara a cada sentencia
case. En una sentencia elseif, la condición se evalúa otra vez. Si tu condición es más complicada que
una comparación simple y/o está en un bucle estrecho, un switch puede ser más rápido.
La lista de sentencias de un case puede también estar vacía, lo cual simplemente pasa el control a la lista
de sentencias del siguiente case.

 switch ($i) {
     case 0:
     case 1:
     case 2:
         print "i es menor que 3, pero no negativo";
         break;
     case 3:
         print "i es 3";
 }




Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Por
ejemplo:

 switch ($i) {
     case 0:
         print "i        es igual a 0";
         break;
     case 1:
         print "i        es igual a 1";
         break;
     case 2:
         print "i        es igual a 2";
         break;
     default:
         print "i        no es igual a 0, 1 o 2";
 }




                                                                                                           91
Capítulo 11. Estructuras de Control

      La expresión case puede ser cualquier expresión que se evalúe a un tipo simple, es decir, números
      enteros o de punto flotante y cadenas de texto. No se pueden usar aquí ni arrays ni objetos a menos que
      se conviertan a un tipo simple.
      La sintaxis alternativa para las estructuras de control está también soportada con switch. Para más
      información, ver Sintaxis alternativa para estructuras de control.

      switch ($i):
           case 0:
               print "i        es igual 0";
               break;
           case 1:
               print "i        es igual a 1";
               break;
           case 2:
               print "i        es igual a 2";
               break;
           default:
               print "i        no es igual a 0, 1 o 2";
       endswitch;




require()
      La sentencia require() se sustituye a sí misma con el archivo especificado, tal y como funciona la
      directiva #include de C.
      Un punto importante sobre su funcionamiento es que cuando un archivo se incluye con include() o se
      requiere con require()), el intérprete sale del modo PHP y entra en modo HTML al principio del archivo
      referenciado, y vuelve de nuevo al modo PHP al final. Por esta razón, cualquier código dentro del archivo
      referenciado que debiera ser ejecutado como código PHP debe ser encerrado dentro de etiquetas válidas
      de comienzo y fin de PHP.
      require() no es en realidad una función de PHP; es más una construcción del lenguaje. Está sujeta a
      algunas reglas distintas de las de funciones. Por ejemplo, require() no esta sujeto a ninguna estructura de
      control contenedora. Por otro lado, no devuelve ningún valor; intentar leer un valor de retorno de una
      llamada a un require() resulta en un error del intérprete.
      A diferencia de include(), require() siempre leerá el archivo referenciado, incluso si la línea en que está
      no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo, se usa include(). La sentencia
      conditional no afecta a require(). No obstante, si la línea en la cual aparece el require() no se ejecuta,
      tampoco se ejecutará el código del archivo referenciado.
      De forma similar, las estructuras de bucle no afectan la conducta de require(). Aunque el código
      contenido en el archivo referenciado está todavía sujeto al bucle, el propio require() sólo ocurre una vez.
      Esto significa que no se puede poner una sentencia require() dentro de una estructura de bucle y esperar
      que incluya el contenido de un archivo distinto en cada iteración. Para hacer esto, usa una sentencia
      include().




                                                                                                                92
Capítulo 11. Estructuras de Control

      require( ’header.inc’ );




      When a file is require()ed, the code it contains inherits the variable scope of the line on which the
      require() occurs. Any variables available at that line in the calling file will be available within the called
      file. If the require() occurs inside a function within the calling file, then all of the code contained in the
      called file will behave as though it had been defined inside that function.
      If the require()ed file is called via HTTP using the fopen wrappers, and if the target server interprets the
      target file as PHP code, variables may be passed to the require()ed file using an URL request string as
      used with HTTP GET. This is not strictly speaking the same thing as require()ing the file and having it
      inherit the parent file’s variable scope; the script is actually being run on the remote server and the result
      is then being included into the local script.

      /* This example assumes that someserver is configured to parse .php
       * files and not .txt files. Also, ’works’ here means that the variables
       * $varone and $vartwo are available within the require()ed file. */

      /* Won’t work; file.txt wasn’t handled by someserver. */
      require ("http://someserver/file.txt?varone=1&vartwo=2");

      /* Won’t work; looks for a file named ’file.php?varone=1&vartwo=2’
       * on the local filesystem. */
      require ("file.php?varone=1&vartwo=2");

      /* Works. */
      require ("http://someserver/file.php?varone=1&vartwo=2");

      $varone    = 1;
      $vartwo    = 2;
      require    ("file.txt");        /* Works. */
      require    ("file.php");        /* Works. */




      En PHP3, es posible ejecutar una sentencia return dentro de un archivo referenciado con require(), en
      tanto en cuanto esa sentencia aparezca en el ámbito global del archivo requerido (require()). No puede
      aparecer dentro de ningún bloque (lo que siginifica dentro de llaves({})). En PHP4, no obstante, esta
      capacidad ha sido desestimada. Si se necesita esta funcionalidad, véase include().
      Ver tambien include(), require_once(), include_once(), readfile(), y virtual().




include()
      La sentencia include() incluye y evalúa el archivo especificado.
      Si "URL fopen wrappers" esta activada en PHP (como está en la configuración inicial), se puede
      especificar el fichero que se va a incluir usando una URL en vez de un fichero local (con su Path) Ver
      Ficheros remotos y fopen() para más información.



                                                                                                                 93
Capítulo 11. Estructuras de Control

Un punto importante sobre su funcionamiento es que cuando un archivo se incluye con include() o se
requiere con require(), el intérprete sale del modo PHP y entra en modo HTML al principio del archivo
referenciado, y vuelve de nuevo al modo PHP al final. Por esta razón, cualquier código dentro del archivo
referenciado que debiera ser ejecutado como código PHP debe ser encerrado dentro de etiquetas válidas
de comienzo y fin de PHP.
Esto sucede cada vez que se encuentra la sentencia include(), así que se puede usar una sentencia
include() dentro de una estructura de bucle para incluir un número de archivos diferentes.

$archivos = array (’primero.inc’, ’segundo.inc’, ’tercero.inc’);
for ($i = 0; $i < count($archivos); $i++) {
    include $archivos[$i];
}




include() difiere de require() en que la sentencia include se re-evalúa cada vez que se encuentra (y sólo
cuando está siendo ejecutada), mientras que la sentencia require() se reemplaza por el archivo
referenciado cuando se encuentra por primera vez, se vaya a evaluar el contenido del archivo o no (por
ejemplo, si está dentro de una sentencia if cuya condición evaluada es falsa).
Debido a que include() es una construcción especial del lenguaje, se debe encerrar dentro de un bloque
de sentencias si está dentro de un bloque condicional.

 /* Esto es ERRÓNEO y no funcionará como se desea. */

 if ($condicion)
      include($archivo);
 else
      include($otro);

 /* Esto es CORRECTO. */

 if ($condicion) {
     include($archivo);
 } else {
     include($otro);
 }




En ambos, PHP3 y PHP4, es posible ejecutar una sentencia return dentro de un archivo incluido con
include(), para terminar el procesado de ese archivo y volver al archivo de comandos que lo llamó.
Existen algunas diferencias en el modo en que esto funciona, no obstante. La primera es que en PHP3,
return no puede aparecer dentro de un bloque a menos que sea un bloque de función, en el cual
return se aplica a esa función y no al archivo completo. En PHP4, no obstante, esta restricción no
existe. También, PHP4 permite devolver valores desde archivos incluidos con include(). Se puede
capturar el valor de la llamada a include() como se haría con una función normal. Esto genera un error de
intérprete en PHP3.




                                                                                                       94
Capítulo 11. Estructuras de Control

Ejemplo 11-1. include() en PHP3 y PHP4

Asumamos la existencia del siguiente archivo (llamado test.inc) en el mismo directorio que el archivo
principal:
<?php
echo "Antes del return <br>n";
if ( 1 ) {
   return 27;
}
echo "Después del return <br>n";
?>


Asumamos que el archivo principal (main.html) contiene lo siguiente:
<?php
$retval = include( ’test.inc’ );
echo "El archivo devolvió: ’$retval’<br>n";
?>


Cuando se llama a main.html en PHP3, generará un error del intérprete en la linea 2; no se puede
capturar el valor de un include() en PHP3. En PHP4, no obstante, el resultado será:
Antes del return
El archivo devolvió: ’27’


Ahora, asumamos que se ha modificado main.html para que contenga lo siguiente:
<?php
include( ’test.inc’ );
echo "De vuelta en main.html<br>n";
?>


En PHP4, la salida será:
Antes del return
De vuelta en main.html

No obstante, PHP3 dará la siguiente salida:
Antes del return
27De vuelta en main.html

Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5


El error del intérprete es resultado del hecho de que la sentencia return está encerrada en un bloque de
no-función dentro de test.inc. Cuando el return se mueve fuera del bloque, la salida es:
Antes del return
27De vuelta en main.html


El ’27’ espúreo se debe al hecho de que PHP3 no soporta devolver valores con return desde archivos
como ese.




                                                                                                      95
Capítulo 11. Estructuras de Control



     When a file is include()ed, the code it contains inherits the variable scope of the line on which the
     include() occurs. Any variables available at that line in the calling file will be available within the called
     file. If the include() occurs inside a function within the calling file, then all of the code contained in the
     called file will behave as though it had been defined inside that function.
     If the include()ed file is called via HTTP using the fopen wrappers, and if the target server interprets the
     target file as PHP code, variables may be passed to the include()ed file using an URL request string as
     used with HTTP GET. This is not strictly speaking the same thing as include()ing the file and having it
     inherit the parent file’s variable scope; the script is actually being run on the remote server and the result
     is then being included into the local script.

     /* This example assumes that someserver is configured to parse .php
      * files and not .txt files. Also, ’works’ here means that the variables
      * $varone and $vartwo are available within the include()ed file. */

     /* Won’t work; file.txt wasn’t handled by someserver. */
     include ("http://someserver/file.txt?varone=1&vartwo=2");

     /* Won’t work; looks for a file named ’file.php?varone=1&vartwo=2’
      * on the local filesystem. */
     include ("file.php?varone=1&vartwo=2");

     /* Works. */
     include ("http://someserver/file.php?varone=1&vartwo=2");

     $varone    = 1;
     $vartwo    = 2;
     include    ("file.txt");        /* Works. */
     include    ("file.php");        /* Works. */




     See also require(), require_once(), include_once(), readfile(), and virtual().




require_once()
     The require_once() statement replaces itself with the specified file, much like the C preprocessor’s
     #include works, and in that respect is similar to the require() statement. The main difference is that in
     an inclusion chain, the use of require_once() will assure that the code is added to your script only once,
     and avoid clashes with variable values or function names that can happen.
     For example, if you create the following 2 include files utils.inc and foolib.inc

     Ejemplo 11-2. utils.inc

     <?php
     define(PHPVERSION, floor(phpversion()));
     echo "GLOBALS ARE NICEn";




                                                                                                                96
Capítulo 11. Estructuras de Control

function goodTea() {
        return "Oolong tea tastes good!";
}
?>



Ejemplo 11-3. foolib.inc

<?php
require ("utils.inc");
function showVar($var) {
        if (PHPVERSION == 4) {
                 print_r($var);
        } else {
                 dump_var($var);
        }
}

// bunch of other functions ...
?>


And then you write a script cause_error_require.php


Ejemplo 11-4. cause_error_require.php

<?php
require("foolib.inc");
/* the following will generate an error */
require("utils.inc");
$foo = array("1",array("complex","quaternion"));
echo "this is requiring utils.inc again which is alson";
echo "required in foolib.incn";
echo "Running goodTea: ".goodTea()."n";
echo "Printing foo: n";
showVar($foo);
?>


When you try running the latter one, the resulting ouptut will be (using PHP 4.01pl2):


GLOBALS ARE NICE
GLOBALS ARE NICE

Fatal error:      Cannot redeclare causeerror() in utils.inc on line 5


By modifying foolib.inc and cause_errror_require.php to use require_once() instead of
require() and renaming the last one to avoid_error_require_once.php, we have:




                                                                                                     97
Capítulo 11. Estructuras de Control

Ejemplo 11-5. foolib.inc (fixed)

...
require_once("utils.inc");
function showVar($var) {
...



Ejemplo 11-6. avoid_error_require_once.php

...
require_once("foolib.inc");
require_once("utils.inc");
$foo = array("1",array("complex","quaternion"));
...


And when running the latter, the output will be (using PHP 4.0.1pl2):


GLOBALS ARE NICE
this is requiring globals.inc again which is also
required in foolib.inc
Running goodTea: Oolong tea tastes good!
Printing foo:
Array
(
    [0] => 1
    [1] => Array
        (
             [0] => complex
             [1] => quaternion
        )

)




Also note that, analogous to the behavior of the #include of the C preprocessor, this statement acts at
"compile time", e.g. when the script is parsed and before it is executed, and should not be used for parts
of the script that need to be inserted dynamically during its execution. You should use include_once() or
include() for that purpose.
For more examples on using require_once() and include_once(), look at the PEAR code included in the
latest PHP source code distributions.
See also: require(), include(), include_once(), get_required_files(), get_included_files(), readfile(), and
virtual().




                                                                                                           98
Capítulo 11. Estructuras de Control

include_once()
     The include_once() statement includes and evaluates the specified file during the execution of the script.
     This is a behavior similar to the include() statement, with the important difference that if the code from a
     file has already been included, it will not be included again.
     As mentioned in the require_once() description, the include_once() should be used in the cases in which
     the same file might be included and evaluated more than once during a particular execution of a script,
     and you want to be sure that it is included exactly once to avoid problems with function redefinitions,
     variable value reassignments, etc.
     For more examples on using require_once() and include_once(), look at the PEAR code included in the
     latest PHP source code distributions.
     See also: require(), include(), require_once(), get_required_files(), get_included_files(), readfile(), and
     virtual().




                                                                                                                99
Capítulo 12. Funciones




                         100
Capítulo 12. Funciones

Funciones definidas por el usuario
      Una función se define con la siguiente sintaxis:


      function foo ($arg_1, $arg_2, ..., $arg_n) {
          echo "Función de ejemplo.n";
          return $retval;
      }




      Cualquier instrucción válida de PHP puede aparecer en el cuerpo de la función, incluso otras funiones y
      definiciones de clases.
      En PHP3, las funciones deben definirse antes de que se referencien. En PHP4 no existe tal requerimiento.
      PHP no soporta la sobrecarga de funciones, y tampoco es posible redefinir u ocultar funciones
      previamente declaradas.
      PHP3 no soporta un número variable de parámetros, aunque sí soporta parámetros por defecto (ver
      Valores por defecto de de los parámetros para más información). PHP4 soporta ambos: ver Listas de
      longitud variable de parámetros y las referencias de las funciones func_num_args(), func_get_arg(), y
      func_get_args() para más información.




Parámetros de las funciones
      La información puede suministrarse a las funciones mediante la lista de parámetros, una lista de
      variables y/o constantes separadas por comas.
      PHP soporta pasar parámetros por valor (el comportamiento por defecto), por referencia, y parámetros
      por defecto. Listas de longitud variable de parámetros sólo están soportadas en PHP4 y posteriores; ver
      Listas de longitud variable de parámetros y la referencia de las funciones func_num_args(),
      func_get_arg(), y func_get_args() para más información. Un efecto similar puede conseguirse en PHP3
      pasando un array de parámetros a la función:

      function takes_array($input) {
          echo "$input[0] + $input[1] = ", $input[0]+$input[1];
      }




Pasar parámetros por referencia
      Por defecto, los parámetros de una función se pasan por valor (de manera que si cambias el valor del
      argumento dentro de la función, no se ve modificado fuera de ella). Si deseas permitir a una función
      modificar sus parámetros, debes pasarlos por referencia.




                                                                                                             101
Capítulo 12. Funciones

      Si quieres que un parámetro de una función siempre se pase por referencia, puedes anteponer un
      ampersand (&) al nombre del parámetro en la definición de la función:

      function add_some_extra(&$string) {
          $string .= ’ y algo más.’;
      }
      $str = ’Esto es una cadena, ’;
      add_some_extra($str);
      echo $str;    // Saca ’Esto es una cadena, y algo más.’




      Si deseas pasar una variable por referencia a una función que no toma el parámetro por referencia por
      defecto, puedes anteponer un ampersand al nombre del parámetro en la llamada a la función:

      function foo ($bar) {
          $bar .= ’ y algo más.’;
      }
      $str = ’Esto es una cadena, ’;
      foo ($str);
      echo $str;    // Saca ’Esto es una cadena, ’
      foo (&$str);
      echo $str;    // Saca ’Esto es una cadena, y algo más.’




Parámetros por defecto
      Una función puede definir valores por defecto para los parámetros escalares estilo C++:

      function makecoffee ($type = "cappucino") {
          return "Hacer una taza de $type.n";
      }
      echo makecoffee ();
      echo makecoffee ("espresso");




      La salida del fragmento anterior es:

      Hacer una taza de cappucino.
      Hacer una taza de espresso.




      El valor por defecto tiene que ser una expresión constante, y no una variable o miembro de una clase.




                                                                                                              102
Capítulo 12. Funciones

      En PHP 4.0 también es posible especificar unset como parámetro por defecto. Esto significa que el
      argumento no tomará ningún valor en absoluto si el valor no es suministrado.
      Destacar que cuando se usan parámetros por defecto, estos tienen que estar a la derecha de cualquier
      parámetro sin valor por defecto; de otra manera las cosas no funcionarán de la forma esperada. Considera
      el siguiente fragmento de código:

      function makeyogurt ($type = "acidophilus", $flavour) {
          return "Haciendo un bol de $type $flavour.n";
      }

      echo makeyogurt ("mora");             // No funcionará de la manera esperada




      La salida del ejemplo anterior es:

      Warning: Missing argument 2 in call to makeyogurt() in
      /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
      Haciendo un bol de mora.




      Y ahora, compáralo con:

      function makeyogurt ($flavour, $type = "acidophilus") {
          return "Haciendo un bol de $type $flavour.n";
      }

      echo makeyogurt ("mora");             // funciona como se esperaba




      La salida de este ejemplo es:

      Haciendo un bol de acidophilus mora.




Lista de longitud variable de parámetros
      PHP4 soporta las listas de longitud variable de parámetros en las funciones definidas por el usuario. Es
      realmente fácil, usando las funciones func_num_args(), func_get_arg(), y func_get_args().
      No necesita de ninguna sintaxis especial, y las listas de parámetros pueden ser escritas en la llamada a la
      función y se comportarán de la manera esperada.




                                                                                                             103
Capítulo 12. Funciones

Devolver valores
     Los valores se retornan usando la instrucción opcional return. Puede devolverse cualquier tipo de valor,
     incluyendo listas y objetos.


     function square ($num) {
         return $num * $num;
     }
     echo square (4);   // saca ’16’.




     No puedes devolver múltiples valores desde una función, pero un efecto similar se puede conseguir
     devolviendo una lista.

     function small_numbers() {
         return array (0, 1, 2);
     }
     list ($zero, $one, $two) = small_numbers();




old_function
     La instrucción old_function permite declarar una función usando una sintaxis idéntica a la de
     PHP/FI2 (excepto que debes reemplazar ’function’ por ’old_function’).
     Es una característica obsoleta, y debería ser usada únicamente por el conversor PHP/FI2->PHP3.


                                                      Aviso
                 Las funciones declaradas como old_function no pueden llamarse desde el
                 código interno de PHP. Entre otras cosas, esto significa que no puedes usarlas en
                 funciones como usort(), array_walk(), y register_shutdown_function(). Puedes
                 solventar esta limitación escribiendo un "wrapper" (en PHP3 normal) que a su vez
                 llame a la función declarada como old_function.




Funciones variable
     PHP soporta el concepto de funciones variable, esto significa que si una variable tiene unos paréntesis
     añadidos al final, PHP buscará una función con el mismo nombre que la evaluación de la variable, e
     intentará ejecutarla. Entre otras cosas, esto te permite implementar retrollamadas (callbacks), tablas de
     funciones y demás.




                                                                                                            104
Capítulo 12. Funciones

Ejemplo 12-1. Ejemplo de función variable

<?php
function foo() {
    echo "Dentro de foo()<br>n";
}

function bar( $arg = ” ) {
    echo "Dentro de bar(); el parámetro fue ’$arg’.<br>n";
}

$func = ’foo’;
$func();
$func = ’bar’;
$func( ’test’ );
?>




                                                                                105
Capítulo 13. Clases y Objetos




                                106
Capítulo 13. Clases y Objetos

class
        Una clase es una colección de variables y de funciones que acceden a esas variables. Una clase se define
        con la siguiente sintaxis:


        <?php
        class Cart {
            var $items;        // Items en nuestro carro de la compra

             // Añadir $num artículos de tipo $artnr al carro

             function add_item ($artnr, $num) {
                 $this->items[$artnr] += $num;
             }

             // Sacar $num artículos del tipo $artnr del carro

             function remove_item ($artnr, $num) {
                 if ($this->items[$artnr] > $num) {
                     $this->items[$artnr] -= $num;
                     return true;
                 } else {
                     return false;
                 }
             }
        }
        ?>




        El ejemplo define una clase llamada Cart que consiste en un array asociativo de artículos en el carro y
        dos funciones para meter y sacar ítems del carro
        Las clases son tipos, es decir, son plantillas para variables. Tienes que crear una variable del tipo deseado
        con el operador new.

         $cart = new Cart;
         $cart->add_item("10", 1);


        Este ejemplo crea un objeto $cart de clase Cart. La función add_item() de ese objeto se llama para añadir
        un item del artículo número 10 al carro.
        Las Clases pueden ser extensiones de otras clases. Las clases extendidas o derivadas tienen todas las
        variables y funciones de la clase base y lo que les añadas al extender la definición. La herencia múltiple
        no está soportada.

        class Named_Cart extends Cart {
            var $owner;

             function set_owner ($name) {
                 $this->owner = $name;




                                                                                                                 107
Capítulo 13. Clases y Objetos

     }
}


Ese ejemplo define una clase Named_Cart (carro con nombre o dueño) que tiene todas las variables y
funciones de Cart, y además añade la variable $owner y una función adicional set_owner(). Un carro con
nombre se crea de la forma habitual y, una vez hecho, puedes acceder al propietario del carro. En los
carros con nombre también puedes acceder a las funciones normales del carro:

$ncart = new Named_Cart;              //   Creamos un carro con nombre
$ncart->set_owner ("kris");           //   Nombramos el carro
print $ncart->owner;                  //   Imprimimos el nombre del propietario
$ncart->add_item ("10", 1);           //   Funcionalidad heredada de Cart


Entre funciones de una clase, la variable $this hace referencia al propio objeto. Tienes que usar
$this->loquesea para acceder a una variable o función llamada loquesea del objeto actual.
Los constructores son funciones de una clase que se llaman automáticamente al crear una nueva instancia
(objeto) de una clase. Una función se convierte en constructor cuando tiene el mismo nombre que la
clase.

class Auto_Cart extends Cart {
    function Auto_Cart () {
        $this->add_item ("10", 1);
    }
}


Este ejemplo define una clase Auto_Cart que es un Cart junto con un constructor que inicializa el carro
con un item del tipo de artículo "10" cada vez que se crea un nuevo Auto_Cart con "new". Los
constructores también pueden recibir parámetros y estos parámetros pueden ser opcionales, lo que los
hace más útiles.

class Constructor_Cart extends Cart {
    function Constructor_Cart ($item = "10", $num = 1) {
        $this->add_item ($item, $num);
    }
}

// Compramos las mismas cosas aburridas de siempre

$default_cart         = new Constructor_Cart;

// Compramos las cosas interesantes

$different_cart = new Constructor_Cart ("20", 17);




                                                                                                     108
Capítulo 13. Clases y Objetos



                                 Atención
Para las clases derivadas, el constructor de la clase padre no es llamado
automáticamente cuando se llama al constructor de la clase derivada.




                                                                                        109
Capítulo 14. References Explained




                                    110
Capítulo 14. References Explained

What References Are
     References in PHP are a means to access the same variable content by different names. They are not like
     C pointers, they are symbol table aliases. Note that in PHP, variable name and variable content are
     different, so the same content can have different names. The most close analogy is with Unix filenames
     and files - variable names are directory entries, while variable contents is the file itself. References can be
     thought of as hardlinking in Unix filesystem.




What References Do
     PHP references allow you to make two variables to refer to the same content. Meaning, when you do:



     $a =& $b




     it means that $a and $b point to the same variable.


          Nota: $a and $b are completely equal here, that’s not $a is pointing to $b or vice versa, that’s $a and
          $b pointing to the same place.




     The same syntax can be used with functions, that return references, and with new operator (in PHP 4.0.4
     and later):


     $bar =& new fooclass();
     $foo =& find_var ($bar);




          Nota: Not using the & operator causes a copy of the object to be made. If you use $this in the class
          it will operate on the current instance of the class. The assignment without & will copy the instance
          (i.e. the object) and $this will operate on the copy, which is not always what is desired. Usually you
          want to have a single instance to work with, due to performance and memory consumption issues.
          While you can use the @ operator to mute any errors in the constructor when using it as @new, this
          does not work when using the &new statement. This is a limitation of the Zend Engine and will
          therefore result in a parser error.



     The second thing references do is to pass variables by-reference. This is done by making a local variable
     in a function and a variable in the calling scope reference to the same content. Example:




                                                                                                              111
Capítulo 14. References Explained


     function foo (&$var)
     {
         $var++;
     }

     $a=5;
     foo ($a);




     will make $a to be 6. This happens because in the function foo the variable $var refers to the same
     content as $a. See also more detailed explanations about passing by reference.
     The third thing reference can do is return by reference.




What References Are Not
     As said before, references aren’t pointers. That means, the following construct won’t do what you
     expect:



     function foo (&$var)
     {
         $var =& $GLOBALS["baz"];
     }
     foo($bar);




     What happens is that $var in foo will be bound with $bar in caller, but then it will be re-bound with
     $GLOBALS["baz"]. There’s no way to bind $bar in the calling scope to something else using the
     reference mechanism, since $bar is not available in the function foo (it is represented by $var, but
     $var has only variable contents and not name-to-value binding in the calling symbol table).




Passing by Reference
     You can pass variable to function by reference, so that function could modify its arguments. The syntax
     is as follows:



     function foo (&$var)
     {
         $var++;
     }




                                                                                                           112
Capítulo 14. References Explained

$a=5;
foo ($a);
// $a is 6 here




Note that there’s no reference sign on function call - only on function definition. Function definition
alone is enough to correctly pass the argument by reference.
Following things can be passed by reference:

•   Variable, i.e. foo($a)
•   New statement, i.e. foo(new foobar())
•   Reference, returned from a function, i.e.:


    function &bar()
    {
        $a = 5;
        return $a;
    }
    foo(bar());




    See also explanations about returning by reference.


Any other expression should not be passed by reference, as the result is undefined. For example, the
following examples of passing by reference are invalid:


function bar() // Note the missing &
{
    $a = 5;
    return $a;
}
foo(bar());

foo($a = 5) // Expression, not variable
foo(5) // Constant, not variable




These requirements are for PHP 4.0.4 and later.




                                                                                                        113
Capítulo 14. References Explained

Returning References
     Returning by-reference is useful when you want to use a function to find which variable a reference
     should be bound to. When returning references, use this syntax:



     function &find_var ($param)
     {
         ...code...
         return $found_var;
     }

     $foo =& find_var ($bar);
     $foo->x = 2;




     In this example, the property of the object returned by the find_var function would be set, not the copy,
     as it would be without using reference syntax.

          Nota: Unlike parameter passing, here you have to use & in both places - to indicate that you return
          by-reference, not a copy as usual, and to indicate that reference binding, rather than usual
          assignment, should be done for $foo.




Unsetting References
     When you unset the reference, you just break the binding between variable name and variable content.
     This does not mean that variable content will be destroyed. For example:



     $a = 1;
     $b =& $a;
     unset ($a);




     won’t unset $b, just $a.
     Again, it might be useful to think about this as analogous to Unix unlink call.




Spotting References
     Many syntax constructs in PHP are implemented via referencing mechanisms, so everything told above
     about reference binding also apply to these constructs. Some constructs, like passing and returning
     by-reference, are mentioned above. Other constructs that use references are:




                                                                                                           114
Capítulo 14. References Explained

global References
        When you declare variable as global $var you are in fact creating reference to a global variable. That
        means, this is the same as:



        $var =& $GLOBALS["var"];




        That means, for example, that unsetting $var won’t unset global variable.



$this
        In an object method, $this is always reference to the caller object.




                                                                                                             115
Parte III. Características

Capítulo 15. Manejando errores




                                 116
Capítulo 15. Manejando errores

Existen diferentes tipos de errores y advertencias en PHP. Son los siguientes:

Tabla 15-1. Tipos de error PHP

Valor                     Constante                  Descripción                    Nota
1                         E_ERROR                    errores fatales en tiempo
                                                     de ejecución
2                         E_WARNING                  advertencias en tiempo de
                                                     ejecución (no errores
                                                     fatales)
4                         E_PARSE                    errores fatales en tiempo
                                                     de compilación
8                         E_NOTICE                   avisos en tiempo de
                                                     ejecución (no tan
                                                     importante como una
                                                     advertencia)
16                        E_CORE_ERROR               errores fatales que            Solo en PHP 4
                                                     ocurren durante el
                                                     proceso inicial de
                                                     arranque de PHP
32                        E_CORE_WARNING             advertencias fatales que       Solo en PHP 4
                                                     ocurren durante el
                                                     proceso inicial de
                                                     arranque de PHP
64                        E_COMPILE_ERROR            errores fatales en tiempo solo en PHP 4
                                                     de compilación
128                       E_COMPILE_WARNINGadvertencias en tiempo de Solo en PHP 4
                                           compilación (no errores
                                           fatales)
256                       E_USER_ERROR               mensaje de error               Solo en PHP 4
                                                     generado por el usuario
512                       E_USER_WARNING             mensaje de advertencia         solo en PHP 4
                                                     generado por el usuario
1024                      E_USER_NOTICE              mensaje de aviso               Solo en PHP 4
                                                     generado por el usuario
                          E_ALL                      todos los anteriores, all of
                                                     the above, según lo
                                                     soportado



Los valores indicados arriba (tanto num$eacute;ricos como simbólicos) son usados para crear una
máscara de bits (bitmask) que especifica de los errores que hay que informar. Podeis usar los operadores
bitwise para combinar estos valores ó aplicar una máscara a ciertos tipos de errores. Tener en cuenta que
que solamente ’|’, ’~’, ’!’, y ’&’ seran interpretados dentro de php.ini y que ningún operador bitwise
será interpretado dentro de php3.ini.




                                                                                                     117
Capítulo 15. Manejando errores

En PHP 4, el valor por defecto de error_reporting es E_ALL & ~E_NOTICE, esto siginifica que todos los
errores y advertencias que no pertenecen al nivel E_NOTICE, serán presentados cuando ocurran. En
PHP 3, el valor por defecto es (E_ERROR | E_WARNING | E_PARSE), teniendo el mismo significado.
Tener en cuenta que al no soportar constantes en el fichero de configuración de PHP php3.ini, el valor
de error_reporting debe ser numérico, por lo tanto es 7.
La configuración inicial puede cambiarse, en el fichero ini con la directiva error_reporting, en el fichero
httpd.conf de Apache con la directiva php_error_reporting (php3_error_reporting en PHP 3) y
finalmente en tiempo de ejecución desde el script PHP que se este ejecutando, usando la función
error_reporting().


                                                Aviso
           Cuando actualiceis código o servidores de PHP 3 a PHP 4, deberiais comprobar
           los valores y llamadas a error_reporting() para no deshabilitar los nuevos tipos de
           mensajes de error, especialmente E_COMPILE_ERROR. Si esto ocurriese
           podriais obtener documentos vacios sin ningún tipo de mensaje de error ó donde
           buscar el fallo.


Todas las expresioness PHP pueden también ser llamadas con el prefijo "@", el cual desactiva el aviso de
errores para esa expresión en particular. Si ocurre un error en una expresión en tal situación y la
característica track_errors está habilitada, podrás encontrar el mensaje de error en la variable global
$php_errormsg.

     Nota: El operador de control de errores @ no desactivará mensajes producidos por errores en el
     parseador.




                                                Aviso
           Actualmente el operador de control de errores @ incluso desactivará mensajes
           producidos por errores críticos que terminarán la ejecución del script. Entre otras
           cosas, esto significa que si utilizais @ para suprimir mensajes de error de alguna
           función, tanto si no está disponible como si contiene algún error, el script quedará
           interumpido sin ningún tipo de indicación de porque.


A continuación tenemos un ejemplo de como manejar errores en PHP. Definimos una función de manejo
de errores, la cual registra el error en un fichero (usando el formato XML) y manda un e-mail al
programador si un error crítico ocurre.


Ejemplo 15-1. Usando el manejo de errores en un script


<?php
// Los errores los manejamos nosotros
error_reporting(0);

// funcion de manejos de errores definida por el usuario
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {




                                                                                                     118
Capítulo 15. Manejando errores

    // timestamp for the error entry
    $dt = date("Y-m-d H:i:s (T)");

    // Define una array con los valores de errores
    // en realidad solamente deberiamos de tener
    // en cuenta los valores 2,8,256,512 y 1024

    $errortype = array (
                1   => "Error",
                2   => "Warning",
                4   => "Parsing Error",
                8   => "Notice",
                16 => "Core Error",
                32 => "Core Warning",
                64 => "Compile Error",
                128 => "Compile Warning",
                256 => "User Error",
                512 => "User Warning",
                1024=> "User Notice"
                );

    // errores a tener en cuenta
    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

    $err   = "<errorentry>n";
    $err   .= "t<datetime>".$dt."</datetime>n";
    $err   .= "t<errornum>".$errno."</errornum>n";
    $err   .= "t<errortype>".$errortype[$errno]."</errortype>n";
    $err   .= "t<errormsg>".$errmsg."</errormsg>n";
    $err   .= "t<scriptname>".$filename."</scriptname>n";
    $err   .= "t<scriptlinenum>".$linenum."</scriptlinenum>n";

    if (in_array($errno, $user_errors))
        $err .= "t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>n";
    $err .= "</errorentry>nn";

    // Para comprobar
    // echo $err;

    // grabar en el fichero de errores y mandar un e-mail si ocurre un error critico de usua
    error_log($err, 3, "/usr/local/php4/error.log");
    if ($errno == E_USER_ERROR)
        mail("phpdev@example.com","Critical User Error",$err);
}


function distance ($vect1, $vect2) {
    if (!is_array($vect1) || !is_array($vect2)) {
        trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
        return NULL;
    }

    if (count($vect1) != count($vect2)) {




                                                                                 119
Capítulo 15. Manejando errores

          trigger_error("Vectors need to be of the same size", E_USER_ERROR);
          return NULL;
      }

      for ($i=0; $i<count($vect1); $i++) {
          $c1 = $vect1[$i]; $c2 = $vect2[$i];
          $d = 0.0;
          if (!is_numeric($c1)) {
              trigger_error("Coordinate $i in vector 1 is not a number, using zero",
                              E_USER_WARNING);
              $c1 = 0.0;
          }
          if (!is_numeric($c2)) {
              trigger_error("Coordinate $i in vector 2 is not a number, using zero",
                              E_USER_WARNING);
              $c2 = 0.0;
          }
          $d += $c2*$c2 - $c1*$c1;
      }
      return sqrt($d);
}

$old_error_handler = set_error_handler("userErrorHandler");

//constante no definida, genera una advertencia
$t = I_AM_NOT_DEFINED;

//   definimos algunos vectores
$a   = array(2,3,"foo");
$b   = array(5.5, 4.3, -1.6);
$c   = array (1,-3);

// genera un error de usuario
$t1 = distance($c,$b)."n";

// genera otro error de usuario
$t2 = distance($b,"i am not an array")."n";

// genera una advertencia
$t3 = distance($a,$b)."n";

?>




Este es un ejemplo simple que muestra como utilizar las funciones de manejo de errores y registro.
Consultar tambien error_reporting(), error_log(), set_error_handler(), restore_error_handler(),
trigger_error(), user_error()




                                                                                                     120
Capítulo 16. Creando y manipulando imágenes




                                          121
Capítulo 16. Creando y manipulando imágenes

PHP no está limitado a crear solo salidas de HTML. Puede ser usado también para crear y manipular
ficheros de imágenes en diferentes formatos, incluyendo gif, png, jpg, wbmp, y xpm. PHP puede incluso
mandar flujos de imágenes directamente al navegador. Necesitais compilar PHP con la biblioteca de
funciones de imágenes GD para esta tarea. GD y PHP puede que necesiten otras bibliotecas, dependiendo
del formato de imagen con el que querais trabajar. GD dejo de soportar imagenes Gif en la versión 1.6.


Ejemplo 16-1. Creación de PNGs con PHP


<?php
    Header("Content-type: image/png");
    $string=implode($argv," ");
    $im = ImageCreateFromPng("images/button1.png");
    $orange = ImageColorAllocate($im, 220, 210, 60);
    $px = (imagesx($im)-7.5*strlen($string))/2;
    ImageString($im,3,$px,9,$string,$orange);
    ImagePng($im);
    ImageDestroy($im);
?>




Este ejemplo será llamado desde una página con una línea como esta: <imgsrc="button.php?text"> Este
script de arriba button.php toma esta cadena "text" la situa sobre la imagen base, en este caso es
"images/button1.png" y muestra la imagen resultante. Esta es una forma muy conveniente para evitar
tener que dibujar un nuevo botón cada vez que quiera cambiar el texto del mismo. Con este método los
botones son generados dinámicamente.




                                                                                                  122
Capítulo 17. Autentificación HTTP con PHP




                                           123
Capítulo 17. Autentificación HTTP con PHP

Las caracteríticas de autentificación HTTP en PHP solo estan disponibles cuando se está ejecutando
como un módulo en Apache y hasta ahora no lo estan en la versión CGI. En un script PHP como módulo
de Apache, se puede usar la función header() para enviar un mensaje de "Autentificación requerida" al
navegador cliente haciendo que muestre una ventana de entrada emergente con nombre de usuario y
contraseña. Una vez que el usuario ha rellenado el nombre y la contraseña, la URL que contiene el script
PHP vuelve a ser llamada con las variables $PHP_AUTH_USER, $PHP_AUTH_PW y
$PHP_AUTH_TYPE rellenas con el nombre de usuario, la contraseña y el tipo de autentificación
respectivamente. Sólo autentificación "Básica" esta soportada en este momento. Consulte la función
header() para más información.
Un fragmento de script de ejmplo que fuerce la autentificación del cliente en una página sería como el
siguiente:

Ejemplo 17-1. Ejemplo de autentificación HTTP


<?php
   if (!isset($_SERVER[’PHP_AUTH_USER’])) {
     header("WWW-Authenticate: Basic realm="My Realm"");
     header("HTTP/1.0 401 Unauthorized");
     echo "Text to send if user hits Cancel buttonn";
     exit;
   } else {
     echo "<p>Hello {$_SERVER[’PHP_AUTH_USER’]}.</p>";
     echo "<p>You entered {$_SERVER[’$PHP_AUTH_PW’]} as your password.</p>";
   }
?>




     Nota: Por favor tener cuidado cuando esteis programando las lines de cabecera HTTP. Para
     garantizar la maxima compatibilidad con todos los clientes, la palabra clave "Basic" debe de ser
     escrita con "B" mayúscula, la cadena de texto debe estar incluida entre comillas dobles (no simples)
     y un espacio debe preceder el código "401" en la linea de cabecera "HTTP/1.0 401"



En vez de, sencillamente, mostrar $PHP_AUTH_USER y $PHP_AUTH_PW, seguramente querais
comprobar la validez del nombre de usuario y la contraseña. Tal vez enviando una consulta a una base de
datos o buscando el usuario en un fichero dbm.
Vigilar aquí los navegadores Interner Explorer con bugs. Parecen muy quisquillosos con el orden de las
cabeceras. Enviar la cabecera WWW-Autentificación antes que la cabecera HTTP/1.0 401 parece ser el
truco por ahora.
Para prevenir que alguien escriba un script que revele la contraseña de una página que ha sido
autentificada a través de algún mecanismo externo tradicional, las variables PHP_AUTH no serán
rellenadas si algún tipo de autentificación externo ha sido activado para una página en particular. En este
caso, la variable $REMOTE_USER puede ser usada para identificar al usuario autentificado
externamente.




                                                                                                      124
Capítulo 17. Autentificación HTTP con PHP

     Configuration Note: PHP usa la directiva AuthType para determinar si una autentificación externa
     esta en uso. Recordar no usar esta directiva cuando querais usar la autentificación de PHP (si no
     todo intentento de autentificación fallará)



Nota, a pesar de todo, lo ya dicho no proteje de que alguien que controle una URL no autentificada robe
contraseñas de URLs autentificadas en el mismo servidor.
Tanto Netscape como Internet Explorer borrarán la caché de la ventana de autentificación en el
navegador local después de recibir una respuesta 401 del servidor. Esto puede usarse, de forma efectiva,
para "desconectar" a un usuario, forzandole a reintroducir su nombre y contraseña. Algunas personas
usan esto para "hacer caducar" entradas, o para proveer un botón de "desconectar".


Ejemplo 17-2. Ejemplo de autentificación HTTP forzando una reentrada


<?php
  function authenticate() {
    header( "WWW-Authenticate: Basic realm="Test Authentication System"");
    header( "HTTP/1.0 401 Unauthorized");
    echo "You must enter a valid login ID and password to access this resourcen"
;
    exit;
  }

   if (!isset($_SERVER[’PHP_AUTH_USER’]) || ($SeenBefore == 1 && $OldAuth == $_SER
VER[’$PHP_AUTH_USER’]))) {
    authenticate();
   }
   else {
    echo "<p>Welcome: {$_SERVER[’$PHP_AUTH_USER’]}<br>";
    echo "Old: {$_REQUEST[’$OldAuth’]}";
    echo "<form action=’{$_SERVER[’$PHP_SELF’]}’ METHOD=’POST’>n";
    echo "<input type=’hidden’ name=’SeenBefore’ value=’1’>n";
    echo "<input type=’hidden’ name=’OldAuth’ value=’{$_SERVER[’$PHP_AUTH_USER’]}’
>n";
    echo "<input type=’submit’ value=’Re Authenticate’>n";
    echo "</form></p>n";
   }
?>




Este comportamiento no es requerido por el estándar de autentificación básica de HTTP, por lo que
nunca debe depender de esto. Pruebas con Lynx han demostrado que Lynx no borra las credenciales de
autentificación con una respuesta 401 del servidor, por lo que pulsando atrás y después adelante abriría el
recurso de nuevo (siempre que los requerimientos de contraseña no hayan cambiado).
Además tener en cuanta que esto no funciona usando el servidor IIS de Microsoft y la versión CGI de
PHP debido a una limitación del IIS




                                                                                                      125
Capítulo 18. Cookies




                       126
Capítulo 18. Cookies

PHP soporta transparentemente cookies HTTP. Las Cookies son un mecanismo que sirve para almacenar
datos en el navegador del usuario remoto, para así poder identificar al usuario cuando vuelva. Se pueden
poner cookies usando la función setcookies(). Las Cookies son parte de la cabecera HTTP, por tanto la
función setcookie() debe ser llamada antes de que se produzca cualquier salida al navegador. Esta
limitación es la misma a la de la función header(). Se pueden usar las funciones de almacenamiento
intermedio del resultado para retrasar el resultado del script hasta que hayas decidido mandar o no una
cookie o cabecera.
Cualquier cookie enviada a ti desde el cliente, automáticamente se convertirá en una variable PHP igual
como ocurre con los métodos de datos GET y POST, dependiendo de las variables de configuración
register_globals y variables_order. Si deseas asignar multiples valores a una cookie simple,
añade simplemente [] a el nombre de la cookie.
En PHP 4.1.0 y posteriores, la array auto-global $_COOKIE será siempre actualizada con cualquier
cookie mandada por el cliente. $HTTP_COOKIE_VARS es tambien actualizada en versiones anteriores de
PHP cuando la variable de configuración track_vars esté activada.
Para más detalles ver la función setcookie().




                                                                                                    127
Capítulo 19. Manejo de envío de ficheros




                                          128
Capítulo 19. Manejo de envío de ficheros

Envío de archivos con el método POST
     PHP es capaz de recibir envíos de archivo de cualquier navegador que cumpla la norma RFC-1867 (entre
     los que se incluyen Netscape Navigator 3 o posterior, Microsoft Internet Explorer 3 con un parche o
     posterior sin éste). Ésta característica permite que los usuarios envien archivos de texto y binarios.
     Mediante la autentificación y funciones de manejo de archivos de PHP, es posible un control total de
     quién puede enviar archivos y que se hace con éstos una vez recibidos.
     Es importante destacar que PHP también soporta el método PUT para envío de archivos tal y como lo
     utiliza Netscape Composer y el cliente Amaya de W3C. Consulte Soporte del método PUT para más
     detalles.
     Una página de envío de archivos se puede crear mediante un formulario parecido a éste:

     Ejemplo 19-1. Formulario de envío de archivo


     <form enctype="multipart/form-data" action="_URL_" method="post">
     <input type="hidden" name="MAX_FILE_SIZE" value="1000">
     Send this file: <input name="userfile" type="file">
     <input type="submit" value="Send File">
     </form>




     La _URL_ debe tener como destino un script PHP. El input oculto MAX_FILE_SIZE debe encontrarse
     antes del input de tipo "file" para indicar el tamaño máximo de archivo que se puede enviar en bytes


                                                           Aviso
                       MAX_FILE_SIZE debe ser consultado por el navegador; aun así es sencillo
                       saltarse este máximo por lo tanto no se debe presuponer que el navegador
                       siempre lo respetará. En contrapartida, la configuracion de PHP relativa al tamaño
                       maximo no puede ser obviada.




     Las variables definidas para los archivos enviados varian en función de la versión y configuración de
     PHP que se utilice. Las variables de las que hablamos a continuación serán definidas en la página destino
     despues de una recepción de fichero correcta. Cuando track_vars este activado, el array
     $HTTP_POST_FILES/$_FILES se inicializará. Por ultimo, las variables relacionadas seran inicializadas
     como globales cuando register_globals esté habilitado. Cabe señalar que el uso de las variables globales
     no esta recomendado en ningún caso.

         Nota: track_vars esta activado siempre desde PHP 4.0.3. A partir de PHP 4.1.0 , $_FILES puede
         ser utilizado alternativamente a $HTTP_POST_FILES. $_FILES es siempre global asi que global no
         debe ser usado con $_FILES en el ámbito de función.



     $HTTP_POST_FILES/$_FILES contienen la información sobre el fichero recibido.




                                                                                                           129
Capítulo 19. Manejo de envío de ficheros

        A continuación se describe el contenido de $HTTP_POST_FILES. Se ha tomado el nombre ’userfile’ para
        el fichero recibido tal y como se usaba en el script de ejemplo anterior:

$HTTP_POST_FILES[’userfile’][’name’]

               El nombre original del fichero en la máquina cliente.

$HTTP_POST_FILES[’userfile’][’type’]
               El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser "image/gif".

$HTTP_POST_FILES[’userfile’][’size’]

               El tamaño en bytes del fichero recibido.

$HTTP_POST_FILES[’userfile’][’tmp_name’]

               El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.



              Nota: A partir de PHP 4.1.0 se puede utilizar el variable corta $_FILES. PHP 3 no soporta
              $HTTP_POST_FILES.




        Cuando register_globals se activa en el php.ini las siguientes variables son accesibles. Se ha tomado el
        nombre ’userfile’ para el fichero recibido tal y como se usaba en el script de ejemplo del principio:



        •   $userfile - El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo
            recibido.
        •   $userfile_name - El nombre original del fichero en la máquina cliente.

        •   $userfile_size - El tamaño en bytes del fichero recibido.

        •   $userfile_type - El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser
            "image/gif".
        Se puede ver que "$userfile" (en las variables anteriores) toma el valor del atributo "name" que
        contenga el campo <input> de tipo "file" del formulario de envio. En el ejemplo anterior, elegimos
        llamarlo "userfile".

              Nota: register_globals = On se desaconseja por razones de seguridad y rendimiento.



        Por defecto, los ficheros serán almacenados en el directorio temporal por defecto del servidor a no ser
        que se especifique otra localizacion con la directiva upload_tmp_dir en php.ini. El directorio temporal
        por defecto del servidor puede ser modificado cambiando el valor de la variable de entorno TMPDIR en
        el contexto en que se ejecuta PHP La configuración de las variables de entorno no se puede realizar en
        PHP a través de la función putenv(). Esta variable de entorio puede ser utilizada también para
        asegurarnos que otras operaciones con archivos recibidos están funcionando correctamente.




                                                                                                                 130
Capítulo 19. Manejo de envío de ficheros

     Ejemplo 19-2. Verificando los archivos recibidos

     Los siguientes ejemplos son validos para versiones de PHP 4 superiores a la 4.0.2. Veanse las funciones
     is_uploaded_file() y move_uploaded_file().

     <?php
     // In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.
     if (is_uploaded_file($HTTP_POST_FILES[’userfile’][’tmp_name’])) {
         copy($HTTP_POST_FILES[’userfile’][’tmp_name’], "/place/to/put/uploaded/file");
     } else {
         echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES[’userfile’][’name’];
     }
     /* ...or... */
     move_uploaded_file($HTTP_POST_FILES[’userfile’][’tmp_name’], "/place/to/put/uploaded/file");
     ?>




     El script PHP que recibe el fichero, debe implementar la lógica necesaria para determinar que debe ser
     realizado con el fichero. Se puede utilizar, por ejemplo, la variable
     $HTTP_POST_FILES[’userfile’][’size’] para descartar los ficheros demasiado chicos o
     demasiado grandes; por otro lado, se puede usar la variable
     $HTTP_POST_FILES[’userfile’][’type’] para descartar los que no se ajusten a algun criterio de
     tipo. Cualquiera que sea la logica que utilicemos, se debe borrar o mover el archivo del directorio
     temporal.
     El archivo será borrado del directorio temporal al final de la petición si no se ha movido o renombrado.




Errores comunes
     A MAX_FILE_SIZE no se le puede dar un valor mayor que el valor que se haya especificado en la
     directivaupload_max_filesize. Por defecto se tiene un límite de 2 MegaBytes.
     Si se ha activado el límite de memoria, se deben especificar un valor alto para memory_limit. En
     cualquier caso, se debe asegurar un valor suficientemente grande para memory_limit.
     Si max_execution_time tiene un valor muy pequeño, la ejecución del script puede exceder este valor. De
     esta forma, se debe asegurar un valor suficientemente grande para max_execution_time.
     Si post_max_size< tiene un valor muy pequeño, los ficheros mas grandes a este valor, no podrán ser
     enviados. Por ello, se debe asegurar un valor suficientemente grande para post_max_size.
     No verificar que ficheros se estan manipulando puede tener como consecuencia que los usuarios puedan
     acceder a información sensible en otros directorios.
     Cabe señalar que el httpd de CERN parece cortar todo a partir del primer espacio en blanco en el
     "content-type" de la cabecera mime que obtiene del cliente. Si este es el caso, con el httpd de CERN no
     se soporta la funcionalidad de envío de ficheros.




                                                                                                          131
Capítulo 19. Manejo de envío de ficheros

Envío de multiples ficheros
     Se pueden enviar multiples ficheros usando diferentes nombres (name) para los input.
     Así mismo, es posible enviar varios archivos simultaneamente y tener organizada en arrays la
     información. Para hacer esto, se utiliza la misma sintáxis que cuando tenemos multiples "selects" o
     "checkboxes" en el formulario HTML:

          Nota: El soporte para envío multiple de ficheros fue añadido en la versión 3.0.10.




     Ejemplo 19-3. Envío de multiples ficheros


     <form action="file-upload.php" method="post" enctype="multipart/form-data">
       Send these files:<br>
       <input name="userfile[]" type="file"><br>
       <input name="userfile[]" type="file"><br>
       <input type="submit" value="Send files">
     </form>




     Cuando el formulario del ejemplo es enviado, los arrays $HTTP_POST_FILES[’userfile’],
     $HTTP_POST_FILES[’userfile’][’name’] y $HTTP_POST_FILES[’userfile’][’size’] son
     inicializados. Así mismo pasa con $_FILES en PHP 4.1.0 o superiores y $HTTP_POST_VARS en PHP
     3. Cuando register_globals esta activa, las variables globales para los archivos recibidos también
     son inicializadas. Cada uno de estos arrays tendrá en los índices numericos correspondientes los valores
     para cada fichero recibido.
     Por ejemplo, si tomamos como nombres de archivo enviados /home/test/review.html y
     /home/test/xwp.out. Tendríamos en $HTTP_POST_FILES[’userfile’][’name’][0] el valor de
     review.html, y en $HTTP_POST_FILES[’userfile’][’name’][1] tendríamos xwp.out;
     analogamente, $HTTP_POST_FILES[’userfile’][’size’][0] contendría el tamaño del fichero
     review.html, y asi sucesivamente...

     $HTTP_POST_FILES[’userfile’][’name’][0],
     $HTTP_POST_FILES[’userfile’][’tmp_name’][0],
     $HTTP_POST_FILES[’userfile’][’size’][0] y
     $HTTP_POST_FILES[’userfile’][’type’][0] tambien son asignadas.




                                                                                                           132
Capítulo 19. Manejo de envío de ficheros

Soporte del método PUT
     PHP soporta el metodo HTTP PUT que usan aplicaciones como Netscape Composer y Amaya del W3C.
     Las peticiones PUT son más sencillas que el método POST. Un ejemplo:


     PUT /path/filename.html HTTP/1.1




     Esto normalmente significaría que el cliente remoto quiere salvar el contenido como: /path/filename.html
     en tu árbol web. Lógicamente no una buena idea que la gente pueda escribir en tu árbol web. Para
     manipular esta petición debes decirle al servidor que esta petición sea atendida por un script PHP. En
     Apache, por ejemplo, se utiliza para esto la directiva Script en los alguno de los archivos de
     configuración del servidor. Un sitio típico de uso es dentro del bloque &lt;Directory&gt; o quizás en el
     bloque &lt;Virtualhost&gt;. Una linia así deberia hacer ésta función:

     Script PUT /put.php




     Ésto le dice a Apache que envíe todas peticiones PUT para URIs que contengan esta linia al script
     put.php. Se asume que PHP se encuentra activo y con la extensión .php enlazada a él.
     Dentro del script put.php3 se podría implementar algo así:



     <?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>




     Esto copiaría el archivo a la localización requerida por el cliente remoto. Aqui se pueden ejecutar
     funciones de autentificación de usuario o cualquier otro tipo de chequeo. El archivo se guarda en el
     archivo temporal del sistema servidor de la misma manera que el Método POST. Cuando la petición
     finaliza, el archivo temporal es eliminado. En consequencia el script dede proceder al trato de éste
     inmediatamente, ya sea para copiarlo, renombrarlo, etc. El archivo se encuentra en la variable
     $PHP_PUT_FILENAME, y el destino sugerido por el cliente en la variable $REQUEST_URI (puede
     variar en servidores web que no sean Apache). No es necesario hacer caso al destino sugerido por el
     cliente. Por ejemplo se podrían copiar los archivos enviados a directorios especialmente designados para
     esta tarea.




                                                                                                         133
Capítulo 20. Usando archivos remotos




                                       134
Capítulo 20. Usando archivos remotos

Siempre que el soporte para la "envoltura URL fopen" esté habilitado cuando se configura PHP (lo cual
ocurre a menos que se pasa explícitamente la opción --disable-url-fopen-wrapper a configure
(para versiones hasta la 4.0.3), ó configurar como "off" el parámetro allow_url_fopen en php.ini
(para las nuevas versiones)) se pueden usar URLs HTTP y FTP con la mayoría de las funciones que
toman un archivo como parámetro, incluyendo las sentencias require() e include().


     Nota: La versión actual de PHP para Windows no soporta el acceso remoto a ficheros en las
     siguientes funciones: include(), include_once(), require() y require_once().




Por ejemplo, se puede usar este para abrir un archivo en un servidor web remoto, analizar en la salida la
información que se quiera, y entonces, usar la información en una consulta a base de datos, o
simplemente para sacarlas en un estilo que coincida con el resto de su sitio web.


Ejemplo 20-1. Obtener el título de una página remota


<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
    echo "<p>Unable to open remote file.n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* This only works if the title and its tags are on one line */
    if (eregi ("<title>(.*)</title>", $line, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>




También se puede escribir a archivos en un FTP siempre que se conecte como un usuario con los
correctos derechos de acceso, y el archivo no exista ya.Para conectar como un usuario distinto de
’anonymous’, se necesita especificar el nombre de usuario (y posiblemente contraseña) dentro de la
URL, tales como ’ftp://usuario:clave@ftp.ejemplo.com/camino/a/archivo’. (Se puede usar la misma
clase de sintaxis para acceder a archivos via HTTP cuando se requería una autenticació de same sort of
syntax to access files via HTTP when they require Basic authentication.)




                                                                                                      135
Capítulo 20. Usando archivos remotos

Ejemplo 20-2. Almacenando datos en un servidor remoto


<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Unable to open remote file for writing.n";
    exit;
}
/* Write the data here. */
fputs ($file, $HTTP_SERVER_VARS[’HTTP_USER_AGENT’] . "n");
fclose ($file);
?>




    Nota: Podeis captar la idea en el ejemplo anterior de como escribir en un registro remoto, pero
    como ya hemos comentado antes, solamente se puede escribir a un fichero nuevo usando la
    "envoltura URL fopen" Para registros distribuidos, consultar la función syslog().




                                                                                                      136
Capítulo 21. Manejando conexiones




                                    137
Capítulo 21. Manejando conexiones

      Nota: Todo lo siguiente se aplica a partir de la versión 3.0.7 y posterior.



Internamente en PHP se mantiene el estado de la conexión. Hay 3 posibles estados:



•   0 - NORMAL
•   1 - ABORTED (Abortado)
•   2 - TIMEOUT (Fuera de tiempo)


Cuando un script PHP se está ejecutando se activa el estado NORMAL. Si el cliente remoto se
desconecta, se pasa al estado ABORTED. Esto suele ocurrir cuando el usuario pulsa en el botón STOP
del navegador. Si se alcanza el límite de tiempo impuesto por PHP (ver set_time_limit()), se pasa al
estado TIMEOUT.
Puedes decidir si quieres que la desconexión de un cliente cause que tu script sea abortado. Algunas
veces es cómodo que tus scripts se ejecuten por completo, incluso si no existe ya un navegador remoto
que reciba la salida. El comportamiento por defecto es sin embargo, que tu script se aborte cuando el
cliente remoto se desconecta. Este comportamiento puede ser configurado vía la directiva
ignore_user_abort en el fichero php3.ini, o también con la función ignore_user_abort(). Si no le
espeficicas al PHP que cuando un usuario aborte lo ignore, tu script terminará su ejecución. La única
excepción es si tienes registrada un función de desconexión usando la función
register_shutdown_function(). Con una función de desconexión, cuando un usuario remoto pulsa en el
botón STOP, la próxima vez que tu script intenta mostrar algo, PHP detecta que la conexión ha sido
abortada y se llama a la función de desconexión. Esta función de desconexión también se llama al final
de la ejecución de tu script cuando se ha ejecutado normalmente, de manera que si quieres hacer algo
diferente en caso de que un cliente se haya desconectado, puedes usar la función connection_aborted().
Esta función devuelve TRUE si la conexión fue abortada.
Vuestro script también se puede terminar por un temporizador interno. El timeout por defecto es de 30
segundos. Se puede cambiar usando la directiva max_execution_time en el fichero php.ini o la
correspondiente directiva php_max_execution_time en la configuración del servidor de páginas Apache,
como también con la función set_time_limit(). Cuando el temporizador expira, el script se aborta como
en el caso de la desconexión del cliente, de manera que si se ha definido una función de desconexión,
esta se llamará. Dentro de esta función de desconexión, puedes comprobar si fue el timeout el que causó
que se llamara a la función de desconexión, llamando a la función connection_timeout(). Esta función
devolverá verdadero si el timeout causa que se llame a la función de desconexión.
Hay que destacar que ambos, el estado ABORTED y el TIMEOUT, se pueden activar al mismo tiempo.
Esto es posible si le dices a PHP que ignore las desconexiones intencionadas de los usuarios. PHP aún
notará el hecho de que el usuario puede haberse desconectado, pero el script continuará ejecutándose. Si
se alcanza el tiempo límite de ejecución será abortado y, si se ha definido una función de desconexión,
esta será llamada. En este punto, encontrarás que las funciones connection_timeout() y
connection_aborted() devuelven verdadero. Puedes comprobar ambos estados de una manera simple
usando la función connection_status(). Esta función devuelve un campo de bit de los estados activos.
De este modo, si ambos estados están activos devolvería por ejemplo un valor 3.




                                                                                                      138
Capítulo 22. Conexiones persistentes a bases
de datos




                                               139
Capítulo 22. Conexiones persistentes a bases de datos

Las conexiones persistentes son enlaces SQL que no se cierran cuando termina la ejecución del archivo
de comandos. Cuando se pide una conexión persistente, PHP comprueba si hay ya una conexión
persistente idéntica (que permanecía abierta desde antes) - y si existe, la usa. Si no existe, crea un enlace.
Una conexión ’idéntica’ es una conexión que se abrió hacia el mismo "host", con el mismo nombre de
usuario y la misma contraseña (donde sea aplicable).

     Nota: Existen otras extensiones que proporcionan conexiones persistentes, tal como la extensión
     IMAP



La gente que no está familiarizada con el modo como trabajan y distribuyen la carga los servidores
"web" puede confundir que significa conexiones persistentes. En particular, no te dan la habilidad de
abrir ’sesiones de usuario’ en el mismo enlace SQL, no dan la habilidad de construir una transacción de
forma eficiente, y no hacen un montón de otras cosas. De hecho, para ser extremadamente claros sobre el
tema las conexiones persistentes no te dan ninguna functionalidad que no fuera posible con sus hermanas
no-persistentes.
¿Por qué?
Esto tiene que ver con el modo como funcionan los servidores "web". Hay tres modos en que un servidor
"web" puede utilizar PHP para generar páginas web.
El primer método es usar PHP como una capa CGI. Cuando corre de este modo, se crea y destruye una
instancia del intérprete PHP por cada página solicitada (para una página PHP) a tu servidor. Debido a
que se destruye después de cada petición, cualquier recurso que adquiera (como un enlace a un servidor
de base de datos SQL) se cierra cuando es destruido. En este caso, no se gana nada si se intentan usar
conexiones persistentes, ya que simplemente no persisten.
El segundo, y más popular, método es correr PHP como un módulo en un servidor web multiproceso, lo
cual actualmente sólo incluye Apache. Un servidor multiproceso tiene típicamente un proceso (el padre)
que coordina un conjunto de procesos (sus hijos) que realmente hacen el trabajo se servir las páginas
web. Cuando entra cada petición de un cliente, es entregada a uno de los hijos que no esté ya sirviendo a
otro cliente. Esto significa que cuando el mismo cliente hace una segunda petción al servidor, puede ser
atendido por un proceso hijo distinto del de la primera vez. Lo que una conexión persistente hace por ti
en este caso es hacerlo de tal modo que cada proceso hijo sólo necesita conectar a tu SQL server la
primera vez que sirve una página que hace uso de una conexión así. Cuando otra página solicita una
conexión a SQL server, puede reutilizar la conexión que el hijo estableció previamente.
El último método es usar PHP como un "plug-in" para un servidor web multihilo. En la actualidad es
solamente teórico -- PHP no funciona aún como "plug-in" para ningún servidor web multihilo.
Actualmente PHP 4 soporta ISAPI, WSAPI y NSAPI (en Windows), lo cual permite a PHP ser utilizado
como "plug-in" para servidores web multihilo como Netscape FastTrack, Internet Information Server
(IIS) de Microsoft, y O’Reilly’s WebSite Pro. El comportamiento es exactamente el mismo que para el
modelo de multiprocesador descrito anteriormente. Tener en cuanta que el soporte para SAPI no está
disponible en PHP 3.
Si las conexiones persistentes no aportan ninguna funcionalidad añadida, ¿para qué son buenas?
La respuesta aqui es extremadamente simple -- eficiencia. Las conexiones persistentes son buenas si las
cabeceras de control para crear un enlace a tu servidor SQL es alta. Que estas cabeceras sean o no
realmente altas depende de muchos factores. Como, qué clase de base de datos es, si esta o no situada en
el mismo ordenador que el servidor web, cómo está de cargada la máquina donde se encuentre el




                                                                                                          140
Capítulo 22. Conexiones persistentes a bases de datos

servidor SQL, y otras así. El hecho fundamental es que si la cabecera de conexión es alta, las conexiones
persistentes te ayudan considerablemente . Ellas hacen que el proceso hijo simplemente conecte
solamente una vez durante todo su intervalo de vida, en vez de cada vez que procesa una pagina que
requiere conectar al servidor SQL. Esto significa que por cada hijo que abrió una conexión persistente
tendrá su propia conexión persistente al servidor. Por ejemplo, si tienes 20 procesos hijos distintos que
corran un archivo de comandos que cree una conexión persistente a tu servidor SQL, tendrías 20
conexiones diferentes a ti servidor SQL, una por cada hijo.
No obstante, hay que tener en cuenta que esto puede tener desventajas si estais utilizando una base de
datos con límites de conexión, por debajo del numero de procesos hijo con conexiones persistentes. Si tu
base de datos tiene un límite de 16 conexiones simultaneas y en el curso de una sesión de servidor, 17
procesos hijo intentan conectarse, uno de ellos no podrá hacerlo. Si existen errores en los scripts, que no
permitan terminar la conexion (p.ej.bucles infinitos), una base de datos con solo 32 conexiones puede ser
rápidamente hundida. Comprobar la documentacion de vuestra base de datos para obtener información
sobre que hacer con conexiones abandonadas ó libres.


                                                Aviso
           Un par de advertencias más a tener en cuenta cuando utiliceis conexiones
           persistentes. La primera, si utilizais bloqueos en una tabla desde una conexión
           persistente y por cualquier causa el script no puede desbloquear la tabla, todos
           los scripts posteriores que usen esta conexión, quedarán bloqueados
           indefinídamente y se requerirá que, ó bien el servidor httpd ó la base de datos
           sean arrancados de nuevo. La segunda, cuando utiliceis transacciones, un
           bloqueo por transacción será heredado por el próximo script usando la conexión,
           si la ejecución del primer script termina antes que el bloqueo. en ambos caso
           podeis utilizar register_shutdown_function() para registrar una funcion simple de
           limpieza que desbloquee las tablas ó deshaga la transacción. Lo mejor para evitar
           problemas es no usar conexiones persistentes en scripts que usen bloqueos de
           tablas ó transacciones (para todolo demás pueden ser usadas sin problemas)


Un resumen importante. Las conexiones persistentes fueron diseñadas para tener una equivalencia
uno-a-uno con las conexiones normales. Eso significa que deberíais siempre ser capaz de reemplazar las
conexiones persistentes por conexiones no persistentes y no cambiará, el modo como se comporta el
archivo de comandos. Puede cambiar la eficiencia del archivo de comandos (y probablemete lo hará),
¡pero no su comportamiento!




                                                                                                       141
Capítulo 23. Modo Seguro (Safe Mode)




                                       142
Capítulo 23. Modo Seguro (Safe Mode)

El Modo Seguro de PHP es un intento para resolver el problema de la seguridad en un servidor
compartido. Tratar de resolver este problema al nivel de PHP es arquitectónicamente incorrecto, pero ya
que las alternativas en un servidor web y a niveles de sistemas operativos no son tan realistas, mucha
gente, especialmente la de proveedores de Internet (ISP), usa el Modo Seguro por ahora.


Tabla 23-1. Las directivas de Configuración que controlan el Modo Seguro son:

Directiva                                           Valor por Omisión
safe_mode                                           Off
safe_mode_gid                                       0
safe_mode_include_dir                               ""
safe_mode_exec_dir                                  1
open_basedir                                        ""
safe_mode_allowed_env_vars                          PHP_
safe_mode_protected_env_vars                        LD_LIBRARY_PATH
disable_functions                                   ""



Cuando safe_mode está en On, el PHP verifica si el dueño del script actual coincide con el dueño del
fichero a ser operado por una función de fichero. Por ejemplo:


-rw-rw-r--        1 rasmus       rasmus           33 Jul 1 19:20 script.php
-rw-r--r--        1 root         root           1116 May 26 18:01 /etc/passwd




Corriendo este script.php


<?php
 readfile(’/etc/passwd’);
?>




resulta in este error cuando Modo Seguro está habilitado:


Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2




Sin embargo, pueden haber ambientes donde una estricta verificación del UID no es apropiada, y una
relajada verificación del GID es suficiente. Esto es soportado por medio del switch safe_mode_gid.




                                                                                                      143
Capítulo 23. Modo Seguro (Safe Mode)

     Seteándolo a On hace la verificación relajada GID, seteándolo a Off (el valor por omisión) hace la
     verificación del UID.
     Si en vez del safe_mode, Ud. setea un directorio open_basedir, entonces todas las operaciones de fichero
     estarán limitadas a los ficheros bajo ese directorio especificado. Por ejemplo (ejemplo de httpd.conf de
     Apache):


     <Directory /docroot>
       php_admin_value open_basedir /docroot
     </Directory>




     Si Ud. corre el mismo script.php con este seteo open_basedir, entonces este es el resultado:


     Warning: open_basedir restriction in effect. File is in wrong directory in
     /docroot/script.php on line 2




     Ud. también puede inhabilitar funciones individuales. Note que la directiva disable_functions no puede
     ser usada fuera del fichero php.ini lo que significa que Ud. no puede inhabilitar funciones en los
     principios per-virtualhost o per-directory en su fichero httpd.conf. Si agregamos esto a nuestro fichero
     php.ini:


     disable_functions readfile,system




     Entonces obtenemos esta salida:


     Warning: readfile() has been disabled for security reasons in
     /docroot/script.php on line 2




Funciones restringidas/inhabilitadas por Modo Seguro
     Esta es una lista probablemente incompleta y posiblemente incorrecta de las funciones limitadas por safe
     mode.


     Tabla 23-2. Funciones limitadas por Modo Seguro




                                                                                                         144
Capítulo 23. Modo Seguro (Safe Mode)

Función               Limitaciones
dbmopen()             Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
dbase_open()          Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
filepro()              Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
filepro_rowcount()     Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
filepro_retrieve()     Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
ifx_*()               restricciones sql_safe_mode, (!= safe mode)
ingres_*()            restricciones sql_safe_mode, (!= safe mode)
mysql_*()             restricciones sql_safe_mode, (!= safe mode)
pg_loimport()         Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
posix_mkfifo()         Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si los directorios que vas
                      a utilizar, tienen la misma UID que el script que está
                      siendo ejecutado.
putenv()              Obecede las ini-directivas
                      safe_mode_protected_env_vars y
                      safe_mode_allowed_env_vars. Vea también la
                      documentación de putenv()
move_uploaded_file()   Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si el fichero(s)/directorios
                      que vas a utilizar, tienen la misma UID que el script
                      que está siendo ejecutado.
chdir()               Nota: Cuando safe-mode (modo-seguro) está
                      activado, PHP comprueba si los directorios que vas
                      a utilizar, tienen la misma UID que el script que está
                      siendo ejecutado.




                                                                        145
Capítulo 23. Modo Seguro (Safe Mode)

Función                                              Limitaciones
dl()                                                 Esta función no está activada en safe-mode
                                                     (modo-seguro)
backtick operator                                    Esta función no está activada en safe-mode
                                                     (modo-seguro)
shell_exec() (equivalencia funcional de backticks)   Esta función no está activada en safe-mode
                                                     (modo-seguro)
exec()                                               Ud. puede correr sólo ejecutables dentro
                                                     delsafe_mode_exec_dir. Por razones prácticas, no
                                                     está actualmente permitido tener componentes ..
                                                     en la ruta del fichero ejecutable.
system()                                             Ud. puede correr sólo ejecutatables dentro
                                                     delsafe_mode_exec_dir. Por razones prácticas, no
                                                     está actualmente permitido tener componentes ..
                                                     en la ruta del fichero ejecutable.
passthru()                                           Ud. puede correr sólo ejecutatables dentro
                                                     delsafe_mode_exec_dir. Por razones prácticas, no
                                                     está actualmente permitido tener componentes ..
                                                     en la ruta del fichero ejecutable.
popen()                                              Ud. puede correr sólo ejecutatables dentro
                                                     delsafe_mode_exec_dir. Por razones prácticas, no
                                                     está actualmente permitido tener componentes ..
                                                     en la ruta del fichero ejecutable.
mkdir()                                              Nota: Cuando safe-mode (modo-seguro) está
                                                     activado, PHP comprueba si los directorios que vas
                                                     a utilizar, tienen la misma UID que el script que está
                                                     siendo ejecutado.
rmdir()                                              Nota: Cuando safe-mode (modo-seguro) está
                                                     activado, PHP comprueba si el fichero(s)/directorios
                                                     que vas a utilizar, tienen la misma UID que el script
                                                     que está siendo ejecutado.
rename()                                             Nota: Cuando safe-mode (modo-seguro) está
                                                     activado, PHP comprueba si el fichero(s)/directorios
                                                     que vas a utilizar, tienen la misma UID que el script
                                                     que está siendo ejecutado.
                                                          Nota: Cuando safe-mode (modo-seguro) está
                                                          activado, PHP comprueba si los directorios
                                                          que vas a utilizar, tienen la misma UID que el
                                                          script que está siendo ejecutado.




                                                                                                       146
Capítulo 23. Modo Seguro (Safe Mode)

Función    Limitaciones
unlink()   Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado.
                Nota: Cuando safe-mode (modo-seguro) está
                activado, PHP comprueba si los directorios
                que vas a utilizar, tienen la misma UID que el
                script que está siendo ejecutado.


copy()     Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado.
                Nota: Cuando safe-mode (modo-seguro) está
                activado, PHP comprueba si los directorios
                que vas a utilizar, tienen la misma UID que el
                script que está siendo ejecutado.
                          (en source y target)
chgrp()    Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado.
chown()    Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado.
chmod()    Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado. Además, Ud. no puede
           setear los bits de SUID, SGID y sticky
touch()    Nota: Cuando safe-mode (modo-seguro) está
           activado, PHP comprueba si el fichero(s)/directorios
           que vas a utilizar, tienen la misma UID que el script
           que está siendo ejecutado.
                Nota: Cuando safe-mode (modo-seguro) está
                activado, PHP comprueba si los directorios
                que vas a utilizar, tienen la misma UID que el
                script que está siendo ejecutado.




                                                            147
Capítulo 23. Modo Seguro (Safe Mode)

Función                          Limitaciones
symlink()                        Nota: Cuando safe-mode (modo-seguro) está
                                 activado, PHP comprueba si el fichero(s)/directorios
                                 que vas a utilizar, tienen la misma UID que el script
                                 que está siendo ejecutado.
                                      Nota: Cuando safe-mode (modo-seguro) está
                                      activado, PHP comprueba si los directorios
                                      que vas a utilizar, tienen la misma UID que el
                                      script que está siendo ejecutado.
                                         (Nota: sólo el target es comprobado)
link()                           Nota: Cuando safe-mode (modo-seguro) está
                                 activado, PHP comprueba si el fichero(s)/directorios
                                 que vas a utilizar, tienen la misma UID que el script
                                 que está siendo ejecutado.
                                      Nota: Cuando safe-mode (modo-seguro) está
                                      activado, PHP comprueba si los directorios
                                      que vas a utilizar, tienen la misma UID que el
                                      script que está siendo ejecutado.
                                        (Nota: sólo the target es comprobado)
getallheaders()                  En Modo Seguro, las cabeceras que empiezan con
                                 ’authorization’ (insensitivo al tipo de letra) no serán
                                 retornadas. Advertencia: esto está roto por la
                                 implementación de aol-server de getallheaders()!
header()                         En Modo Seguro, el UID del script está agregado a
                                 la parte realm de la cabecera WWW-Authenticate
                                 si Ud. setea esta cabecera (usado por HTTP
                                 Authentication).
highlight_file(), show_source()   Nota: Cuando safe-mode (modo-seguro) está
                                 activado, PHP comprueba si el fichero(s)/directorios
                                 que vas a utilizar, tienen la misma UID que el script
                                 que está siendo ejecutado.
                                      Nota: Cuando safe-mode (modo-seguro) está
                                      activado, PHP comprueba si los directorios
                                      que vas a utilizar, tienen la misma UID que el
                                      script que está siendo ejecutado.
                                        (Nota: sólo afectado desde PHP 4.2.1)
parse_ini_file()                  Nota: Cuando safe-mode (modo-seguro) está
                                 activado, PHP comprueba si el fichero(s)/directorios
                                 que vas a utilizar, tienen la misma UID que el script
                                 que está siendo ejecutado.
                                      Nota: Cuando safe-mode (modo-seguro) está
                                      activado, PHP comprueba si los directorios
                                      que vas a utilizar, tienen la misma UID que el
                                      script que está siendo ejecutado.
                                        (Nota: sólo afectado desde PHP 4.2.1)
Cualquier función que usa        ??
php4/main/fopen_wrappers.c




                                                                                    148
Capítulo 24. Using PHP from the command line




                                           149
Capítulo 24. Using PHP from the command line

Since version 4.3, PHP supports a new SAPI type (Server Application Programming Interface) named
CLI which means Command Line Interface. As the name implies, this SAPI type main focus is on
developing shell (or desktop as well) applications with PHP. There are quite some differences between
the CLI SAPI and other SAPIs which are further explained throughout this chapter.
The CLI SAPI was released for the first time with PHP 4.2.0, but was still experimental back then and
had to be explicitely enabled with --enable-cli when running ./configure. Since PHP 4.3.0 the
CLI SAPI is no longer experimental and is therefore always built and installed as the php (called
php.exe on Windows) binary.

Remarkable differences of the CLI SAPI compared to other SAPIs:

•   Unlikely the CGI SAPI, no headers are written to the output.
    Though the CGI SAPI provies a way to suppress HTTP headers, there’s not equivalent switch to
    enable them in the CLI SAPI.


•    The are certain php.ini directives which are overriden by the CLI SAPI because the do not make
    sense in shell environments:

Tabla 24-1. Overriden php.ini directives

    Directive                        CLI SAPI default value           Comment
    html_errors                      FALSE                             It can be quite hard to read the
                                                                      error message in your shell when
                                                                      it’s cluttered with all those
                                                                      meaningless HTML tags, therefore
                                                                      this directive defaults to FALSE.
    implicit_flush                    TRUE                              It is desired that any output
                                                                      coming from print(), echo() and
                                                                      friends is immidiately written to
                                                                      the output and not cached in any
                                                                      buffer. You still can use output
                                                                      buffering if you want to defer or
                                                                      manipulate standard output.
    max_execution_time               0 (unlimited)                     Due to endless possibilities of
                                                                      using PHP in shell environments,
                                                                      the maximum execution time has
                                                                      been set to unlimited. Whereas
                                                                      applications written for the web
                                                                      are executed within splits of a
                                                                      seconds, shell application tend to
                                                                      have a much longer execution
                                                                      time.




                                                                                                    150
Capítulo 24. Using PHP from the command line

    Directive                          CLI SAPI default value              Comment
    register_argc_argv                 TRUE                                 The global PHP variables $argc
                                                                           (number of arguments passed to
                                                                           the application) and $argv (array
                                                                           of the actual arguments) are
                                                                           always registered and filled in
                                                                           with the appropriate values when
                                                                           using the CLI SAPI.


         Nota: These directives cannot be initialzied with another value from the configuration file php.ini
         or a custom one (if specified). This is a limitation because those default values are applied after all
         configuration files have been parsed. However, their value can be changed during runtime (which
         does not make sense for all of those directives, e.g. register_argc_argv).




•   To ease working in the shell environment, the following constants are defined:

Tabla 24-2. CLI specific Constants

    Constant                                             Description
    STDIN                                                    An already opened stream to stdin. This saves open-
                                                            ing it with
                                                            $stdin = fopen(’php://stdin’, ’r’);


    STDOUT                                                  An already opened stream to stdout. This saves
                                                            opening it with
                                                            $stdout = fopen(’php://stdout’, ’w’);


    STDERR                                                  An already opened stream to stdout. This saves
                                                            opening it with
                                                            $stderr = fopen(’php://stderr’, ’w’);



    Given the above, you don’t need to open e.g. a stream for stderr yourself but simply use the constant
    instead of the stream resource:
    php -r ’fwrite(STDERR, "stderrn");’


    You do not need to explicitly close these streams, this is automatically done by PHP.


•   The CLI SAPI does not change the current directory to the directory of the executed script !
    Example showing the difference to the CGI SAPI:

    <?php
        /* Our simple test application */




                                                                                                           151
Capítulo 24. Using PHP from the command line

       echo getcwd(), "n";
  ?>




  When using the CGI version, the output is

  $ pwd
  /tmp

  $ php-cgi -f another_directory/test.php
  /tmp/another_directory



  This clearly shows that PHP changes its current directory to the one of the executed script.
  Using the CLI SAPI yields:

  $ pwd
  /tmp

  $ php -f another_directory/test.php
  /tmp



  This allows greater flexibility when writing shell tools in PHP.

       Nota: The CGI SAPI supports the CLI SAPI behaviour by means of the -C switch when ran from
       the command line.




The list of command line options provided by the PHP binary can be queried anytime by running PHP
with the -h switch:


Usage: php [options] [-f] <file> [args...]
       php [options] -r <code> [args...]
       php [options] [-- args...]
  -s               Display colour syntax highlighted source.
  -w               Display source with stripped comments and whitespace.
  -f <file>        Parse <file>.
  -v               Version number
  -c <path>|<file> Look for php.ini file in this directory
  -a               Run interactively
  -d foo[=bar]     Define INI entry foo with value ’bar’
  -e               Generate extended information for debugger/profiler
  -z <file>        Load Zend extension <file>.




                                                                                                    152
Capítulo 24. Using PHP from the command line

  -l                     Syntax check only (lint)
  -m                     Show compiled in modules
  -i                     PHP information
  -r <code>              Run PHP <code> without using script tags <?..?>
  -h                     This help

  args...                Arguments passed to script. Use -- args when first argument
                         starts with - or script is read from stdin




The CLI SAPI has three different ways of getting the PHP code you want to execute:

 1. Telling PHP to execute a certain file.


    php my_script.php

    php -f my_script.php



    Both ways (using the -f switch or not) execute the given file my_script.php. You can choose any
    file to execute, your PHP scripts do not have to end with the .php extension but can give them any
    name or extension you want them to have.


 2. Pass the PHP code to execute directly on the command line.


    php -r ’print_r(get_defined_constants());’



    Special care has to be taken in regards of shell variable substitution and quoting usage.

         Nota: Read the example carefully, thera are no beginning or ending tags! The -r switch simply
         does not need them. Using them will lead to a parser error.




 3. Provide the PHP code to execute via standard input (stdin).
    This gives the powerful ability to dynamically create PHP code and feed it to the binary, as shown in
    this (fictional) example:

    $ some_application | some_filter | php | sort -u >final_output.txt




                                                                                                     153
Capítulo 24. Using PHP from the command line



You cannot combine any of the three ways to execute code.
Like every shell application, the PHP binary accepts a number of arguments but also your PHP script can
receive them. The number of arguments which can be passed to your script is not limited by PHP (the
shell has a certain size limit in numbers of characters which can be passed; usually you won’t hit this
limit). The arguments passed to your script are available in the global array $argv. The zero index
always contains the script name (which is - in case the PHP code is coming from either standard input or
from the command line switch -r). The second registered global variable is $argc which contains the
number of elements in the $argv array (not the number of arguments passed to the script).
As long as the arguments you want to pass to your script do not start with the - character, there’s nothing
special to watch out for. Passing an argument to your script which starts with a - will cause trouble
because PHP itself thinks it has to handle it. To prevent this use the argument list separator --. After the
argument has been parsed by PHP, every argument following it is passed untoched/unparsed to your
script.


# This will not execute the given code but will show the PHP usage
$ php -r ’var_dump($argv);’ -h
Usage: php [options] [-f] <file> [args...]
[...]

# This will pass the ’-h’ argument to your script and prevent PHP from showing it’s usage
$ php -r ’var_dump($argv);’ -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}




However, there’s another way of using PHP for shell scripting. You can write a script where the first line
starts with #!/usr/bin/php and then following the normal PHP code included within the PHP starting
and end tags and set the execution attributes of the file appropriately. This way it can be executed like a
normal shell or perl script:


#!/usr/bin/php
<?php
    var_dump($argv);
?>




Assuming this file is named test in the current directory, we can now do the following:


$ chmod 755 test
$ ./test -h -- foo




                                                                                                        154
Capítulo 24. Using PHP from the command line

array(4) {
  [0]=>
  string(6)     "./test"
  [1]=>
  string(2)     "-h"
  [2]=>
  string(2)     "--"
  [3]=>
  string(3)     "foo"
}




As you see no care has to be taken when passing parameters to your script which start with -.


Tabla 24-3. Command line options

Option                                              Description
-s                                                    Display colour syntax highlighted source.
                                                    This option uses the internal mechanism to parse
                                                    the file and produces a HTML highlighted version of
                                                    it and writes it to standard output. Note that all it
                                                    does it to generate a block of <code> [...]
                                                    </code> HTML tags, no HTML headers.

                                                         Nota: This option does not work together with
                                                         the -r option.


-w                                                   Display source with stripped comments and
                                                    whitespace.
                                                         Nota: This option does not work together with
                                                         the -r option.


-f                                                   Parses and executed the given filename to the -f
                                                    option. This switch is optional and can be left out.
                                                    Only providing the filename to execute is sufficient.

-v                                                   Writes the PHP, PHP SAPI, and Zend version to stan-
                                                    dard output, e.g.

                                                    $ php -v
                                                    PHP 4.3.0-dev (cli), Copyright (c) 1997-
                                                    2002 The PHP Group
                                                    Zend Engine v1.2.1, Copyright (c) 1998-
                                                    2002 Zend Technologies




                                                                                                     155
Capítulo 24. Using PHP from the command line

Option   Description
-c        With this option one can either specify a directory where
         to look for php.ini or you can specify a custom INI
         file directly (which does not need to be named php.ini),
         e.g.:

         $ php -c /custom/directory/ my_script.php

         $ php -c /custom/directory/custom-file.ini my_script




-a        Runs PHP interactively.
-d        This option allows to set a custom value for any of the
         configuration directives allowed in php.ini. The syn-
         tax is:

         -d configuration_directive[=value]




         Examples:

         # Ommiting the value part will set the given con-
         figuration directive to "1"
         $ php -d max_execution_time -r ’$foo = ini_get("max_e
         string(1) "1"

         # Passing an empty value part will set the con-
         figuration directive to ""
         php -d max_execution_time= -r ’$foo = ini_get("max_ex
         string(0) ""

         # The configuration directive will be set to any-
         thing passed after the ’=’ character
         $ php -d max_execution_time=20 -r ’$foo = ini_get("m
         string(2) "20"
         $ php -d max_execution_time=doesntmakesense -
         r ’$foo = ini_get("max_execution_time"); var_dump($fo
         string(15) "doesntmakesense"




-e        Generate extended information for
         debugger/profiler.




                                                          156
Capítulo 24. Using PHP from the command line

Option   Description
-z        Load Zend extension. If only a filename is given,
         PHP tries to load this extension from the current
         default library path on your system (usually
         specified /etc/ld.so.conf on Linux systems).
         Passing a filename with an absolute path
         information will not use the systems library search
         path. A relative filename with a directory
         information will tell PHP only to try to load the
         extension relative to the current directory.
-l        This option provides a convenient way to only
         perform a syntax check on the given PHP code. On
         succes, the text No syntax errors detected
         in <filename> is written to standard output and
         the shell return code is 0. On failure, the text
         Errors parsing <filename> in addition to the
         internal parser error message is written to standard
         output and the shell return code is set to 255.
         This option won’t find fatal errors (like undefined
         functions). Use -f if you would like to test for fatal
         errors too.

              Nota: This option does not work together with
              the -r option.


-m        Using this option, PHP prints out the built in (and loaded)
         PHP and Zend modules:

         $ php -m
         [PHP Modules]
         xml
         tokenizer
         standard
         session
         posix
         pcre
         overload
         mysql
         mbstring
         ctype

         [Zend Modules]




                                                           157
Capítulo 24. Using PHP from the command line

Option   Description
-i        This command line option calls phpinfo(), and
         prints out the results. If PHP is not working well, it
         is advisable to make a php -i and see if any error
         messages are printed out before or in place of the
         information tables. Beware that the output is in
         HTML and therefore quite huge.




                                                            158
Capítulo 24. Using PHP from the command line

Option   Description
-r         This option allows execution of PHP right from
         within the command line. The PHP start and end
         tags (<?php and ?>) are not needed and will cause
         a parser errors.
             Nota: Care has to be taken when using this
             form of PHP to not collide with command line
             variable substitution done by the shell.

             Example showing a parser error

             $ php -r "$foo = get_defined_constants();"
             Command line code(1) : Parse error - parse er-
             ror, unexpected ’=’



                        The problem here is that the sh/bash
             performs variable substritution even when
             using double quotes ". Since the variable $foo
             is unlikely to be defined, it expands to nothing
             which results in being the code passed to PHP
             for executin in fact reads:

             $ php -r " = get_defined_constants();"



                     The correct way would be to use single
             quotes ’. variables in strings quoted with
             single quotes are not expanded by sh/bash.

             $ php -r ’$foo = get_defined_constants(); var_dump($fo
             array(370) {
               ["E_ERROR"]=>
               int(1)
               ["E_WARNING"]=>
               int(2)
               ["E_PARSE"]=>
               int(4)
               ["E_NOTICE"]=>
               int(8)
               ["E_CORE_ERROR"]=>
               [...]



               If you are using a shell different from sh/bash,
             you might experience further issues. Feel free
             to open a bug report or send a mail to
             phpdoc@lists.php.net. One still can easily run
             intro troubles when trying to get shell variables
             into the code or using backslashes for
             escaping. You’ve been warned.




                                                           159
Capítulo 24. Using PHP from the command line

Option                                               Description
-h                                                    With this option, you can get information about the
                                                     actual list of command line options and some one
                                                     line descriptions about what they do.



The PHP executable can be used to run PHP scripts absolutely independent from the web server. If you
are on a Unix system, you should add a special first line to your PHP script, and make it executable, so
the system will know, what program should run the script. On a Windows platform you can associate
php.exe with the double click option of the .php files, or you can make a batch file to run the script
through PHP. The first line added to the script to work on Unix won’t hurt on Windows, so you can write
cross platform programs this way. A simple example of writing a command line PHP program can be
found below.

Ejemplo 24-1. Script intended to be run from command line (script.php)


#!/usr/bin/php
<?php

if ($argc != 2 || in_array($argv[1], array(’--help’, ’-help’, ’-h’, ’-?’))) {
?>

This is a command line PHP script with one option.

     Usage:
     <?php echo $argv[0]; ?> <option>

     <option> can be some word you would like
     to print out. With the --help, -help, -h,
     or -? options, you can get this help.

<?php
} else {
    echo $argv[1];
}
?>




In the script above, we used the special first line to indicate, that this file should be run by PHP. We work
with a CLI version here, so there will be no HTTP header printouts. There are two variables you can use
while writing command line applications with PHP: $argc and $argv. The first is the number of
arguments plus one (the name of the script running). The second is an array containing the arguments,
starting with the script name as number zero ($argv[0]).
In the program above we checked if there are less or more than one arguments. Also if the argument was
--help, -help, -h or -?, we printed out the help message, printing the script name dynamically. If we
received some other argument we echoed that out.




                                                                                                       160
Capítulo 24. Using PHP from the command line

If you would like to run the above script on Unix, you need to make it executable, and simply call it as
script.php echothis or script.php -h. On Windows, you can make a batch file for this task:


Ejemplo 24-2. Batch file to run a command line PHP script (script.bat)

@c:phpphp.exe script.php %1 %2 %3 %4


Assuming, you named the above program as script.php, and you have your php.exe in
c:phpphp.exe this batch file will run it for you with your added options: script.bat echothis
or script.bat -h.
See also the Readline extension documentation for more functions you can use to enhance your
command line applications in PHP.




                                                                                                      161
Parte IV. Referencia de las Funciones

I. Funciones específicas de Apache
    Estas funciones están disponibles solamente si ejecutamos PHP como módulo de Apache.




                                                                                           162
Apache

apache_child_terminate (PHP 4 >= 4.0.5)
         Terminate apache process after this request

   bool apache_child_terminate ( void) linebreak
         apache_child_terminate() will register the Apache process executing the current PHP request for
         termination once execution of PHP code it is completed. It may be used to terminate a process after a
         script with high memory consumption has been run as memory will usually only be freed internally but
         not given back to the operating system.

              Nota: The availability of this feature is controlled by the php.ini directive
              apache.child_terminate, which is set to off by default.

              This feature is also not available on multithreaded versions of apache like the win32 version.



         See also exit().




apache_lookup_uri (PHP 3>= 3.0.4, PHP 4 )
         Efectua una petición parcial a la URI especificada y devuelve toda la información sobre ella.

   class apache_lookup_uri ( string filename) linebreak
         Esta función efectua una llamada parcial a URI. Esta llamada no hace sino obtener toda la información
         importante sobre el recurso pedido y la devuelve en un tipo clase .Las propiedades de esa clase son:
         status
         the_request
         status_line
         method
         content_type
         handler
         uri
         filename
         path_info
         args
         boundary
         no_cache
         no_local_copy
         allowed
         send_bodyct
         bytes_sent
         byterange
         clength
         unparsed_uri
         mtime
         request_time

              Nota: Nota: apache_lookup_uri solo funciona cuando el PHP está instalado como módule del
              Apache.




                                                                                                                 163
Apache




apache_note (PHP 3>= 3.0.2, PHP 4 )
          Recibe y establece los valores de una petición en una tabla de notas del Apache

   string apache_note ( string note_name [, string note_value]) linebreak
          apache_note() es una función específica del Apache que recibe y establece valores de la petición en una
          tabla de notas. Si se llama con un solo parámetro,devuelve el valor de note_name. Si se llama con
          dos parámetros, establece el valor de note_value en note_value y devuelve el valor que había en
          note_name.




apache_setenv (PHP 4 >= 4.2.0)
          Set an Apache subprocess_env variable

   int apache_setenv ( string variable, string value [, bool walk_to_top]) linebreak


                                                                  Aviso
                              Esta función no está documentada actualmente, solamente se encuentra
                              disponible la lista de parametros.




ascii2ebcdic (PHP 3>= 3.0.17)
          Translate string from ASCII to EBCDIC

   int ascii2ebcdic ( string ascii_str) linebreak
          ascii2ebcdic() is an Apache-specific function which is available only on EBCDIC based operating
          systems (OS/390, BS2000). It translates the ASCII encoded string ascii_str to its equivalent
          EBCDIC representation (binary safe), and returns the result.
          See also the reverse function ebcdic2ascii()




                                                                                                            164
Apache

ebcdic2ascii (PHP 3>= 3.0.17)
          Translate string from EBCDIC to ASCII

   int ebcdic2ascii ( string ebcdic_str) linebreak
          ebcdic2ascii() is an Apache-specific function which is available only on EBCDIC based operating
          systems (OS/390, BS2000). It translates the EBCDIC encoded string ebcdic_str to its equivalent
          ASCII representation (binary safe), and returns the result.
          See also the reverse function ascii2ebcdic()




getallheaders (PHP 3, PHP 4 )
          Recibe todas las cabeceras de una petición HTTP

   array getallheaders ( void) linebreak
          Esta función devuelve asociados en un vector todas las cabeceras de la actual petición HTTP.

               Nota: También puedes obtener los valores de las variables de los CGIs mediante variables de
               entorno, que funcionan, esté o no el PHP funcionando como módulo del Apache. Utiliza
               phpinfo()para ver una lista de todas las variables de entorno definidas de esta forma.




          Ejemplo 1. ObtenerTodaslasCabeceras() Ejemplo

          $cabeceras = getallheaders();
          while (list($cabecera, $valor) = each($cabeceras)) {
              echo "$cabecera: $valor<br>n";
          }


          Este ejemplo visualiza todas las cabeceras de la petición actual.


               Nota: ObtenerTodaslasCabeceras() actualmente solo funcionará si el PHP es cargado como
               módulo del Apache .




virtual (PHP 3, PHP 4 )
          Ejecuta una sub-petición al Apache




                                                                                                             165
Apache

int virtual ( string filename) linebreak
       virtual() es una función específica del Apache que es equivalente a <!--#include virtual...--> en
       mod_include. Esto ejecuta una sup-petición al Apache .Esto, es util para incluir CGI-scripts o páginas
       .shtml o cualquier tipo de fichero que puedas procesar mediante el Apache. Los CGI-scripts deberán
       generar cabeceras válidas. Esto, implica como mínimo un include() ó un require(); La función virtual()
       no puede ser usada para incluir un documento que sea por si mismo un documento PHP.




                                                                                                          166
II. Funciones de matrices

Introducción
     Estas funciones permiten trabajar y manipular matrices (arrays) de diferentes maneras. Las matrices se
     utilizan para guardar, manejar y operar grupos de variables.
     Matrices simples y multi-dimensionales están soportadas y pueden ser creadas por el usuario u otras
     funciones. Existen funciones específicas de manejo de bases de datos que actualizan matrices con el
     resultado devuelto por la base de datos, numerosas otras funciones devuelven matrices como resultado.
     Consultar la sección del manual Matrices si quereis una explicación detallada de como las matrices están
     implementadas en PHP.




Requerimientos
     Estas funciones están disponibles como parte del módulo estandar, el cual está siempre disponible.




Instalación
     No se necesita ninguna instalación para usar estas funciones, son parte del núcleo de PHP.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión no define ningún tipo de recurso.




Constantes predefinidas
     CASE_UPPER y CASE_LOWER son usadas con la función array_change_key_case(). Son usadas




                                                                                                          167
Matrices

     respectivamente para cambiar una cadena literal de mayúsculas a minúsculas.




Ver tambien
     Ver tambien is_array(), explode(), implode(), split(), y join().




                                                                                       168
Matrices

array_change_key_case (PHP 4 >= 4.2.0)
          Returns an array with all string keys lowercased or uppercased

   array array_change_key_case ( array input [, int case]) linebreak
          array_change_key_case() changes the keys in the input array to be all lowercase or uppercase. The
          change depends on the last optional case parameter. You can pass two constants there, CASE_UPPER
          and CASE_LOWER. The default is CASE_LOWER. The function will leave number indices as is.

          Ejemplo 1. array_change_key_case() example


          $input_array = array("FirSt" => 1, "SecOnd" => 4);
          print_r(array_change_key_case($input_array, CASE_UPPER));



          The printout of the above program will be:

          Array
          (
              [FIRST] => 1
              [SECOND] => 2
          )




array_chunk (PHP 4 >= 4.2.0)
          Split an array into chunks

   array array_chunk ( array input, int size [, bool preserve_keys]) linebreak
          array_chunk() splits the array into several arrays with size values in them. You may also have an
          array with less values at the end. You get the arrays as members of a multidimensional array indexed
          with numbers starting from zero.
          By setting the optional preserve_keys parameter to TRUE, you can force PHP to preserve the
          original keys from the input array. If you specify FALSE new number indices will be used in each
          resulting array with indices starting from zero. The default is FALSE.

          Ejemplo 1. array_chunk() example


          $input_array = array(’a’, ’b’, ’c’, ’d’, ’e’);
          print_r(array_chunk($input_array, 2));
          print_r(array_chunk($input_array, 2, TRUE));




                                                                                                                 169
Matrices




The printout of the above program will be:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

     [1] => Array
         (
             [0] => c
             [1] => d
         )

     [2] => Array
         (
             [0] => e
         )

)
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

     [1] => Array
         (
             [2] => c
             [3] => d
         )

     [2] => Array
         (
             [4] => e
         )

)




                                                 170
Matrices

array_count_values (PHP 4 )
          Cuenta todos los valores de una matriz

   array array_count_values ( array entrada) linebreak
          array_count_values() devuelve una matriz usando los valores de la matriz entrada como claves y su
          frecuencia de aparición en la entrada como valores.


          Ejemplo 1. Ejemplo de array_count_values()

          $matriz = array(1, "hola", 1, "mundo", "hola");
          array_count_values($matriz); // devuelve array(1=>2, "hola"=>2, "mundo"=>1)



               Nota: Esta función fue añadida en el PHP 4.0.




array_diff (PHP 4 >= 4.0.1)
          Computes the difference of arrays

   array array_diff ( array array1, array array2 [, array ...]) linebreak
          array_diff() returns an array containing all the values of array1 that are not present in any of the other
          arguments. Note that keys are preserved.


          Ejemplo 1. array_diff() example


          $array1 = array ("a" => "green", "red", "blue", "red");
          $array2 = array ("b" => "green", "yellow", "red");
          $result = array_diff ($array1, $array2);




          This makes $result have array ("blue");. Multiple occurrences in $array1 are all treated the same
          way.

               Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2.
               In words: when the string representation is the same.




                                                                                                                171
Matrices



                                                          Aviso
                      This was broken in PHP 4.0.4!


          See also array_intersect().




array_fill (PHP 4 >= 4.2.0)
          Fill an array with values

   array array_fill ( int start_index, int num, mixed value) linebreak
          array_fill() fills an array with num entries of the value of the value parameter, keys starting at the
          start_index parameter.


          Ejemplo 1. array_fill() example


          $a = array_fill(5, 6, ’banana’);



          $a now has the following entries using print_r():

          Array
          (
              [5]     =>   banana
              [6]     =>   banana
              [7]     =>   banana
              [8]     =>   banana
              [9]     =>   banana
              [10]    =>   banana
          )




array_filter (PHP 4 >= 4.0.6)
          Filters elements of an array using a callback function

   array array_filter ( array input [, mixed callback]) linebreak




                                                                                                                 172
Matrices

array_filter() returns an array containing all the elements of input filtered according a callback
function. If the input is an associative array the keys are preserved.


Ejemplo 1. array_filter() example


function odd($var) {
    return ($var % 2 == 1);
}

function even($var) {
    return ($var % 2 == 0);
}

$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array (6, 7, 8, 9, 10, 11, 12);

echo "Odd :n";
print_r(array_filter($array1, "odd"));
echo "Even:n";
print_r(array_filter($array2, "even"));



The printout of the program above will be:

Odd :
Array
(
    [a]   => 1
    [c]   => 3
    [e]   => 5
)
Even:
Array
(
    [0]   =>   6
    [2]   =>   8
    [4]   =>   10
    [6]   =>   12
)




    Nota: En lugar de un nombre de función, se pueden proporcionar una matriz que contenga una
    referencia a un objeto o el nombre de un método.




                                                                                                   173
Matrices

          Users may not change the array itself from the callback function. e.g. Add/delete an element, unset the
          array that array_filter() is applied to. If the array is changed, the behavior of this function is undefined.
          See also array_map() and array_reduce().




array_flip (PHP 4 )
          Intercambia los valores de una matriz

   array array_flip ( array trans) linebreak
          array_flip() devuelve una matriz con los valores intercambiados.


          Ejemplo 1. Ejemplo de array_flip()

          $trans = array_flip ($trans);
          $original = strtr ($str, $trans);



               Nota: Esta función fue añadida en el PHP 4.0.




array_intersect (PHP 4 >= 4.0.1)
          Computes the intersection of arrays

   array array_intersect ( array array1, array array2 [, array ...]) linebreak
          array_intersect() returns an array containing all the values of array1 that are present in all the
          arguments. Note that keys are preserved.


          Ejemplo 1. array_intersect() example


          $array1 = array ("a" => "green", "red", "blue");
          $array2 = array ("b" => "green", "yellow", "red");
          $result = array_intersect ($array1, $array2);



          This makes $result have

          Array
          (




                                                                                                                  174
Matrices

               [a] => green
               [0] => red
         )




              Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2.
              In words: when the string representation is the same.




                                                          Aviso
                     This was broken in PHP 4.0.4!


         See also array_diff().




array_key_exists (PHP 4 >= 4.1.0)
         Checks if the given key or index exists in the array

   bool array_key_exists ( mixed key, array search) linebreak
         array_key_exists() returns TRUE if the given key is set in the array. key can be any value possible for
         an array index.


         Ejemplo 1. array_key_exists() example


         $search_array = array("first" => 1, "second" => 4);
         if (array_key_exists("first", $search_array)) {
             echo "The ’first’ element is in the array";
         }




              Nota: The name of this function is key_exists() in PHP version 4.0.6.



         See also isset().




                                                                                                             175
Matrices

array_keys (PHP 4 )
          Devuelve todas las claves de una matriz

   array array_keys ( array entrada [, mixed val_a_buscar]) linebreak
          array_keys() devuelve las claves, numéricas y de cadena, de la matriz entrada.
          Si se especifica el parámetro opcional val_a_buscar, sólo se devuelven las claves para dicho valor.
          De otro modo, se devuelven todas las claves de la entrada.


          Ejemplo 1. Ejemplo de array_keys()

          $matriz = array(0 => 100, "color" => "rojo");
          array_keys ($matriz);       // devuelve array (0, "color")

          $matriz = array(1, 100, 2, 100);
          array_keys ($matriz, 100); // devuelve array (0, 2)




          Vea también: array_values().

               Nota: Esta función fue añadida en el PHP 4.0.




array_map (PHP 4 >= 4.0.6)
          Applies the callback to the elements of the given arrays

   array array_map ( mixed callback, array arr1 [, array arr2...]) linebreak
          array_map() returns an array containing all the elements of arr1 after applying the callback function
          to each one. The number of parameters that the callback function accepts should match the number of
          arrays passed to the array_map()


          Ejemplo 1. array_map() example


          function cube($n) {
              return $n*$n*$n;
          }

          $a = array(1, 2, 3, 4, 5);
          $b = array_map("cube", $a);
          print_r($b);




                                                                                                             176
Matrices




This makes $b have:

Array
(
    [0]    =>   1
    [1]    =>   8
    [2]    =>   27
    [3]    =>   64
    [4]    =>   125
)




Ejemplo 2. array_map() - using more arrays


function show_Spanish($n, $m) {
    return "The number $n is called $m in Spanish";
}

function map_Spanish($n, $m) {
    return array ($n => $m);
}

$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");

$c = array_map("show_Spanish", $a, $b);
print_r($c);

$d = array_map("map_Spanish", $a , $b);
print_r($d);



This results:

// printout of        $c
Array
(
    [0] => The        number   1   is   called   uno in Spanish
    [1] => The        number   2   is   called   dos in Spanish
    [2] => The        number   3   is   called   tres in Spanish
    [3] => The        number   4   is   called   cuatro in Spanish
    [4] => The        number   5   is   called   cinco in Spanish
)




                                                                         177
Matrices

// printout of $d
Array
(
    [0] => Array
        (
            [1] => uno
        )

     [1] => Array
         (
             [2] => dos
         )

     [2] => Array
         (
             [3] => tres
         )

     [3] => Array
         (
             [4] => cuatro
         )

     [4] => Array
         (
             [5] => cinco
         )

)




Usually when using two or more arrays, they should be of equal length because the callback function is
applied in parallel to the corresponding elements. If the arrays are of unequal length, the shortest one will
be extended with empty elements.
An interesting use of this function is to construct an array of arrays, which can be easily performed by
using NULL as the name of the callback function


Ejemplo 3. Creating an array of arrays


$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");

$d = array_map(null, $a, $b, $c);
print_r($d);




                                                                                                         178
Matrices




The printout of the program above will be:


Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )

     [1] => Array
         (
             [0] => 2
             [1] => two
             [2] => dos
         )

     [2] => Array
         (
             [0] => 3
             [1] => three
             [2] => tres
         )

     [3] => Array
         (
             [0] => 4
             [1] => four
             [2] => cuatro
         )

     [4] => Array
         (
             [0] => 5
             [1] => five
             [2] => cinco
         )

)




See also array_filter() and array_reduce().




                                                 179
Matrices

array_merge_recursive (PHP 4 >= 4.0.1)
         Merge two or more arrays recursively

  array array_merge_recursive ( array array1, array array2 [, array ...]) linebreak
         array_merge_recursive() merges the elements of two or more arrays together so that the values of one
         are appended to the end of the previous one. It returns the resulting array.
         If the input arrays have the same string keys, then the values for these keys are merged together into an
         array, and this is done recursively, so that if one of the values is an array itself, the function will merge it
         with a corresponding entry in another array too. If, however, the arrays have the same numeric key, the
         later value will not overwrite the original value, but will be appended.


         Ejemplo 1. array_merge_recursive() example


         $ar1 = array ("color" => array ("favorite" => "red"), 5);
         $ar2 = array (10, "color" => array ("favorite" => "green", "blue"));
         $result = array_merge_recursive ($ar1, $ar2);



         The $result will be:

         Array
         (
             [color] => Array
                 (
                     [favorite] => Array
                         (
                              [0] => red
                              [1] => green
                         )

                          [0] => blue
                    )

              [0] => 5
              [1] => 10
         )




         See also array_merge().




                                                                                                                     180
Matrices

array_merge (PHP 4 )
         Combina dos o más matrices

  array array_merge ( array matriz1, array matriz2 [, ...]) linebreak
         array_merge() combina los elementos de dos o más matrices conjuntamente de modo que los valores de
         una son agregados al final de los valores de la anterior. Devuelve la matriz resultante.
         Si las matrices de entrada tienen las mismas claves de cadena, el último valor para cada clave
         reemplazará el valor previo de la misma. Si, por el contrario, las matrices tienen la misma clave
         numérica, esto no pasa y los valores son simplemente agregados.


         Ejemplo 1. Ejemplo de array_merge()

         $matriz1 = array ("color" => "rojo", 2, 4);
         $matriz2 = array ("a", "b", "color" => "verde", "forma" => "trapezoide");
         array_merge ($matriz1, $matriz2);


         La matriz resultante sería array("color" => "verde", 2, 4, "a", "b", "forma" => "trapezoide").



               Nota: Esta función fue añadida en el PHP 4.0.




array_multisort (PHP 4 )
         Sort multiple or multi-dimensional arrays

  bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]]) linebreak
         array_multisort() can be used to sort several arrays at once or a multi-dimensional array according by
         one of more dimensions. It maintains key association when sorting.
         The input arrays are treated as columns of a table to be sorted by rows - this resembles the functionality
         of SQL ORDER BY clause. The first array is the primary one to sort by. The rows (values) in that array
         that compare the same are sorted by the next input array, and so on.
         The argument structure of this function is a bit unusual, but flexible. The very first argument has to be an
         array. Subsequently, each argument can be either an array or a sorting flag from the following lists.
         Sorting order flags:

         •   SORT_ASC - sort in ascending order
         •   SORT_DESC - sort in descending order




                                                                                                                 181
Matrices



       Sorting type flags:

       •   SORT_REGULAR - compare items normally
       •   SORT_NUMERIC - compare items numerically
       •   SORT_STRING - compare items as strings


       No two sorting flags of the same type can be specified after each array. The sorting flags specified after
       an array argument apply only to that array - they are reset to default SORT_ASC and SORT_REGULAR
       after before each new array argument.
       Devuelve TRUE si todo fue bien, FALSE en caso de fallo.


       Ejemplo 1. Sorting multiple arrays


       $ar1 = array ("10", 100, 100, "a");
       $ar2 = array (1, 3, "2", 1);
       array_multisort ($ar1, $ar2);




       In this example, after sorting, the first array will contain 10, "a", 100, 100. The second array will contain
       1, 1, "2", 3. The entries in the second array corresponding to the identical entries in the first array (100
       and 100) were sorted as well.


       Ejemplo 2. Sorting multi-dimensional array


       $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
       array_multisort ($ar[0], SORT_ASC, SORT_STRING,
                        $ar[1], SORT_NUMERIC, SORT_DESC);




       In this example, after sorting, the first array will contain 10, 100, 100, "a" (it was sorted as strings in
       ascending order), and the second one will contain 1, 3, "2", 1 (sorted as numbers, in descending order).




array_pad (PHP 4 )
       Rellena una matriz con un valor hasta el tamaño especificado




                                                                                                               182
Matrices

   array array_pad ( array entrada, int tama_relleno, mixed valor_relleno) linebreak
         array_pad() Devuelve una copia de la entrada rellenada hasta el tamaño tama_relleno con el
         valor valor_relleno. Si tama_relleno es positivo, entonces la matriz es rellenada por la
         derecha, y si es negativo, por la izquierda. Si el valor absoluto de tama_relleno es menor o igual que
         el tamaño de la entrada no se produce relleno alguno.


         Ejemplo 1. Ejemplo de array_pad()

         $entrada = array (12, 10, 9);

         $resultado = array_pad ($entrada, 5, 0);
         // el resultado es array (12, 10, 9, 0, 0)

         $resultado = array_pad ($entrada, -7, -1);
         // el resultado es array (-1, -1, -1, -1, 12, 10, 9)

         $resultado = array_pad ($entrada, 2, "no");
         // no rellenado




array_pop (PHP 4 )
         Extrae el último elemento de la matriz

   mixed array_pop ( array matriz) linebreak
         array_pop() extrae y devuelve el último valor de la matriz, acortando la matriz en un elemento.


         Ejemplo 1. Ejemplo de array_pop()

         $pila = array ("naranja", "manzana", "frambuesa");
         $fruta = array_pop ($pila);


         Tras esto, $pila contiene sólo 2 elementos: "naranja" y "manzana", y $fruta contiene "frambuesa".




         Vea también: array_push(), array_shift(), y array_unshift().

              Nota: Esta función fue añadida en el PHP 4.0.




                                                                                                             183
Matrices

array_push (PHP 4 )
          Inserta uno o más elementos al final de la matriz

   int array_push ( array matriz, mixed var [, ...]) linebreak
          array_push() considera a la matriz como una pila, e inserta las variables que se le pasan al final de la
          matriz. La longitud de la matriz se incrementa en el número de variables insertadas. Tiene el mismo
          efecto que ejecutar:

          $matriz[] = $var;


          para cada var.
          Devuelve el nuevo número de elementos de la matriz.


          Ejemplo 1. Ejemplo de array_push()

          $pila = array (1, 2);
          array_push($pila, "+", 3);


          Este ejemplo dejará $pila conteniendo 4 elementos: 1, 2, "+", y 3.
          Vea también: array_pop(), array_shift(), y array_unshift().

               Nota: Esta función fue añadida en el PHP 4.0.




array_rand (PHP 4 )
          Pick one or more random entries out of an array

   mixed array_rand ( array input [, int num_req]) linebreak
          array_rand() is rather useful when you want to pick one or more random entries out of an array. It takes
          an input array and an optional argument num_req which specifies how many entries you want to pick
          - if not specified, it defaults to 1.
          If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns
          an array of keys for the random entries. This is done so that you can pick random keys as well as values
          out of the array.
          Don’t forget to call srand() to seed the random number generator.




                                                                                                               184
Matrices

          Ejemplo 1. array_rand() example


          srand ((float) microtime() * 10000000);
          $input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
          $rand_keys = array_rand ($input, 2);
          print $input[$rand_keys[0]]."n";
          print $input[$rand_keys[1]]."n";




array_reduce (PHP 4 >= 4.0.5)
          Iteratively reduce the array to a single value using a callback function

   mixed array_reduce ( array input, mixed callback [, int initial]) linebreak
          array_reduce() applies iteratively the callback function to the elements of the array input, so as to
          reduce the array to a single value. If the optional initial is available, it will be used at the beginning
          of the process, or as a final result in case the array is empty.


          Ejemplo 1. array_reduce() example


          function rsum($v, $w) {
              $v += $w;
              return $v;
          }

          function rmul($v, $w) {
              $v *= $w;
              return $v;
          }

          $a   =   array(1, 2, 3, 4, 5);
          $x   =   array();
          $b   =   array_reduce($a, "rsum");
          $c   =   array_reduce($a, "rmul", 10);
          $d   =   array_reduce($x, "rsum", 1);




          This will result in $b containing 15, $c containing 1200 (= 1*2*3*4*5*10), and $d containing 1.
          See also array_filter() and array_map().




                                                                                                                185
Matrices

array_reverse (PHP 4 )
         Devuelve una matriz con los elementos en orden inverso

   array array_reverse ( array matriz) linebreak
         array_reverse() toma la matriz de entrada y devuelve una nueva matriz con los elementos en orden
         inverso.


         Ejemplo 1. Ejemplo de array_reverse()

         $entrada = array ("php", 4.0, array ("verde", "rojo"));
         $resultado = array_reverse ($entrada);


         Esto hace que $resultado contenga array (array ("verde", "rojo"), 4.0, "php").


              Nota: Esta función fue añadida en PHP 4.0 Beta 3.




array_search (PHP 4 >= 4.0.5)
         Searches the array for a given value and returns the corresponding key if successful

   mixed array_search ( mixed needle, array haystack [, bool strict]) linebreak
         Searches haystack for needle and returns the key if it is found in the array, FALSE otherwise.

              Nota: Prior to PHP 4.2.0, array_search() returns NULL on failure instead of FALSE.



         If the optional third parameter strict is set to TRUE then the array_search() will also check the types
         of the needle in the haystack.


                                                         Aviso
                     Esta función puede devolver el Boolean FALSE, pero también puede devolver un
                     valor no-Boolean que será evaluado FALSE, como por ejemplo 0 o "". Por favor, lea
                     la sección Booleans para más información. Utilice el operador === para
                     comprobar el valor devuelto por esta función.


         See also array_keys() and in_array().




                                                                                                             186
Matrices

array_shift (PHP 4 )
          Extrae un elemento del comienzo de la matriz

   mixed array_shift ( array matriz) linebreak
          array_shift() extrae el primer valor de la matriz y lo devuele, acortando la matriz en un elemnto y
          moviendo todo hacia arriba.


          Ejemplo 1. Ejemplo de array_shift()

          $args = array ("-v", "-f");
          $opcion = array_shift ($args);


          Esto da como resultado que $args tenga como elemento restante "-f" y que $opcion valga "-v".
          Vea también: array_unshift(), array_push(), y array_pop().

               Nota: Esta función fue añadida en el PHP 4.0.




array_slice (PHP 4 )
          Extrae una porción de la matriz

   array array_slice ( array matriz, int desplazamiento [, int tamano]) linebreak
          array_slice() devuelve una secuencia de elementos de la matriz especificada por los parámetros
          desplazamiento y tamano.
          Si el desplazamiento es positivo, la secuencia comenzará en dicha posición de la matriz. Si el
          desplazamiento es negativo, la secuencia comenzará en esa posición desde el final de la matriz.
          Si se especifica el tamano y éste es positivo, la secuencia contendrá tantos elementos como se diga en
          él. Si fuese negativo, la secuencia se detendrá a tantos elementos del final de la matriz. Si se omite, la
          secuencia contendrá todos los elementos desde el desplazamiento hasta el final de la matriz.


          Ejemplo 1. Ejemplo de array_slice() examples

          $entrada = array ("a", "b", "c", "d", "e");

          $salida    =   array_slice    ($entrada,     2);         //   devuelve     "c", "d", y "e"
          $salida    =   array_slice    ($entrada,     2, -1);     //   devuelve     "c", "d"
          $salida    =   array_slice    ($entrada,     -2, 1);     //   devuelve     "d"
          $salida    =   array_slice    ($entrada,     0, 3);      //   devuelve     "a", "b", y "c"




                                                                                                                 187
Matrices



          Vea también: array_splice().

               Nota: Esta función fue añadida en el PHP 4.0.




array_splice (PHP 4 )
          Suprime una porción de la matriz y la sustituye por otra cosa

   array array_splice ( array entrada, int desplazamiento [, int tamano [, array sustitucion]]) linebreak
          array_splice() suprime los elementos designados por el desplazamiento y el tamano de la matriz
          entrada, y los sustituye con los elementos de la matriz de sustitucion si se especifica.
          Si el desplazamiento es positivo, el comienzo de la parte suprimida sería en esa posición desde el
          comienzo de la matriz de entrada. Si el desplazamiento es negativo, se cuenta la posición desde
          el final de la matriz de entrada.
          Si se omite tamano, se suprime todo desde el desplazamiento hasta el final de la matriz. Si se
          especifica el tamano y es positivo, se suprimirán tantos elementos como se especifica. Si fuera negativo,
          el final de la porción eliminada estará a tantos elementos del final de la matriz. Truco: para eliminar todo
          desde el desplazamiento hasta el final de la matriz cuando también se especifica sustitucion,
          utilice count($entrada) como tamano.
          Si se especifia la matriz de sustitucion, entonces los elementos suprimidos son reemplazados con
          los elementos de dicha matriz. Si los valores de desplazamiento y tamano son tales que nada es
          borrado, los elementos de la matriz sustitucion se insertarán en la posición indicada por el
          desplazamiento. Truco: si sólo se va a sustituir algo por un elemento nada más, no hace falta poner
          array() alrededor del mismo, salvo que dicho elemento sea una matriz en sí mismo.
          Las siguientes funciones son equivalentes:

          array_push($entrada, $x, $y)     array_splice($entrada, count($entrada), 0, ar-
          ray($x, $y))
          array_pop($entrada)              array_splice($entrada, -1)
          array_shift($entrada)            array_splice($entrada, 0, 1)
          array_unshift($entrada, $x, $y) array_splice($entrada, 0, 0, array($x, $y))
          $a[$x] = $y                    array_splice($entrada, $x, 1, $y)




          Devuelve una matriz que tiene los elementos eliminados




                                                                                                                 188
Matrices

         Ejemplo 1. Ejemplos de array_splice()

         $entrada = array("rojo", "verde", "azul", "amarillo");

         array_splice($entrada, 2);      // $entrada vale ahora array("rojo", "verde")
         array_splice($entrada, 1, -1); // $entrada vale ahora array("rojo", "amarillo")
         array_splice($entrada, 1, count($entrada), "naranja");
                                       // $entrada vale ahora array("rojo", "naranja")
         array_splice($entrada, -1, 1, array("negro", "marrón"));
                                       // $entrada vale ahora array("rojo", "verde",
                                       //          "azul", "negro", "marrón")




         Vea también: array_slice().

              Nota: Esta función fue añadida en el PHP 4.0.




array_sum (PHP 4 >= 4.0.4)
         Calculate the sum of values in an array.

   mixed array_sum ( array array) linebreak
         array_sum() returns the sum of values in an array as an integer or float.


         Ejemplo 1. array_sum() examples


         $a = array(2, 4, 6, 8);
         echo "sum(a) = ".array_sum($a)."n";

         $b = array("a"=>1.2,"b"=>2.3,"c"=>3.4);
         echo "sum(b) = ".array_sum($b)."n";



         The printout of the program above will be:

         sum(a) = 20
         sum(b) = 6.9




                                                                                        189
Matrices

              Nota: PHP versions prior to 4.0.6 modified the passed array itself and converted strings to numbers
              (which most of the time converted them to zero, depending on their value).




array_unique (PHP 4 >= 4.0.1)
         Removes duplicate values from an array

   array array_unique ( array array) linebreak
         array_unique() takes input array and returns a new array without duplicate values.
         Note that keys are preserved. array_unique() sorts the values treated as string at first, then will keep the
         first key encountered for every value, and ignore all following keys. It does not mean that the key of the
         first related value from the unsorted array will be kept.

              Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2.
              In words: when the string representation is the same.
              The first element will be used.




                                                          Aviso
                     This was broken in PHP 4.0.4!




         Ejemplo 1. array_unique() example


         $input = array ("a" => "green", "red", "b" => "green", "blue", "red");
         $result = array_unique ($input);
         print_r($result);



         This will output:

         Array
         (
             [b] => green
             [1] => blue
             [2] => red
         )




                                                                                                                190
Matrices




          Ejemplo 2. array_unique() and types


          $input = array (4,"4","3",4,3,"3");
          $result = array_unique ($input);
          var_dump($result);



          The printout of the program above will be (PHP 4.0.6):

          array(2) {
            [3]=>
            int(4)
            [4]=>
            int(3)
          }




array_unshift (PHP 4 )
          Introduce uno o más elementos al principio de la matriz

   int array_unshift ( array matriz, mixed var [, ...]) linebreak
          array_unshift() añade los elementos que se le pasan al principio de la matriz. Nótese que la lista de
          elementos es añadida como un todo, de modo que los elementos añadidos mantienen su orden.
          Devuelve el número de elementos en la matriz.


          Ejemplo 1. Ejemplo de array_unshift()

          $cola = array("p1", "p3");
          array_unshift($cola, "p4", "p5", "p6");


          Esto hará que $cola contenga 5 elementos: "p4", "p5", "p6", "p1", y "p3".
          Vea también: array_shift(), array_push(), y array_pop().

               Nota: Esta función fue añadida en el PHP 4.0.




                                                                                                             191
Matrices




array_values (PHP 4 )
          Devuelve todos los valores de una matriz

   array array_values ( array entrada) linebreak
          array_values() devuelve todos los valores de la matriz entrada.


          Ejemplo 1. Ejemplo de array_values()

          $matriz = array("talla" => "XL", "color" => "dorado");
          array_values($matriz);    // devuelve array("XL", "dorado")



               Nota: Esta función fue añadida en el PHP 4.0.




array_walk (PHP 3>= 3.0.3, PHP 4 )
          Aplica una función del usuario a cada elemento de una matriz.

   int array_walk ( array matriz, string func, mixed datosvarios) linebreak
          Aplica la función llamada func a cada elemento de la matriz. La función func recibirá el valor de la
          matriz como primer parámetro y la clave como segundo. Si se proporciona el parámetro datosvarios
          será pasado como tercer parámetro a la función de usuario.
          Si func necesita más de dos o 3 argumentos, dependiendo de datosvarios, se generará un aviso
          cada vez que array_walk() llama a func. Estos avisos pueden suprimirse si se pone ’@’ antes de la
          llamada a array_walk(), o usando la función error_reporting().

               Nota: Si func precisa trabajar con los valores reales de la matriz, especifique que el valor del
               primer parámetro de func debe pasarse por referencia. Desde ese instante, los cambios realizados
               sobre dichos elementos también serán realizados en la propia matriz.




               Nota: El pasar la clave y los datos de usuario a func fue una característica añadida en PHP 4.0.
               En PHP 4 se debe llamar reset() las veces necesarias, pues array_walk() no reajusta la matriz por
               defecto.




                                                                                                              192
Matrices

          Ejemplo 1. Ejemplo de array_walk()

          $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");

          function test_alterar (&$item1, $clave, $prefix) {
             $item1 = "$prefix: $item1";
          }

          function test_ver ($item2, $clave) {
             echo "$clave. $item2<br>n";
          }

          array_walk ($frutas, ’test_ver’);
          reset ($frutas);
          array_walk ($frutas, ’test_alterar’, ’fruta’);
          reset ($frutas);
          array_walk ($frutas, ’test_ver’);




          Vea también: each() y list().




array (unknown)
          Crear una matriz

   array array ( mixed ...) linebreak
          Devuelve una matriz con los parámetros que se le pasan. A dichos parámetros se les puede dar un índice
          usando el operador =>.

               Nota: array() es una construcción del lenguaje que se utiliza para representar matrices literales, no
               una función regular.




          El siguiente ejemplo demuestra cómo crear una matriz bidimensional, cómo especificar claves para
          matrices asociativas, y cómo especificar índices no consecutivos en matrices normales.

          Ejemplo 1. Ejemplo de array()

          $frutas = array (
              "frutas" => array("a"=>"naranja", "b"=>"plátano", "c"=>"manzana"),
              "números" => array(1, 2, 3, 4, 5, 6),
              "hoyos"   => array("primero", 5 => "segundo", "tercero")
          );




                                                                                                                 193
Matrices

          Vea también: list().




arsort (PHP 3, PHP 4 )
          Ordena una matriz en orden inverso y mantiene la asociación de índices

   void arsort ( array matriz) linebreak
          Esta función ordena una matriz de modo que los índices mantengan su correlación con los elementos de
          la misma a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en
          las que el orden de los elementos es importante.

          Ejemplo 1. Ejemplo de arsort()

          $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");
          arsort ($frutas);
          for (reset ($frutas); $clave = key ($frutas); next ($frutas)) {
              echo "frutas[$clave] = ".$frutas[$clave]."n";
          }


          Este ejemplo mostraría: frutas[b] = plátano frutas[a] = naranja frutas[c] =
          manzana frutas[d] = limón Las frutas han sido ordenadas en orden alfabético inverso y los
          índices asociados con cada elemento se han mantenido.
          Vea también: asort(), rsort(), ksort(), y sort().




asort (PHP 3, PHP 4 )
          Ordena una matriz y mantiene la asociación de índices

   void asort ( array matriz) linebreak
          Esta función ordena una matriz de modo que los índices mantengan su correlación con los elementos de
          la misma a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en
          las que el orden de los elementos es importante.

          Ejemplo 1. Ejemplo de asort()

          $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");
          asort ($frutas);
          for (reset ($frutas); $clave = key ($frutas); next ($frutas)) {
              echo "frutas[$clave] = ".$frutas[$clave]."n";
          }




                                                                                                              194
Matrices

          Este ejemplo mostrará: frutas[d] = limón frutas[a] = naranja frutas[c] = manzana
          frutas[d] = plátano Las frutas han sido ordenadas en orden alfabético y los índices asociados con
          cada elemento se han mantenido.
          Vea también: arsort(), rsort(), ksort(), y sort().




compact (PHP 4 )
          Crea una matriz que contiene variables y sus valores

   array compact ( string nombrevar | array nombrevars [, ...]) linebreak
          compact() toma un número variable de parámetros. Cada uno puede ser tanto una cadena que contiene el
          nombre de la variable, como una matriz de nombres de variable. La matriz puede contener otras matrices
          de nombres de variable en su interior; compact() los procesa recursivamente.
          Para cada uno de estos, compact() busca una variable con dicho nombre en la tabla de símbolos y la
          añade a la matriz de salida de modo que el nombre de la variable es la clave y el contenido de ésta es el
          valor para dicha clave. Para resumir, hace lo contrario de extract(). Devuelve la matriz de salida con las
          variables añadidas a la misma.


          Ejemplo 1. Ejemplo de compact()

          $ciudad = "San Francisco";
          $estado = "CA";
          $evento = "SIGGRAPH";

          $location_vars = array ("ciudad", "estado");

          $resultado = compact ("evento", $location_vars);


          Tras esto, $resultado valdrá array ("evento" => "SIGGRAPH", "ciudad" => "San Francisco", "estado" =>
          "CA").




          Vea también: extract().

               Nota: Esta función fue añadida en el PHP 4.0.




                                                                                                                  195
Matrices

count (PHP 3, PHP 4 )
          Cuenta los elementos de una variable

   int count ( mixed var) linebreak
          Devuelve el número de elementos en var, que típicamente es una matriz (porque cualquier otra cosa
          tendría sólo un elemento).
          Devuele 1 si la variable no es una matriz.
          Devuelve 0 si la variable no tiene valor.


                                                                 Aviso
                             count() puede devolver 0 para una variable sin valor, pero también puede devolver
                             0 para una variable ya inicializada pero con una matriz vacía. Utilice isset() para
                             comprobar si una variable está inicializada.




          Vea también: sizeof(), isset(), y is_array().




current (PHP 3, PHP 4 )
          Devuelve el elemento actual de una matriz

   mixed current ( array matriz) linebreak
          Cada matriz tiene un puntero interno al elemento "actual", que se inicializa al primer elemento insertado
          en la misma.
          La función current() simplemente devuelve el elemento de la tabla al que apunta el puntero interno. No
          mueve el puntero de ninguna manera. Si el puntero interno apunta fuera del final de la lista de elementos,
          current() devuelve FALSE.


                                                                 Aviso
                             Si la matriz contiene elementos vacíos (0 ó "", la cadena vacía) esta función
                             devolverá FALSE también para dichos elementos. Esto hace imposible determinar
                             si se está realmente al final de la lista en tales matrices usando current(). Para
                             recorrer adecuadamente una matriz que pueda contener elementos vacíos, utilice
                             la función each().




          Vea también: end(), next(), prev() y reset().




                                                                                                                   196
Matrices

each (PHP 3, PHP 4 )
          Devuelve el siguiente par clave/valor de una matriz

   array each ( array matriz) linebreak
          Devuelve el par clave/valor actual para la matriz y avanza el cursor de la misma. Esta pareja se
          devuele en una matriz de 4 elementos, con las claves 0, 1, key, y value. Los elementos 0 y key contienen
          el nombre de clave del elemento de la matriz, y 1 y value contienen los datos.
          Si el puntero interno para la matriz apunta pasado el final del contenido de la matriz, each() devuelve
          FALSE.


          Ejemplo 1. Ejemplos de each()

          $chorrada = array ("bob", "fred", "jussi", "jouni", "egon", "marliese");
          $tonteria = each ($chorrada);


          $tonteria contiene ahora los siguientes pares clave/valor:
          • 0 => 0
          • 1 => ’bob’
          • key => 0
          • value => ’bob’

          $chorrada = array ("Robert" => "Bob", "Seppo" => "Sepi");
          $tonteria = each ($chorrada);


          $tonteria contiene ahora los siguientes pares clave/valor:


          • 0 => ’Robert’
          • 1 => ’Bob’
          • key => ’Robert’
          • value => ’Bob’




          each() se usa normalmente de forma conjunta a list() para recorrer una matriz; por ejemplo,
          $HTTP_POST_VARS:

          Ejemplo 2. Recorriendo $HTTP_POST_VARS con each()

          echo "Valores enviados con el método POST:<br>";
          reset ($HTTP_POST_VARS);
          while (list ($clave, $val) = each ($HTTP_POST_VARS)) {
              echo "$clave => $val<br>";
          }




                                                                                                                   197
Matrices



           Cuando se ha ejecutado each(), el cursor de la matriz quedará en el siguiente elemento de la misma, o en
           el último si llega al final de ésta.
           Vea también: key(), list(), current(), reset(), next(), y prev().




end (PHP 3, PHP 4 )
           Mueve el puntero interno de una tabla al último elemento

    end ( array matriz) linebreak
           end() avanza el puntero interno de la matriz al último elemento.
           Vea también: current(), each(), end(), next(), y reset().




extract (PHP 3>= 3.0.7, PHP 4 )
           Importa variables a la tabla de símbolos desde una matriz

    void extract ( array matriz_vars [, int tipo_extraccion [, string prefijo]]) linebreak
           Esta función se utiliza para importar variables desde una matriz a la tabla de símbolos actual. Toma la
           matriz asoiativa matriz_vars y trata las claves como nombres de variable y los valores como los
           valores de éstas. Para cada par clave/valor creará una variable en la tabla de símbolos actual, sujeto a los
           parámetros tipo_extraccion y prefijo.
           extract() controla las colisiones con las variables que ya existen. La forma de tratar éstas se determina
           por el tipo_extraccion. Puede tener únicamente uno de los siguientes valores:

EXTR_OVERWRITE
                 Si hay colisión, sobreescribe la variable existente.

EXTR_SKIP
                 Si hay colisión, no sobreescribas la variable existente.

EXTR_PREFIX_SAME
                Si hay una colisión, añade el prefijo a la nueva variable.

EXTR_PREFIX_ALL
                 Añade el prefijo a todas las variables.


           Si no se especifica tipo_extraccion, se asume que vale EXTR_OVERWRITE.




                                                                                                                    198
Matrices

       Nótese que el prefijo sólo se necisita si tipo_extraccion vale EXTR_PREFIX_SAME o
       EXTR_PREFIX_ALL.
       extract() comprueba si cada clave es un nombre válido de variable, y sólo lo importa si lo es.

            Nota: N.T.: En el caso español, no valdría "año" como nombre variable (pero sí como clave en una
            matriz cualquiera).



       Un uso posible para extract sería importar en la tabla de símbolos las variables contenidas en la matriz
       asociativa que devuelve wddx_deserialize().


       Ejemplo 1. Ejemplo de extract()

       <php?

       /* Suponemos que $matriz_var es una matriz devuelta por
          wddx_deserialize */

       $tamano = "grande";
       $matriz_var = array ("color" => "azul",
                           "tamano" => "media",
                           "forma" => "esfera");
       extract ($matriz_var, EXTR_PREFIX_SAME, "wddx");

       print "$color, $tamano, $forma, $wddx_tamanon";

       ?>




       El programa anterior producirá:

       azul, grande, esfera, media




       La variable $tamano no fue sobreescrita porque especificamos EXTR_PREFIX_SAME, que provocó la
       creación de $wddx_tamano. Si se hubiera especificado EXTR_SKIP, $wddx_tamano ni siquiera habría
       sido creada. EXTR_OVERWRITE habría provocado que $tamano tuviera el valor "media", y
       EXTR_PREFIX_ALL habría provocado que aparecieran nuevas variables llamadas $wddx_color,
       $wddx_tamano, y $wddx_forma.




in_array (PHP 4 )
       Devuelve TRUE si un valor está en una matriz




                                                                                                              199
Matrices

    bool in_array ( mixed aguja, array pajar) linebreak
           Busca la aguja en el pajar, y devuelve TRUE si se encuentra y FALSE en caso contrario.


           Ejemplo 1. Ejemplo de in_array()

           $os = array ("Mac", "NT", "Irix", "Linux");
           if (in_array ("Irix", $os))
               print "Encontrado Irix";



                Nota: Esta función fue añadida en el PHP 4.0.




key (PHP 3, PHP 4 )
           Obtiene una clave de una matriz asociativa

    mixed key ( array matriz) linebreak
           key() devuelve el elemento índice de la posición actual en la matriz.
           Vea también: current(), next()




krsort (PHP 3>= 3.0.13, PHP 4 )
           Ordena una matriz por clave en orden inverso

    int krsort ( array matriz) linebreak
           Ordena una matriz por clave en orden inverso, manteniendo las correlaciones clave a dato. Esto es útil
           principalmente en matrices asociativas.

           Ejemplo 1. Ejemplo de krsort()

           $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");
           krsort ($frutas);
           for (reset ($frutas); $clave = key ($frutas); next ($frutas)) {
               echo "frutas[$clave] = ".$frutas[$clave]."n";
           }


           Este ejemplo mostrará: frutas[d] = limón frutas[c] = manzana frutas[b] = plátano
           frutas[a] = naranja




                                                                                                                200
Matrices

           Vea también: asort(), arsort(), ksort() sort(), y rsort().




ksort (PHP 3, PHP 4 )
           Ordena una matriz por clave

    int ksort ( array matriz) linebreak
           Ordena una matriz por clave, manteniendo las correlaciones clave a dato. Esto es útil principalmente en
           matrices asociativas.

           Ejemplo 1. Ejemplo de ksort()

           $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana");
           ksort ($frutas);
           for (reset ($frutas); $clave = key ($frutas); next ($frutas)) {
               echo "frutas[$clave] = ".$frutas[$clave]."n";
           }


           Este ejemplo mostrará: frutas[a] = naranja frutas[b] = plátano frutas[c] = manzana
           frutas[d] = limón

           Vea también: asort(), arsort(), sort(), y rsort().




list (unknown)
           Asigna variables como si fueran una matriz

    void list ( mixed ...) linebreak
           Como array(), esta no es realmente una función, sino una construcción del lenguaje. list() se usa para
           asignar una lista de variables en una sola operación.

           Ejemplo 1. Ejemplo de list()

           <table>
            <tr>
             <th>Nombre empleado</th>
             <th>Sueldo</th>
            </tr>

           <?php

           $resultado = mysql($conn, "SELECT id, nombre, salario FROM empleados");
           while (list($id, $nombre, $salario) = mysql_fetch_row($resultado)) {
               print(" <tr>n".
                     " <td><a href="info.php3?id=$id">$nombre</a></td>n".




                                                                                                                    201
Matrices

                        " <td>$salario</td>n".
                        " </tr>n");
          }

          ?>

          </table>




          Vea también: each(), array().




natcasesort (PHP 4 )
          Sort an array using a case insensitive "natural order" algorithm

   void natcasesort ( array array) linebreak
          This function implements a sort algorithm that orders alphanumeric strings in the way a human being
          would. This is described as a "natural ordering".
          natcasesort() is a case insensitive version of natsort(). See natsort() for an example of the difference
          between this algorithm and the regular computer string sorting algorithms.
          For more information see: Martin Pool’s Natural Order String Comparison (http://naturalordersort.org/)
          page.
          See also sort(), natsort(), strnatcmp(), and strnatcasecmp().




natsort (PHP 4 )
          Sort an array using a "natural order" algorithm

   void natsort ( array array) linebreak
          This function implements a sort algorithm that orders alphanumeric strings in the way a human being
          would. This is described as a "natural ordering". An example of the difference between this algorithm
          and the regular computer string sorting algorithms (used in sort()) can be seen below:


          Ejemplo 1. natsort() example


          $array1 = $array2 = array ("img12.png", "img10.png", "img2.png", "img1.png");

          sort($array1);
          echo "Standard sortingn";
          print_r($array1);




                                                                                                                     202
Matrices

         natsort($array2);
         echo "nNatural order sortingn";
         print_r($array2);




         The code above will generate the following output:


         Standard sorting
         Array
         (
             [0] => img1.png
             [1] => img10.png
             [2] => img12.png
             [3] => img2.png
         )

         Natural    order sorting
         Array
         (
             [3]    =>   img1.png
             [2]    =>   img2.png
             [1]    =>   img10.png
             [0]    =>   img12.png
         )




         For more information see: Martin Pool’s Natural Order String Comparison (http://naturalordersort.org/)
         page.
         See also natcasesort(), strnatcmp(), and strnatcasecmp().




next (PHP 3, PHP 4 )
         Avanza el puntero interno de una matriz

   mixed next ( array matriz) linebreak
         Devuelve el elemento de la matriz que ocupa el lugar siguiente al apuntado por el puntero interno, o
         FALSE si no hay más elementos.
         next() se comporta como current(), con una diferencia. Avanza el puntero interno de la matriz en una
         posición antes de devolver el elemento. Eso significa que devuelve el siguiente elemento de la matriz y
         que avanza el puntero interno en uno. Si al avanzar se pasa del final de la lista de elementos, next()
         devuelve FALSE.




                                                                                                                203
Matrices


                                                               Aviso
                            Si la matriz contiene elementos vacíos, esta función también devolverá FALSE
                            para dichos elementos. Para recorrer adecuadamente una matriz que pueda
                            contener elementos vacíos, vea la función each().




         Vea también: current(), end() prev() y reset()




pos (PHP 3, PHP 4 )
         Obtiene el elemento actual de una matriz

   mixed pos ( array matriz) linebreak
         Este es un alias para current().
         Vea también: end(), next(), prev() y reset().




prev (PHP 3, PHP 4 )
         Rebobina el puntero interno de una matriz

   mixed prev ( array matriz) linebreak
         Devuelve el elemento de la matriz que está en la posición anterior a la que apuntaba previamente el
         puntero interno, o FALSE si no hay más elementos.


                                                               Aviso
                            Si la matriz contiene elementos vacíos, esta función también devolverá FALSE
                            para dichos elementos. Para recorrer adecuadamente una matriz que puede
                            contener elementos vacíos, vea la función each().




         prev() se comporta igual que next(), excepto que rebobina el puntero interno una posición en lugar de
         avanzarlo.
         Vea también: current(), end() next() y reset()




rango (unknown)
         Crea una matriz que contiene un rango de enteros




                                                                                                               204
Matrices

    array rango ( int bajo, int alto) linebreak
           rango() devuelve una matriz de enteros desde bajo hasta alto, ambos inclusive.
           Vea un ejemplo de su uso en la función shuffle().




reset (PHP 3, PHP 4 )
           Fija el puntero interno de una matriz a su primer elemento

    mixed reset ( array matriz) linebreak
           reset() rebobina el puntero interno de la matriz a su primer elemento.
           reset() devuelve el valor del primer elemento de la matriz.
           Vea también: current(), each(), next(), prev(), y reset().




rsort (PHP 3, PHP 4 )
           Ordena una matriz en orden inverso

    void rsort ( array matriz) linebreak
           Esta función ordena una matriz en orden inverso (mayor a menor).

           Ejemplo 1. Ejemplo de rsort()

           $frutas = array ("limón", "naranja", "plátano", "manzana");
           rsort ($frutas);
           for (reset ($frutas); list ($clave, $valor) = each ($frutas); ) {
               echo "frutas[$clave] = ", $valor, "n";
           }


           Este ejemplo mostrará: frutas[0] = plátano frutas[1] = naranja frutas[2] = manzana
           frutas[3] = limón Las frutas han sido ordenadas en orden alfabético inverso.

           Vea también: arsort(), asort(), ksort(), sort(), y usort().




shuffle (PHP 3>= 3.0.8, PHP 4 )
           Mezcla una matriz

    void shuffle ( array matriz) linebreak
           Esta función mezcla (cambia aleatoriamente el orden de los elementos de) una matriz.




                                                                                                      205
Matrices

           Ejemplo 1. Ejemplo de shuffle()

           $numeros = range (1,20);
           srand (time());
           shuffle ($numeros);
           while (list(, $numero) = each ($numeros)) {
               echo "$numero ";
           }




           Vea también: arsort(), asort(), ksort(), rsort(), sort() y usort().




sizeof (PHP 3, PHP 4 )
           Obtiene el número de elementos de una matriz

    int sizeof ( array matriz) linebreak
           Devueve el número de elementos de la matriz.
           Vea también: count()




sort (PHP 3, PHP 4 )
           Ordena una matriz

    void sort ( array matriz) linebreak
           Esta función ordena una matriz. Los elementos estarán ordenados de menor a mayor cuando la función
           termine.

           Ejemplo 1. Ejemplo de sort()

           $frutas = array ("limón", "naranja", "plátano", "manzana");
           sort ($frutas);
           for (reset ($frutas); $clave = key ($frutas); next ($frutas)) {
               echo "frutas[$clave] = ".$frutas[$clave]."n";
           }


           Este ejemplo mostrará: frutas[0] = limón frutas[1] = manzana frutas[2] = naranja
           frutas[3] = plátano Las frutas han sido ordenadas en orden alfabético.

           Vea también: arsort(), asort(), ksort(), rsort(), y usort().




                                                                                                           206
Matrices

uasort (PHP 3>= 3.0.4, PHP 4 )
          Ordena una matriz mediante una función de comparación definida por el usuario y mantiene la
          asociación de índices

    void uasort ( array matriz, function func_comparar) linebreak
          Esta función ordena una matriz de modo que los índices de la misma mantengan su correlación con los
          elementos a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en
          las que el orden de los elementos es importante. La función de comparación viene definida por el usuario.




uksort (PHP 3>= 3.0.4, PHP 4 )
          Ordena una matriz por claves mediante una función definida por el usuario

    void uksort ( array matriz, function func_comparar) linebreak
          Esta función ordenará las claves de una matriz utilizando una función de comparación suministrada por
          el usuario. Si la matriz a ordenar necesita utilizar un criterio poco trivial, esta es la función que deberá
          usar.

          Ejemplo 1. Ejemplo de uksort()

          function micomparar ($a, $b) {
              if ($a == $b) return 0;
              return ($a > $b) ? -1 : 1;
          }
          $a = array (4 => "cuatro", 3 => "tres", 20 => "veinte", 10 => "diez");
          uksort ($a, micomparar);
          while (list ($clave, $valor) = each ($a)) {
              echo "$clave: $valorn";
          }


          Este ejemplo mostrará: 20: veinte 10: diez 4: cuatro 3: tres
          Vea también: arsort(), asort(), uasort(), ksort(), rsort(), y sort().




usort (PHP 3>= 3.0.3, PHP 4 )
          Ordena una matriz por valores mediante una funcion definida por el usuario

    void usort ( array matriz, function func_comparar) linebreak
          Esta función ordenará una matriz por sus valores utilizando una función suministrada por el usuario. Si la
          matriz que desea ordenar necesita utilizar un criterio poco trivial, esta es la función que deberá usar.




                                                                                                                   207
Matrices

La función de comparación deberá devolver un entero menor, igual, o mayor que cero, si el primer
argumento se considera respectivamente menor que, igual que, o mayor que el segundo. Si dos miembros
resultan ser iguales, su orden en la matriz ordenada será cualquiera.

Ejemplo 1. Ejemplo de usort()

function cmp ($a, $b) {
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array (3, 2, 5, 6, 1);
usort ($a, cmp);
while (list ($clave, $valor) = each ($a)) {
    echo "$clave: $valorn";
}


Este ejemplo mostrará: 0: 6 1: 5 2: 3 3: 2 4: 1


     Nota: Obviamente en este caso trivial la función rsort() habría sido más apropiada.




                                                             Aviso
                    La función quicksort subyacente en ciertas librerías de C (tales como las de
                    Solaris) pueden hacer que el PHP falle si la función de comparación no devuelve
                    valores consistentes.




Vea también: arsort(), asort(), ksort(), rsort() y sort().




                                                                                                      208
III. Funciones Aspell [deprecated]

Introducción
     La función aspell() permite comprobar la ortografía de una palabra y ofrece alternativas a la misma.




Requerimientos
     aspell funciona solamente con versiones muy antiguas (hasta la .27.* mas ó menos) de la biblioteca
     aspell. Ni este módulo ni las versiones de la biblioteca aspell se soportan actualmente. Si quereis utilizar
     capacidades de comprobación ortográfica en php, usar pspell. Utiliza la biblioteca pspell y funciona con
     versiones recientes de aspell.




Instalación
     Necesitais la biblioteca aspell disponible en: http://aspell.sourceforge.net/.




Ver tambien
     Ver tambien pspell.




                                                                                                             209
Aspell

aspell_check-raw (PHP 3>= 3.0.7, PHP 4 )
          Comprueba una palabra sin cambiarla ó intentar arreglarla [deprecated]

   boolean aspell_check_raw ( int dictionary_link, string word) linebreak
          aspell_check_raw() comprueba la ortografía de una palabra,sin cambiarla ni intentar arreglarla esté bien
          o mal. Si está bien, devuelve cierto (TRUE), si no lo está, devuelve falso(FALSE).


          Ejemplo 1. aspell_check_raw


          $aspell_link = aspell_new("english");

          if (aspell_check_raw($aspell_link, "test")) {
              echo "This is a valid spelling";
          } else {
              echo "Sorry, wrong spelling";
          }




aspell_check (PHP 3>= 3.0.7, PHP 4 )
          Comprueba una palabra[deprecated]

   boolean aspell_check ( int dictionary_link, string word) linebreak
          aspell_check() comprueba la ortografía de una palabra, y devuelve cierto(TRUE) si la ortografía es
          correcta ,falso (FALSE) si no lo es .


          Ejemplo 1. aspell_check


          $aspell_link = aspell_new("english");

          if (aspell_check($aspell_link, "testt")) {
              echo "This is a valid spelling";
          } else {
              echo "Sorry, wrong spelling";
          }




                                                                                                                 210
Aspell

aspell_new (PHP 3>= 3.0.7, PHP 4 )
          Lee un nuevo diccionario [deprecated]

   int aspell_new ( string master, string personal) linebreak
          aspell_new() Abre un nuevo diccionario devolviendo el identificador de este para ser utilizado en otras
          funciones ortográficas.


          Ejemplo 1. Nuevo_diccionario


          $aspell_link = aspell_new("english");




aspell_suggest (PHP 3>= 3.0.7, PHP 4 )
          Sugiere la ortografía para una palabra [deprecated]

   array aspell_suggest ( int dictionary_link, string word) linebreak
          aspell_suggest() devuelve una matriz con posibles correciones ortográficas para la palabra dada.


          Ejemplo 1. aspell_suggest


          $aspell_link = aspell_new("english");

          if (!aspell_check($aspell_link, "test")) {
              $suggestions = aspell_suggest($aspell_link, "test");

               foreach ($suggestions as $suggestion) {
                   echo "Possible spelling: $suggestion<br>n";
               }
          }




                                                                                                              211
IV. Funciones matemáticas de precisión
arbitraria BCMath

Introducción
     Para operaciones matemáticas de precisión arbitraria, PHP tiene disponible la Calculadora Binaria que
     soporta números de cualquier tamaño y precisión, representados como cadenas de texto.




Requerimientos
     Desde PHP 4.0.4, libbcmath se encuentra incorporada en PHP. No se necesitan bibliotecas externas para
     esta extensión.




Instalación
     En PHP 4, estas funciones están disponibles solamente si PHP ha sido configurado con
     --enable-bcmath en PHP 3, estas funciones están disponibles solamente si PHP no ha sido
     configurado con --disable-bcmath.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión no define ningún tipo de recurso.




Constantes predefinidas
     Esta extensión no define ninguna constante.




                                                                                                        212
BCmath

bcadd (PHP 3, PHP 4 )
          Suma dos números de precisión arbitriaria.

   string bcadd ( string operando izq, string operando der [, int escala]) linebreak
          Suma el operando izq con el operando der y devuelve la suma en una cadena de texto. El
          parámetro opcional escala se usa para fijar el número de dígitos tras el punto decimal que aparecerán
          en el resultado.
          Vea también bcsub().




bccomp (PHP 3, PHP 4 )
          Compara dos números de precisión arbitraria.

   int bccomp ( string operando izq, string operando der [, int escala]) linebreak
          Compara el operando izq con el operando der y devuelve el resultado como un entero. El
          parámetro opcional escala se usa para fijar el número de dígitos tras el punto decimal que se utilizarán
          en la comparación. El valor devuelto es 0 si los dos operandos son iguales. Si el operando izq es
          mayor que el operando der el valor devuelto es +1 y si el operando izq es menor que el
          operando der el valor devuelto es -1.




bcdiv (PHP 3, PHP 4 )
          Divide dos números de precisión arbitraria.

   string bcdiv ( string operando izq, string operando der [, int escala]) linebreak
          Divide el operando izq por el operando der y devuelve el resultado. El parámetro opcional
          escala fija el número de dígitos tras el punto decimal a usar en el resultado.
          Ver también bcmul().




bcmod (PHP 3, PHP 4 )
          Obtiene el módulo de un número de precisión arbitraria.

   string bcmod ( string operando izq, string modulo) linebreak
          Obtiene el módulo del operando izq usando modulo.
          Ver también bcdiv().




                                                                                                             213
BCmath

bcmul (PHP 3, PHP 4 )
          Multiplica dos números de precisión arbitraria.

   string bcmul ( string operando izq, string operando der [, int escala]) linebreak
          Multiplica el operando izq por el operando der y devuelve el resultado. El parámetro opcional
          escala fija el número de dígitos tras el punto decimal del resultado.
          Ver también bcdiv().




bcpow (PHP 3, PHP 4 )
          Eleva un número de precisión arbitraria a otro.

   string bcpow ( string x, string y [, int escala]) linebreak
          Eleva x a la potencia de y. El parámetro opcional escala se puede usar para fijar el número de dígitos
          tras el punto decimal del resultado.
          Ver también bcsqrt().




bcscale (PHP 3, PHP 4 )
          Fija el parámetro de escala por defecto para todas las funciones matemáticas bc.

   string bcscale ( int escala) linebreak
          Esta función fija el parámetro de escala por defecto para las subsiguientes funciones matemáticas bc que
          no especifican dicho parámetro explícitamente.




bcsqrt (PHP 3, PHP 4 )
          Obtiene la raíz cuadrada de un número de precisión arbitraria.

   string bcsqrt ( string operando, int escala) linebreak
          Devuelve la raíz cuadrada del operando. El parámetro opcional escala fija el número de dígitos tras
          el punto decimal del resultado.
          Ver también bcpow().




                                                                                                             214
BCmath

bcsub (PHP 3, PHP 4 )
          Resta un número de precisión arbitraria de otro.

   string bcsub ( string operando izq, string operando der [, int escala]) linebreak
          Resta el operando der del operando izq y devuelve el resultado en una cadena. El parámetro
          opcional escala se utiliza para fijar el número de dígitos tras el punto decimal del resultado.
          Ver también bcadd().




                                                                                                       215
V. Funciones de compresión Bzip2

Introducción
     Las funciones bzip2 son usadas para leer y escribir de forma transparente, ficheros comprimidos bzip2
     (.bz2)




Requerimientos
     Este módulo usa las funciones de la biblioteca bzip2 (http://sources.redhat.com/bzip2/) de Julian Seward.




Instalación
     El soporte Bzip2 en PHP no está activado por defecto. Necesitais usar la opción de configuración
     --with-bz2 cuando vayais a compilar PHP, si quereis soporte bzip2. Este módulo requiere bzip2/libbzip2
     versión >= 1.0.x.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión define un tipo de recurso: un puntero de fichero que identifica el fichero bz2 con el que se
     va a trabajar.




Constantes predefinidas
     Esta extensión no define ninguna constante.




Ejemplos
     Este ejemplo abre un fichero temporal, escribe una cadena literal en el y presenta el contenido de dicho




                                                                                                          216
Bzip2

fichero.

Ejemplo 1. Ejemplo simple de bzip2


<?php

$filename = "/tmp/testfile.bz2";
$str = "This is a test string.n";

// open file for writing
$bz = bzopen($filename, "w");

// write string to file
bzwrite($bz, $str);

// close file
bzclose($bz);

// open file for reading
$bz = bzopen($filename, "r");

// read 10 characters
print bzread($bz, 10);

// output until end of the file (or the next 1024 char) and close it.
print bzread($bz);

bzclose($bz);

?>




                                                                         217
Bzip2

bzclose (PHP 4 >= 4.0.4)
          Close a bzip2 file pointer

   int bzclose ( resource bz) linebreak
          Closes the bzip2 file referenced by the pointer bz.
          Devuelve TRUE si todo fue bien, FALSE en caso de fallo.
          The file pointer must be valid, and must point to a file successfully opened by bzopen().
          See also bzopen().




bzcompress (PHP 4 >= 4.0.4)
          Compress a string into bzip2 encoded data

   string bzcompress ( string source [, int blocksize [, int workfactor]]) linebreak
          bzcompress() compresses the source string and returns it as bzip2 encoded data.
          The optional parameter blocksize specifies the blocksize used during compression and should be a
          number from 1 to 9 with 9 giving the best compression, but using more resources to do so. blocksize
          defaults to 4.
          The optional parameter workfactor controls how the compression phase behaves when presented
          with worst case, highly repetitive, input data. The value can be between 0 and 250 with 0 being a special
          case and 30 being the default value. Regardless of the workfactor, the generated output is the same.


          Ejemplo 1. bzcompress() Example


          <?php
          $str = "sample data";
          $bzstr = bzcompress($str, 9);
          print( $bzstr );
          ?>




          See also bzdecompress().




bzdecompress (PHP 4 >= 4.0.4)
          Decompresses bzip2 encoded data




                                                                                                               218
Bzip2

   string bzdecompress ( string source [, int small]) linebreak
          bzdecompress() decompresses the source string containing bzip2 encoded data and returns it. If the
          optional parameter small is TRUE, an alternative decompression algorithm will be used which uses less
          memory (the maximum memory requirement drops to around 2300K) but works at roughly half the
          speed. See the bzip2 documentation (http://sources.redhat.com/bzip2/) for more information about this
          feature.


          Ejemplo 1. bzdecompress()


          <?php
          $start_str = "This is not an honest face?";
          $bzstr = bzcompress($start_str);

          print( "Compressed String: " );
          print( $bzstr );
          print( "n<br>n" );

          $str =   bzdecompress($bzstr);
          print(   "Decompressed String: " );
          print(   $str );
          print(   "n<br>n" );
          ?>




          See also bzcompress().




bzerrno (PHP 4 >= 4.0.4)
          Returns a bzip2 error number

   int bzerrno ( resource bz) linebreak
          Returns the error number of any bzip2 error returned by the file pointer bz.
          See also bzerror() and bzerrstr().




bzerror (PHP 4 >= 4.0.4)
          Returns the bzip2 error number and error string in an array

   array bzerror ( resource bz) linebreak




                                                                                                           219
Bzip2

          Returns the error number and error string, in an associative array, of any bzip2 error returned by the file
          pointer bz.


          Ejemplo 1. bzerror() Example


          <?php
          $error = bzerror($bz);

          echo $error["errno"];
          echo $error["errstr"];
          ?>




          See also bzerrno() and bzerrstr().




bzerrstr (PHP 4 >= 4.0.4)
          Returns a bzip2 error string

   string bzerrstr ( resource bz) linebreak
          Returns the error string of any bzip2 error returned by the file pointer bz.
          See also bzerrno() and bzerror().




bzflush (PHP 4 >= 4.0.4)
          Force a write of all buffered data

   int bzflush ( resource bz) linebreak
          Forces a write of all buffered bzip2 data for the file pointer bz.
          Devuelve TRUE si todo fue bien, FALSE en caso de fallo.
          See also bzread() and bzwrite().




bzopen (PHP 4 >= 4.0.4)
          Open a bzip2 compressed file

   resource bzopen ( string filename, string mode) linebreak




                                                                                                                 220
Bzip2

          Opens a bzip2 (.bz2) file for reading or writing. filename is the name of the file to open. mode is
          similar to the fopen() function (‘r’ for read, ‘w’ for write, etc.).
          If the open fails, the function returns FALSE, otherwise it returns a pointer to the newly opened file.


          Ejemplo 1. bzopen() Example


          <?php
          $bz = bzopen("/tmp/foo.bz2", "r");
          $decompressed_file = bzread($bz, filesize("/tmp/foo.bz2"));
          bzclose($bz);

          print( "The contents of /tmp/foo.bz2 are: " );
          print( "n<br>n" );
          print( $decompressed_file );
          ?>




          See also bzclose().




bzread (PHP 4 >= 4.0.4)
          Binary safe bzip2 file read

   string bzread ( resource bz [, int length]) linebreak
          bzread() reads up to length bytes from the bzip2 file pointer referenced by bz. Reading stops when
          length (uncompressed) bytes have been read or EOF is reached, whichever comes first. If the optional
          parameter length is not specified, bzread() will read 1024 (uncompressed) bytes at a time.


          Ejemplo 1. bzread() Example


          <?php
          $bz = bzopen("/tmp/foo.bz2", "r");
          $str = bzread($bz, 2048);
          print( $str );
          ?>




          See also bzwrite() and bzopen().




                                                                                                                    221
Bzip2

bzwrite (PHP 4 >= 4.0.4)
          Binary safe bzip2 file write

   int bzwrite ( resource bz, string data [, int length]) linebreak
          bzwrite() writes the contents of the string data to the bzip2 file stream pointed to by bz. If the optional
          length argument is given, writing will stop after length (uncompressed) bytes have been written or the
          end of string is reached, whichever comes first.


          Ejemplo 1. bzwrite() Example


          <?php
          $str = "uncompressed data";
          $bz = bzopen("/tmp/foo.bz2", "w");
          bzwrite($bz, $str, strlen($str));
          bzclose($bz);
          ?>




          See also bzread() and bzopen().




                                                                                                                222
VI. Funciones de calendario

Introducción
     La extensión calendar pone a disposición una serie de funciones para simplificar la conversión entre los
     distintos formatos de calendario. El intermediario ó estándar en que se basa es la Cuenta de Días Juliana.
     La Cuenta de Días Juliana es una cuenta que comienza mucho antes que lo que mucha gente podría
     necesitar contar (como alrededor del 4000 AC). Para convertir entre sistemas de calendario, primero
     deberá convertir a la Cuenta de Días Juliana y luego al sistema de su elección. ¡La Cuenta de Días es
     muy diferente del Calendario Juliano! Para más informaci??? sobre la Cuenta de Días Juliana visitar
     http://serendipity.magnet.ch/hermetic/cal_stud/jdn.htm. Para más información sobre sistemas de
     calendario, visitar http://genealogy.org/~scottlee/cal-overview.html. En estas instrucciones se han
     incluído extractos entrecomillados de dicha página.




Instalación
     Para que estas funciones funcionen, hay que compilar PHP con la opción --enable-calendar.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión no define ningún tipo de recurso.




Constantes predefinidas
     Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión




                                                                                                           223
Calendario

          ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución.

CAL_GREGORIAN (entero)



CAL_JULIAN (entero)



CAL_JEWISH (entero)



CAL_FRENCH (entero)



CAL_NUM_CALS (entero)



CAL_DOW_DAYNO (entero)



CAL_DOW_SHORT (entero)



CAL_DOW_LONG (entero)



CAL_MONTH_GREGORIAN_SHORT (entero)



CAL_MONTH_GREGORIAN_LONG (entero)



CAL_MONTH_JULIAN_SHORT (entero)



CAL_MONTH_JULIAN_LONG (entero)



CAL_MONTH_JEWISH (entero)



CAL_MONTH_FRENCH (entero)



          Las siguientes constantes se pueden utilizar desde PHP 4.3.0 :

CAL_EASTER_DEFAULT (entero)



CAL_EASTER_ROMAN (entero)                                                                                224



CAL_EASTER_ALWAYS_GREGORIAN (entero)
Calendario

cal_days_in_month (PHP 4 >= 4.1.0)
          Devuelve el número de dias en un mes para un determinado año y calendario

   int cal_days_in_month ( int calendario, int mes, int año) linebreak
          Esta función devuelve el numero de dias en el mes del año para el calendario especificado
          calendario.
          Ver también jdtounix().




cal_from_jd (PHP 4 >= 4.1.0)
          Convierte de Cuenta de Días Juliana a un calendario soportado y devuelve información adicional.

   array cal_from_jd ( int jd, int calendario) linebreak




cal_info (PHP 4 >= 4.1.0)
          Devuelve información sobre un calendario den particular.

   array cal_info ( int calendario) linebreak




cal_to_jd (PHP 4 >= 4.1.0)
          Convierte de un calendario soportado a Cuenta de Días Juliana.

   int cal_to_jd ( int calendario, int mes, int dia, int año) linebreak




easter_date (PHP 3>= 3.0.9, PHP 4 )
          devuelve la marca de tiempo UNIX para la medianoche de Pascua de un año dado

   int easter_date ( [int anno]) linebreak
          Devuelve la marca de tiempo UNIX que corresponde a la medianoche de Pascua del año dado.
          A partir de PHP 4.3.0, el parametro anno es opcional y si se omite, usa por defecto el año en curso según
          "localtime".




                                                                                                               225
Calendario

          Aviso: Esta función generará un aviso si el año está fuera del rango para las marcas de tiempo del UNIX
          (es decir, antes de 1970 o después del 2037).

          Ejemplo 1. ejemplo de easter_date()


          echo date ("M-d-Y", easter_date(1999));                         /* "Apr-04-1999" */
          echo date ("M-d-Y", easter_date(2000));                         /* "Apr-23-2000" */
          echo date ("M-d-Y", easter_date(2001));                         /* "Apr-15-2001" */




          La fecha del Día de Pascua fue definida por el Concilio de Nicea en el 325 D.C. como el domingo tras la
          primera luna llena que cayera en ó después del equinoccio de Primavera. El equinoccio se supone que
          siempre cae en el 21 de marzo, de modo que el cálculo se reduce a determinar la fecha de la luna llena y
          la del domingo siguiente. El algoritmo usado aquí fue introducido en el año 532 por Dionisio Exiguo.
          Bajo el Calendario Juliano (para años anteriores al 1753), se usa un ciclo simple de 19 años para calcular
          las fases de la luna. Bajo el Calendario Gregoriano (años posteriores al 1753, diseñado por Clavio y
          Lilio, e introducido por el Papa Gregorio XIII en Octubre de 1582, y en Gran Bretaña y sus colonias en
          septiembre de 1752) se añaden dos factores de corrección para hacer el ciclo más preciso.
          (El código se basa en un programa en C de Simon Kershaw, <webmaster@ely.anglican.org>)
          Ver easter_days() para calcular la Pascua antes del 1970 o después del 2037.




easter_days (PHP 3>= 3.0.9, PHP 4 )
          Obtiene el número de días tras el 21 de marzo en que cae la Pascua en un año dado

   int easter_days ( [int anno [, int metodo]]) linebreak
          Devuelve el número de días tras el 21 de marzo en que cae la Pascua en un año dado. Si no se especifica
          año, se asume el actual.
          A partir de PHP 4.3.0, el parametro anno es opcional y si se omite, usa por defecto el año en curso según
          "localtime".
          El parámetro metodo fue introducido en la version PHP 4.3.0 y permite calcular fechas de pascua
          basadas en el Calendario Gregoriano durante los años 1582 - 1752 si se le da el valor
          CAL_EASTER_ROMAN. Ver las constantes de calendario para más información sobre estas constantes.

          Esta función se puede usar en lugar de easter_date() para calcular la Pascua para años que se salen del
          rango de las marcas de fecha del UNIX (o sea, antes del 1970 o después del 2037).

          Ejemplo 1. ejemplo de easter_date()


          echo easter_days (1999);                    /* 14, i.e. April 4          */
          echo easter_days (1492);                    /* 32, i.e. April 22         */
          echo easter_days (1913);                    /* 2, i.e. March 23          */




                                                                                                                226
Calendario




          La fecha del Día de Pascua fue definida por el Concilio de Nicea en el 325 D.C. como el domingo tras la
          primera luna llena que cayera en o después del equinoccio de Primavera. El equinoccio se supone que
          siempre cae en el 21 de marzo, de modo que el cálculo se reduce a determinar la fecha de la luna llena y
          la del domingo siguiente. El algoritmo usado aquí fue introducido en el año 532 por Dionisio Exiguo.
          Bajo el Calendario Juliano (para años anteriores al 1753), se usa un ciclo simple de 19 años para calcular
          las fases de la luna. Bajo el Calendario Gregoriano (años posteriores al 1753, diseñado por Clavio y
          Lilio, e introducido por el Papa Gregorio XIII en Octubre de 1582, y en Gran Bretaña y sus colonias en
          septiembre de 1752) se añaden dos factores de corrección para hacer el ciclo más preciso.
          (El código se basa en un programa en C de Simon Kershaw, <webmaster@ely.anglican.org>)
          Vea también easter_date().




FrenchToJD (PHP 3, PHP 4 )
          Convierte del Calendario Republicano Francés a la Cuenta de Días Juliana

   int frenchtojd ( int mes, int dia, int anno) linebreak
          Convierte una fecha del Calendario Republicano Francés a la Cuenta de Días Juliana.
          Estas rutinas sólo convierten fechas entre los años 1 y 14 (fechas Gregorianas del 22 de septiembre de
          1792 al 22 de septiembre de 1806). Esto cubre ampliamente el periodo en el que estuvo en uso este
          calendario.




GregorianToJD (PHP 3, PHP 4 )
          Convierte de fecha Gregoriana a la Cuenta de Días Juliana

   int gregoriantojd ( int mes, int dia, int anno) linebreak
          El rango válido para el Calendario Gregoriano es desde el 4714 A.C. hasta el 9999 D.C.
          Aunque este programa puede manejar fechas tan lejanas como el 4714 A.C., usarlo no tendría sentido. El
          calendario Gregoriano fue instituído el 15 de octubre de 1582 (o el 5 de octubre de 1582 en el calendario
          Juliano). Algunos países no lo aceptaron hasta mucho después. Por ejemplo, Gran Bretaña se convirtió
          en 1752, la URSS en 1918 y Grecia en 1923. Muchos países europeos usaron el calendario Juliano antes
          que el Gregoriano.

          Ejemplo 1. Funciones de calendario


          <?php
          $jd = GregorianToJD (10,11,1970);
          echo "$jdn";




                                                                                                                227
Calendario

        $gregorian = JDToGregorian ($jd);
        echo "$gregoriann";
        ?>




JDDayOfWeek (PHP 3, PHP 4 )
        Devuelve el día de la semana

  mixed jddayofweek ( int diajuliano, int modo) linebreak
        Devuelve el día de la semana. Dependiendo del modo, devuelve un entero ó una cadena.

        Tabla 1. Modos para el día de la semana

        Modo                                                  Significado
        0                                                     devuelve el día de la semana como entero
                                                              (0=domingo, 1=lunes, etc)
        1                                                     devuelve una cadena con el día de la semana (inglés,
                                                              gregoriano)
        2                                                     devuelve una cadena con el día de la semana
                                                              abreviado (inglés, gregoriano)




JDMonthName (PHP 3, PHP 4 )
        Devuelve el nombre de un mes

  string jdmonthname ( int diajuliano, int modo) linebreak
        Devuelve una cadena que contiene el nombre del mes. modo le dice a esta función a qué calendario debe
        convertir la Cuenta de Días Juliana, y qué tipo de nombres de mes debe devolver.

        Tabla 1. Modos de calendario

        Modo                                                  Significado                                             Valores
        0                                                     Gregoriano - abreviado                                 Jan, Feb, Mar, Apr
        1                                                     Gregoriano                                             January, February,
        2                                                     Juliano - abreviado                                    Jan, Feb, Mar, Apr
        3                                                     Juliano                                                January, February,
        4                                                     Judío                                                  Tishri, Heshvan, K




                                                                                                              228
Calendario

          Modo                                               Significado                                             Valores
          5                                                  Republicano Francés                                    Vendemiaire, Brum




JDToFrench (PHP 3, PHP 4 )
          Convierte de Cuenta de Días al Calendario Republicano Francés

   string jdtofrench ( int diajuliano) linebreak
          Convierte una Cuenta de Días Juliana al Calendario Republicano Francés.




JDToGregorian (PHP 3, PHP 4 )
          Convierte de Cuenta de Días a fecha Gregoriana

   string jdtogregorian ( int diajuliano) linebreak
          Convierte de Cuenta de Días Juliana a una cadena que contiene la fecha Gregoriana en formato
          "mes/día/año"




JDToJewish (PHP 3, PHP 4 )
          Convierte de Cuenta de Días Juliana a Calendario Judío

   string jdtojewish ( int diajuliano) linebreak
          Convierte una Cuenta de Días Juliana al Calendario Judío.




JDToJulian (PHP 3, PHP 4 )
          Convierte de Cuenta de Días Juliana a Calendario Juliano

   string jdtojulian ( int diajuliano) linebreak
          Convierte una Cuenta de Días Juliana a una cadena que contiene la fecha del Calendario Juliano en
          formato "mes/día/año".




                                                                                                              229
Calendario

jdtounix (PHP 4 )
          Convierte un dia Juliano a UNIX timestamp

   int jdtounix ( int jday) linebreak
          Esta funció devuelve el "UNIX timestamp" correspondiante a el dia Juliano definido en jday ó falso
          (FALSE) si jday no se encuentra en la ??? UNIX (años entre 1970 y 2037 ó 2440588 <= jday <=
          2465342 ). El tiempo devuelto es localtime (y no GMT).
          Ver también unixtojd().




JewishToJD (PHP 3, PHP 4 )
          Convierte del Calendario Judío a la Cuenta de Días Juliana

   int jewishtojd ( int mes, int dia, int anno) linebreak
          Aunque este programa puede manejar fechas tan lejanas como el año 1 (3761 A.C.), usarlo no tendría
          sentido. El Calendario Judío ha estado en uso miles de años, pero en los días primeros no había una
          fórmula que calculara el comienzo de un mes. Un mes comenzaba cuando se veía por primera vez la luna
          nueva.




JulianToJD (PHP 3, PHP 4 )
          Convierte de Calendario Juliano a Cuenta de Días Juliana

   int juliantojd ( int mes, int dia, int anno) linebreak
          Rango válido para el Calendario Juliano: del 4713 A.C al 9999 D.C.
          Aunque este programa puede manejar fechas tan lejanas como el 4713 A.C., usarlo no tendría sentido. El
          calendario se creó en el 46 A.C., pero sus detalles no se estabilizaron hasta al menos el 8 D.C., y quizás
          no lo hiciera hasta el siglo IV. Además, el comienzo de un año variaba de una a otra cultura: no todas
          aceptaban enero como el primer mes.


                                                             Atención
                      Recordar que el actual sistema de calendario en uso en todo el mundo es el
                      calendario Gregoriano. gregoriantojd() puede ser usada para convertir los dias del
                      calendario Gregoriano a Cuenta de Días Juliana.




                                                                                                                 230
Calendario

unixtojd (PHP 4 )
          Convierte de UNIX timestamp a dia Juliano

   int unixtojd ( [int timestamp]) linebreak
          Devuelve el dia Juliano correspondiente a un UNIX timestamp (segundos desde 01.01.1970), ó al dia
          actual si no se especifica timestamp
          Ver tambienjdtounix().




                                                                                                        231
VII. Funciones del API de CCVS

Introducción
     Estas funciones interaccionan con el API de CCVS, permitiendo trabajar con CCVS directamente desde
     un script PHP. CCVS es la solución de RedHat (http://www.redhat.com/) para el intermediario en el
     procesamiento de tarjetas de crédito. Permite conectar directamente con las centrales de las tarjetas desde
     una máquina *nix con un módem.

          Nota: CCVS ha sido discontinuado por Red Hat y no existen planes de ofrecer nuevas
          funcionalidades ó contratos de ayuda. Los que necesiten usar esta funcionalidad pueden probar
          MCVE by Main Street Softworks (http://www.mcve.com/). Es similar en diseño y tiene
          documentación para su uso con PHP




Instalación
     Para activar el soporte de CCVS en PHP hay que tener instalado CCVS en vuestro sistema.
     Seguidamente es necesario configurar PHP con la opción --with-ccvs. Si se usa esta opcion sin
     especificar el directorio donde CCVS está instalado, PHP intentará encontrar CCVS en la localización
     por defecto (/usr/local/ccvs). Si CCVS está instalado en una localización no estándar, ejecutar configure
     con: --with-ccvs=$ccvs_path, donde $ccvs_path es el directorio donde CCVS esta instalado. Tener
     en cuenta que el soporte de CCVS en PHP necesita que $ccvs_path/lib y $ccvs_path/include existan, que
     cv_api.h se encuentre en el directorio include y que libccvs.a se encuentre en el directorio lib.
     Adicionalmente se necesita un proceso ccvs ejecutandose en el sistema para las configuraciones que se
     ejecuten desde PHP. Los procesos PHP deben ejecutarse bajo el mismo usuario que use CCVS (p.ej. Si
     ccvs usa el usuario ’ccvs’, PHP debe ejecutarse como ’ccvs’ tambien).




Ver tambien
     Información adicional sobre CCVS se puede encontrar en http://www.redhat.com/products/ccvs. Red
     Hat casi no mantiene la documentación de CCVS, pero todavia es de gran ayuda, se puede encontrar en
      http://www.redhat.com/products/ccvs/support/CCVS3.3docs/ProgPHP.html
     (http://www.redhat.com/products/ccvs/support/CCVS3.3docs/ProgPHP.html).




                                                                                                            232
CCVS

ccvs_add (PHP 4 >= 4.0.2)
         Añadir datos a una transacción

   cadena ccvs_add ( cadena sesión, cadena factura, cadena argtype, cadena argval) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_auth (PHP 4 >= 4.0.2)
         Realiza un test de una autorización a crédito en una transacción

   cadena ccvs_auth ( cadena sesión, cadena factura) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_command (PHP 4 >= 4.0.2)
         Ejecuta un comando que es peculiar para un protocolo concreto, y que no está disponible en el API
         general de CCVS

   cadena ccvs_command ( cadena sesión, cadena tipo, cadena argval) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                             233
CCVS

ccvs_count (PHP 4 >= 4.0.2)
         Encuentra cuantas transacciones de un tipo dado están almacenadas en el sistema

   entero ccvs_count ( cadena sesión, cadena tipo) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_delete (PHP 4 >= 4.0.2)
         Borra una transacción

   cadena ccvs_delete ( cadena sesi???, cadena factura) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_done (PHP 4 >= 4.0.2)
         Finaliza el motor de CCVS y hace una limpieza

   cadena ccvs_done ( cadena sesió) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                    234
CCVS

ccvs_init (PHP 4 >= 4.0.2)
         Inicializa un CCVS para usarlo

   cadena ccvs_init ( cadena nombre) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_lookup (PHP 4 >= 4.0.2)
         Busca un item de un tipo en particular en la base de datos #

   cadena ccvs_lookup ( cadena sesión, cadena factura, entero inum) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_new (PHP 4 >= 4.0.2)
         Crea una nueva, transacción en blanco

   cadena ccvs_new ( cadena sesión, cadena cadena) linebreak


                                                                Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                    235
CCVS

ccvs_report (PHP 4 >= 4.0.2)
         Devuelve el estado del proceso de comunicación en background

   cadena ccvs_report ( cadena sesión, cadena tipo) linebreak


                                                                 Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_return (PHP 4 >= 4.0.2)
         Transfiere fondos del comerciante al titular de la tarjeta

   cadena ccvs_return ( cadena sesión, cadena factura) linebreak


                                                                 Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_reverse (PHP 4 >= 4.0.2)
         Realiza una revocación completa en una autorización ya procesada

   cadena ccvs_reverse ( cadena sesión, cadena factura) linebreak


                                                                 Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                    236
CCVS

ccvs_sale (PHP 4 >= 4.0.2)
         Transfiere fondos del titular de la tarjeta al comerciante

   cadena ccvs_sale ( cadena sesión, cadena factura) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_status (PHP 4 >= 4.0.2)
         Chequear el estado de una factura

   cadena ccvs_status ( cadena sesión, cadena factura) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




ccvs_textvalue (PHP 4 >= 4.0.2)
         Obtiene el valor de retorno de texto para una llamada anterior a una función

   cadena ccvs_textvalue ( cadena sesión) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                    237
CCVS

ccvs_void (PHP 4 >= 4.0.2)
         Realizar una revocación completa en una transacción completada

   cadena ccvs_void ( cadena sesión, cadena factura) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




                                                                                                    238
VIII. soporte de las funciones COM para
Windows
    Estas funciones solo están disponibles en la versión para Windows de PHP. Estas funciones han sido
    añadidas en PHP4.




                                                                                                         239
COM

COM (unknown)
           COM class


           Synopsis
           $obj = new COM("server.object")



           The COM class provides a framework to integrate (D)COM components into your php scripts.

    string COM::COM ( string module_name [, string server_name [, int codepage]]) linebreak
           COM class constructor. Parameters:

module_name
                name or class-id of the requested component.

server_name
                name of the DCOM server from which the component should be fetched. If NULL, localhost is
               assumed. To allow DCOM com.allow_dcom has to be set to TRUE in php.ini.

codepage
                specifies the codepage that is used to convert php-strings to unicode-strings and vice versa. Possible
               values are CP_ACP, CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP, CP_UTF7 and
               CP_UTF8.




           Ejemplo 1. COM example (1)


           // starting word
           $word = new COM("word.application") or die("Unable to instanciate Word");
           print "Loaded Word, version {$word->Version}n";

           //bring it to front
           $word->Visible = 1;

           //open an empty document
           $word->Documents->Add();

           //do some weird stuff
           $word->Selection->TypeText("This is a test...");
           $word->Documents[1]->SaveAs("Useless test.doc");

           //closing word
           $word->Quit();




                                                                                                                 240
COM


//free the object
$word->Release();
$word = null;




Ejemplo 2. COM example (2)


$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$conn->Open("Provider=SQLOLEDB; Data Source=localhost;
Initial Catalog=database; User ID=user; Password=password");

$rs = $conn->Execute("SELECT * FROM sometable");     // Recordset

$num_columns = $rs->Fields->Count();
echo $num_columns . "n";

for ($i=0; $i < $num_columns; $i++)
{
    $fld[$i] = $rs->Fields($i);
}

$rowcount = 0;
while (!$rs->EOF)
{
    for ($i=0; $i < $num_columns; $i++)
    {
        echo $fld[$i]->value . "t";
    }
    echo "n";
    $rowcount++;            // increments rowcount
    $rs->MoveNext();
}

$rs->Close();
$conn->Close();

$rs->Release();
$conn->Release();

$rs = null;
$conn = null;




                                                                     241
COM

VARIANT (unknown)
             VARIANT class


             Synopsis
             $vVar = new VARIANT($var)



             A simple container to wrap variables into VARIANT structures.

       string VARIANT::VARIANT ( [mixed value [, int type [, int codepage]]]) linebreak
             VARIANT class constructor. Parameters:

value
                   initial value. if omitted an VT_EMPTY object is created.

type
                    specifies the content type of the VARIANT object. Possible values are VT_UI1, VT_UI2, VT_UI4,
                   VT_I1, VT_I2, VT_I4, VT_R4, VT_R8, VT_INT, VT_UINT, VT_BOOL, VT_ERROR, VT_CY,
                   VT_DATE, VT_BSTR, VT_DECIMAL, VT_UNKNOWN, VT_DISPATCH and VT_VARIANT. These values
                   are mutual exclusive, but they can be combined with VT_BYREF to specify being a value. If omitted,
                   the type of value is used. Consult the msdn library for additional information.

codepage
                    specifies the codepage that is used to convert php-strings to unicode-strings and vice versa. Possible
                   values are CP_ACP, CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP, CP_UTF7 and
                   CP_UTF8.




com_addref (PHP 4 >= 4.1.0)
             Increases the components reference counter.

       void com_addref ( void) linebreak
             Increases the components reference counter.




com_get (PHP 3>= 3.0.3, PHP 4 >= 4.0.5)
             ???



                                                                                                                     242
COM

   mixed com_get ( resource object, string property) linebreak




com_invoke (PHP 3>= 3.0.3)
         ???

   mixed com_invoke ( resource object, string function_name [, mixed function parameters, ...]) linebreak




com_isenum (PHP 4 >= 4.1.0)
         Grabs an IEnumVariant

   void com_isenum ( object com_module) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




com_load_typelib (PHP 4 >= 4.1.0)
         Loads a Typelib

   void com_load_typelib ( string typelib_name [, int case_insensitive]) linebreak


                                                                  Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




com_load (PHP 3>= 3.0.3)
         ???




                                                                                                              243
COM

   string com_load ( string module name [, string server name]) linebreak




com_propget (PHP 3>= 3.0.3, PHP 4 >= 4.0.5)
          ???

   mixed com_propget ( resource object, string property) linebreak




com_propput (PHP 3>= 3.0.3, PHP 4 >= 4.0.5)
          ???

   void com_propput ( resource object, string property, mixed value) linebreak




com_propset (PHP 3>= 3.0.3, PHP 4 >= 4.0.5)
          ???

   void com_propset ( resource object, string property, mixed value) linebreak
          Esta función es un alias para com_propput().




com_release (PHP 4 >= 4.1.0)
          Decreases the components reference counter.

   void com_release ( void) linebreak
          Decreases the components reference counter.




com_set (PHP 3>= 3.0.3, PHP 4 >= 4.0.5)
          ???

   void com_set ( resource object, string property, mixed value) linebreak
          Esta función es un alias para com_set().




                                                                                   244
IX. Funciones de Clases/Objectos

Introducción
     Estas funciones permiten obtener informacion sobre clases y objetos. Se puede obtener el nombre de la
     clase a la que pertenece un objeto, asi como las propiedades de sus miembros y métodos. Usando estas
     funciones se puede obtener no solo lo comentado en la frase anterior, tambien se puede obtener la familia
     del objeto (p.ej. que clase está extendiendo la clase a la que pertenece el objeto)




Ejemplos
     En este ejemplo, definimos primero una clase base y una extensión de esta clase. La clase base define un
     vegetal genérico, si es comestible y su color. La subclase Spinach añade un metodo para cocinarlo y
     otro para saber si esta cocinado.


     Ejemplo 1. classes.inc


     <?php

     // base class with member properties and methods
     class Vegetable {

          var $edible;
          var $color;

          function Vegetable( $edible, $color="green" ) {
              $this->edible = $edible;
              $this->color = $color;
          }

          function is_edible() {
              return $this->edible;
          }

          function what_color() {
              return $this->color;
          }

     } // end of class Vegetable

     // extends the base class
     class Spinach extends Vegetable {

          var $cooked = false;

          function Spinach() {




                                                                                                          245
Clases/Objetos

          $this->Vegetable( true, "green" );
     }

     function cook_it() {
         $this->cooked = true;
     }

     function is_cooked() {
         return $this->cooked;
     }

} // end of class Spinach

?>




Creamos 2 objetos de estas clases e imprimimos información sobre ellos, incluyendo la jerarquia de
clases a la que pertenecen. También definimos algunas funciones, especialmente para imprimir las
variables de una manera ordenada.


Ejemplo 2. test_script.php


<pre>
<?php

include "classes.inc";

// utility functions

function print_vars($obj) {
    $arr = get_object_vars($obj);
    while (list($prop, $val) = each($arr))
        echo "t$prop = $valn";
}

function print_methods($obj) {
    $arr = get_class_methods(get_class($obj));
    foreach ($arr as $method)
        echo "tfunction $method()n";
}

function class_parentage($obj, $class) {
    global $$obj;
    if (is_subclass_of($$obj, $class)) {
        echo "Object $obj belongs to class ".get_class($$obj);
        echo " a subclass of $classn";
    } else {
        echo "Object $obj does not belong to a subclass of $classn";
    }




                                                                                                     246
Clases/Objetos

}

// instantiate 2 objects

$veggie = new Vegetable(true,"blue");
$leafy = new Spinach();

// print out information about objects
echo "veggie: CLASS ".get_class($veggie)."n";
echo "leafy: CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."n";

// show veggie properties
echo "nveggie: Propertiesn";
print_vars($veggie);

// and leafy methods
echo "nleafy: Methodsn";
print_methods($leafy);

echo "nParentage:n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre>




One important thing to note in the example above is that the object $leafy is an instance of the class
Spinach which is a subclass of Vegetable, therefore the last part of the script above will output:



       [...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable




                                                                                                     247
Clases/Objetos

call_user_method_array (PHP 4 >= 4.0.5)
         Call a user method given with an array of parameters [deprecated]

   mixed call_user_method_array ( string method_name, object obj [, array paramarr]) linebreak


                                                        Aviso
                     The call_user_method_array() function is deprecated as of PHP 4.1.0, use the
                     call_user_func_array() variety with the array(&$obj, "method_name") syntax
                     instead.


         Calls the method referred by method_name from the user defined obj object, using the parameters in
         paramarr.
         See also: call_user_func_array(), call_user_func(), call_user_method().

              Nota: This function was added to the CVS code after release of PHP 4.0.4pl1




call_user_method (PHP 3>= 3.0.3, PHP 4 )
         Call a user method on an specific object [deprecated]

   mixed call_user_method ( string method_name, object obj [, mixed parameter [, mixed ...]]) linebreak


                                                        Aviso
                     The call_user_method() function is deprecated as of PHP 4.1.0, use the
                     call_user_func() variety with the array(&$obj, "method_name") syntax instead.


         Calls the method referred by method_name from the user defined obj object. An example of usage is
         below, where we define a class, instantiate an object and use call_user_method() to call indirectly its
         print_info method.



         <?php
         class Country {
             var $NAME;
             var $TLD;

               function Country($name, $tld) {
                   $this->NAME = $name;
                   $this->TLD = $tld;
               }




                                                                                                            248
Clases/Objetos

               function print_info($prestr="") {
                   echo $prestr."Country: ".$this->NAME."n";
                   echo $prestr."Top Level Domain: ".$this->TLD."n";
               }
          }

          $cntry = new Country("Peru","pe");

          echo "* Calling the object method directlyn";
          $cntry->print_info();

          echo "n* Calling the same method indirectlyn";
          call_user_method ("print_info", $cntry, "t");
          ?>




          See also call_user_func_array(), call_user_func(), and call_user_method_array().




class_exists (PHP 4 )
          Checks if the class has been defined

   bool class_exists ( string class_name) linebreak
          This function returns TRUE if the class given by class_name has been defined, FALSE otherwise.




get_class_methods (PHP 4 )
          Devuelve un vector (matriz unidimensional) con los nombres de los métodos de la clase en question.

   vector get_class_methods ( string class_name) linebreak
          Esta función devuelve un vector con los nombres de los métodos definidos en la clase especificada como
          class_name.

               Nota: A partir de PHP 4.0.6, se puede especificar el objeto a sí mismo en vez de class_name. Por
               ejemplo:



               $class_methods = get_class_methods($my_class); // see below the full example




                                                                                                               249
Clases/Objetos

Ejemplo 1. get_class_methods() ejemplo


<?php

class myclass {
    // constructor
    function myclass() {
        return(TRUE);
    }

     // method 1
     function myfunc1() {
         return(TRUE);
     }

     // method 2
     function myfunc2() {
         return(TRUE);
     }
}

$my_object = new myclass();

$class_methods = get_class_methods(get_class($my_object));

foreach ($class_methods as $method_name) {
    echo "$method_namen";
}

?>




Producira:


myclass
myfunc1
myfunc2




Ver también get_class_vars() y get_object_vars().




                                                                       250
Clases/Objetos

get_class_vars (PHP 4 )
        Devuelve un vector con las propiedades (inicializadas por defecto) de la clase

  array get_class_vars ( string class_name) linebreak
        Esta función devuelve un vector con las propiedades que han sido inicializadas por defecto en la clase.
        Los elementos de este vector están estan organizados de la forma varname => value.

             Nota: Las variables de la clase que no estén inicializadas, no será presentadas por
             get_class_vars().




        Ejemplo 1. get_class_vars() ejemplo


        <?php

        class myclass {

              var $var1; // this has no default value...
              var $var2 = "xyz";
              var $var3 = 100;

              // constructor
              function myclass() {
                  return(TRUE);
              }
        }

        $my_class = new myclass();

        $class_vars = get_class_vars(get_class($my_class));

        foreach ($class_vars as $name => $value) {
            echo "$name : $valuen";
        }

        ?>




        Producira:


        var2 : xyz
        var3 : 100




                                                                                                             251
Clases/Objetos




          Ver también get_class_methods(), get_object_vars()




get_class (PHP 4 )
          Returns the name of the class of an object

   string get_class ( object obj) linebreak
          This function returns the name of the class of which the object obj is an instance. Returns FALSE if obj
          is not an object.

               Nota: get_class() returns a user defined class name in lowercase. A class defined in a PHP
               extension is returned in its original notation.



          See also get_parent_class(), gettype(), and is_subclass_of().




get_declared_classes (PHP 4 )
          Returns an array with the name of the defined classes

   array get_declared_classes ( void) linebreak
          This function returns an array of the names of the declared classes in the current script.

               Nota: In PHP 4.0.1pl2, three extra classes are returned at the beginning of the array: stdClass
               (defined in Zend/zend.c), OverloadedTestClass (defined in ext/standard/basic_functions.c)
               and Directory (defined in ext/standard/dir.c).
               Also note that depending on what libraries you have compiled into PHP, additional classes could be
               present. This means that you will not be able to define your own classes using these names. There is
               a list of predefined classes in the Predefined Classes section of the appendices.




get_object_vars (PHP 4 )
          Devuelve un vector de propiedades del objecto

   array get_class_vars ( object obj) linebreak




                                                                                                                 252
Clases/Objetos

Esta función devuelve un vector con las propiedades definidas en el objecto especificado como obj. Las
variables declaradas en la clase a la que pertenece obj, que no les ha sido asignado un valor, no serán
devueltas en el vector.

Ejemplo 1. Uso de get_object_vars()


<?php
class Point2D {
    var $x, $y;
    var $label;

       function Point2D($x, $y) {
           $this->x = $x;
           $this->y = $y;
       }

       function setLabel($label) {
           $this->label = $label;
       }

       function getPoint() {
           return array("x" => $this->x,
                        "y" => $this->y,
                        "label" => $this->label);
       }
}

// "$label" is declared but not defined
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));

$p1->setLabel("point #1");
print_r(get_object_vars($p1));

?>




El resultado de este programa es:


    Array
    (
        [x] => 1.233
        [y] => 3.445
    )

    Array
    (
        [x] => 1.233
        [y] => 3.445
        [label] => point #1




                                                                                                   253
Clases/Objetos

            )




           Ver tambien get_class_methods() y get_class_vars()!




get_parent_class (PHP 4 )
           Retrieves the parent class name for object or class

    string get_parent_class ( mixed obj) linebreak
           If obj is an object, returns the name of the parent class of the class of which obj is an instance.
           If obj is a string, returns the name of the parent class of the class with that name. This functionality was
           added in PHP 4.0.5.
           See also get_class() and is_subclass_of()




is_a (PHP 4 >= 4.2.0)
           Returns TRUE if the object is of this class or has this class as one of its parents

    bool is_a ( object object, string class_name) linebreak
           This function returns TRUE if the object is of this class or has this class as one of its parents, FALSE
           otherwise.
           See also get_class(), get_parent_class(), and is_subclass_of().




is_subclass_of (PHP 4 )
           Returns TRUE if the object has this class as one of its parents

    bool is_subclass_of ( object object, string class_name) linebreak
           This function returns TRUE if the object object, belongs to a class which is a subclass of
           class_name, FALSE otherwise.
           See also get_class(), get_parent_class() and is_a().




                                                                                                                      254
Clases/Objetos

method_exists (PHP 4 )
        Comprueba que el metódo de clase existe

  bool method_exists ( object object, string method_name) linebreak
        Esta función devuelve verdadero (TRUE) si el metódo referido por method_name ha sido definido en el
        objecto object, en cualquier otro caso devuelve falso (FALSE)




                                                                                                      255
X. Funciones de ClibPDF
    ClibPDF Le permite crear documentos PDF con PHP. Está disponible en FastIO (http://www.fastio.com)
    pero no es software libre. Debería leer la licencia antes de comenzar a utilizar ClibPDF. Si usted no
    puede cumplir el acuerdo de la licencia considere el utilizar la pdflib de Thomas Merz, que tambien es
    muy potente. La funcionalidad y la API de ClibPDF son similares a la pdflib de Thomas Merz pero, de
    acuerdo con FastIO, ClibPDF es mas rápida y crea documentos mas pequeños. Esto puede haber
    cambiado con la nueva versión 2.0 de pdflib. Un simple banco de pruebas (el ejemplo pdfclock.c de
    pdflib 2.0 trasformado en un script php) en realidad no muestra ninguna diferencia en velocidad. Por
    tanto, pruebe las dos y vea cual hace el mejor trabajo para usted.
    Esta documentación debería ser leída junto con el manual de ClibPDF ya que este explica la librería con
    mucho mas detalle.
    Muchas funciones en le ClibPDF nativa y el módulo PHP, así como en pdflib, tienen el mismo nombre.
    Todas las funciones excepto cpdf_open() toman el manejador del documento com el primer parámetro.
    Actualmente este manejador no se usa internamente desde que ClibPDF no soporta la creación de varios
    documentos PDF al mismo tiempo. Realmente, ni debería intentarlo, los resultados son impredecibles.
    No puedo supervisar cuales son las consecuencias en un sistema multihilo. De acuerdo con el autor de
    ClibPDF, esto cambiará en alguno de las próximas veriones (la versión actual, cuando eto fue escrito es
    1.10). Si usted necesita esta capacidad, use el módulo pdflib.

        Nota: La función cpdf_set_font() ha cambiado desde que PHP3 soporta fuentes asiáticas. El
        parámetro que codifica ya no es un entero sino una cadena.



    Una gran ventaja de ClibPDF sobre pdflib es la posibilidad de crear el documento PDF completamente
    en memoria sin usar ficheros temporales. Esto también proporciona la capaciad de pasar coordenadas en
    una unidad de longitud predefinida. Esta es una cualidad útil pero puede ser simulada con pdf_translate().
    La mayoría de las funciones son fáciles de usar. La parte mas difícil es, probablemente, crear un
    documento PDF muy simple. El siguiente ejemplo debería ayudarle a comenzar. En él se crea un
    documento con una página. La página contiene el texto "Times-Roman" con una fuente de 30pt. El texto
    está subrayado.

    Ejemplo 1. Ejemplo simple de ClibPDF

    <?php
    $cpdf = cpdf_open(0);
    cpdf_page_init($cpdf, 1, 0, 595, 842);
    cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
    cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
    cpdf_set_text_rendering($cpdf, 1);
    cpdf_text($cpdf, "Times Roman outlined", 50, 750);
    cpdf_moveto($cpdf, 50, 740);
    cpdf_lineto($cpdf, 330, 740);
    cpdf_stroke($cpdf);
    cpdf_finalize($cpdf);
    Header("Content-type: application/pdf");
    cpdf_output_buffer($cpdf);
    cpdf_close($cpdf);




                                                                                                         256
ClibPDF

?>


La distribución de pdflib contiene un ejemplo mas comlejo que crea una serie de páginas con un reloj
analógico. Aquí está ese ejemplo convertido en PHP usando la extensión ClibPDF:

Ejemplo 2. Ejemplo con pdfclock de la distribución pdflib 2.0

<?php
$radius = 200;
$margin = 20;
$pagecount = 40;

$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php3");
cpdf_set_title($pdf, "Reloj Analógico");

while($pagecount-- > 0) {
  cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $mar-
gin), 1.0);

     cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);               /* limpiar */

     cpdf_translate($pdf, $radius + $margin, $radius + $margin);
     cpdf_save($pdf);
     cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);

     /* cambio de minuto */
     cpdf_setlinewidth($pdf, 2.0);
     for ($alpha = 0; $alpha < 360; $alpha += 6)
       {
       cpdf_rotate($pdf, 6.0);
       cpdf_moveto($pdf, $radius, 0.0);
       cpdf_lineto($pdf, $radius-$margin/3, 0.0);
       cpdf_stroke($pdf);
       }

     cpdf_restore($pdf);
     cpdf_save($pdf);

     /* cambios de 5 minutos */
     cpdf_setlinewidth($pdf, 3.0);
     for ($alpha = 0; $alpha < 360; $alpha += 30)
     {
       cpdf_rotate($pdf, 30.0);
       cpdf_moveto($pdf, $radius, 0.0);
       cpdf_lineto($pdf, $radius-$margin, 0.0);
       cpdf_stroke($pdf);
     }

     $ltime = getdate();

     /* dibujar la aguja de las horas */




                                                                                                  257
ClibPDF

    cpdf_save($pdf);
    cpdf_rotate($pdf, -(($ltime[’minutos’]/60.0) + $ltime[’horas’] - 3.0) * 30.0);
    cpdf_moveto($pdf, -$radius/10, -$radius/20);
    cpdf_lineto($pdf, $radius/2, 0.0);
    cpdf_lineto($pdf, -$radius/10, $radius/20);
    cpdf_closepath($pdf);
    cpdf_fill($pdf);
    cpdf_restore($pdf);

    /* dibujar el minutero */
    cpdf_save($pdf);
    cpdf_rotate($pdf, -(($ltime[’segundos’]/60.0) + $ltime[’minutos’] - 15.0) * 6.0);
    cpdf_moveto($pdf, -$radius/10, -$radius/20);
    cpdf_lineto($pdf, $radius * 0.8, 0.0);
    cpdf_lineto($pdf, -$radius/10, $radius/20);
    cpdf_closepath($pdf);
    cpdf_fill($pdf);
    cpdf_restore($pdf);

    /* dibujar la seguna mano */
    cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
    cpdf_setlinewidth($pdf, 2);
    cpdf_save($pdf);
    cpdf_rotate($pdf, -(($ltime[’segundos’] - 15.0) * 6.0));
    cpdf_moveto($pdf, -$radius/5, 0.0);
    cpdf_lineto($pdf, $radius, 0.0);
    cpdf_stroke($pdf);
    cpdf_restore($pdf);

    /* dibujar un pequeño círculo en el centro */
    cpdf_circle($pdf, 0, 0, $radius/30);
    cpdf_fill($pdf);

    cpdf_restore($pdf);

    cpdf_finalize_page($pdf, $pagecount+1);
}

cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>




                                                                             258
ClibPDF

cpdf_add_annotation (PHP 3>= 3.0.12, PHP 4 )
            Añade una anotación

     void cpdf_add_annotation ( int pdf document, double llx, double lly, double urx, double ury, string title, string
content, int mode) linebreak
            La función cpdf_add_annotation() añade una nota con la esquina inferior izquierda en (llx, lly) y la
            esquina superior derecha en (urx, ury).
            El últomo parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por
            defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript,
            despreciando la unidad actual.




cpdf_add_outline (PHP 3>= 3.0.9, PHP 4 )
            Añade una marca en la página actual

     void cpdf_add_outline ( int pdf document, string text) linebreak
            La función cpdf_add_outline() añade una marca con el texto text que apunta a la página actual.

            Ejemplo 1. Añadiendo un contorno de página

            <?php
            $cpdf = cpdf_open(0);
            cpdf_page_init($cpdf, 1, 0, 595, 842);
            cpdf_add_outline($cpdf, 0, 0, 0, 1, "Página 1");
            // ...
            // Algún dibujo
            // ...
            cpdf_finalize($cpdf);
            Header("Content-type: application/pdf");
            cpdf_output_buffer($cpdf);
            cpdf_close($cpdf);
            ?>




cpdf_arc (PHP 3>= 3.0.8, PHP 4 )
            Dibuja un arco




                                                                                                                  259
ClibPDF

    void cpdf_arc ( int pdf document, double x-koor, double y-koor, double radius, double start, double end, int
mode) linebreak
           La función cpdf_arc() dibuja un arco con el centro rn el punto (x-koor, y-koor) y radio radius,
           empezando en el ángulo start y terminando en el ángulo end.
           El último parámetro opcional especifica el tamaño de la unidad. Si es 0 o se omite, se usa la unidad
           especificada por defecto. De otro modo las coordenadas son medidas en puntos postscript,despreciando
           la unidad actual.
           Vea también cpdf_circle().




cpdf_begin_text (PHP 3>= 3.0.8, PHP 4 )
           Inicializa una sección de texto

    void cpdf_begin_text ( int pdf document) linebreak
           La función cpdf_begin_text() comienza una sección de texto. Debe ser terminada con cpdf_end_text().

           Ejemplo 1. Salida de texto

           <?php cpdf_begin_text($pdf);
           cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding");
           cpdf_text($pdf, 100, 100, "Algún texto");
           cpdf_end_text($pdf) ?>



           Vea también cpdf_end_text().




cpdf_circle (PHP 3>= 3.0.8, PHP 4 )
           Dibuja un círculo

    void cpdf_circle ( int pdf document, double x-koor, double y-koor, double radius, int mode) linebreak
           La función cpdf_circle() dibuja un círculo con centro en el punto (x-koor, y-koor) y radio radius.
           El último parámetro opcional define el tamaño de la unidad. Si es 0 o se omite, se usa el valor por
           defecto para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la
           unidad actual.
           Vea también cpdf_arc().




                                                                                                                 260
ClibPDF

cpdf_clip (PHP 3>= 3.0.8, PHP 4 )
         Ajusta al camino actual

   void cpdf_clip ( int pdf document) linebreak
         La función cpdf_clip() ajusta todos los dibujos al camino actual.




cpdf_close (PHP 3>= 3.0.8, PHP 4 )
         Cierra un documento PDF

   void cpdf_close ( int pdf document) linebreak
         La función cpdf_close() cierra un documento PDF. Esta debería ser la última operación incluso después
         de cpdf_finalize(), cpdf_output_buffer() y cpdf_save_to_file().
         Vea también cpdf_open().




cpdf_closepath_fill_stroke (PHP 3>= 3.0.8, PHP 4 )
         Cierra, llena y traza el camino actual

   void cpdf_closepath_fill_stroke ( int pdf document) linebreak
         La función cpdf_closepath_fill_stroke() cierra, llena el interior del caminoa catual con el color actual de
         relleno y dibuja el camino actual.
         Vea también cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(),
         cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().




cpdf_closepath_stroke (PHP 3>= 3.0.8, PHP 4 )
         Cierra el camino y dibuja una línea a lo largo del camino

   void cpdf_closepath_stroke ( int pdf document) linebreak
         La función cpdf_closepath_stroke() es una combinación de cpdf_closepath() y cpdf_stroke(). Después
         limpia el camino.
         Vea también cpdf_closepath(), cpdf_stroke().




                                                                                                               261
ClibPDF

cpdf_closepath (PHP 3>= 3.0.8, PHP 4 )
           Cierra el camino

    void cpdf_closepath ( int pdf document) linebreak
           La función cpdf_closepath() cierra el camino actual.




cpdf_continue_text (PHP 3>= 3.0.8, PHP 4 )
           Pone texto en la línea siguiente

    void cpdf_continue_text ( int pdf document, string text) linebreak
           La función cpdf_continue_text() pone la cadena text en la línea siguiente.
           Vea también cpdf_show_xy(), cpdf_text(), cpdf_set_leading(), cpdf_set_text_pos().




cpdf_curveto (PHP 3>= 3.0.8, PHP 4 )
           Dibuja una curva

    void cpdf_curveto ( int pdf document, double x1, double y1, double x2, double y2, double x3, double y3, int
mode) linebreak
           La función cpdf_curveto() dibuja una curva Bezier desde el punto actual al punto (x3, y3) usando (x1,
           y1) y (x2, y2) como puntos de control.
           El último parámetro opcional especifica el tamaño de la unidad. Si es 0 o se omite, se usa la unidad
           especificada para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando
           la unidad en curso.
           Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_rlineto(), cpdf_lineto().




cpdf_end_text (PHP 3>= 3.0.8, PHP 4 )
           Finaliza una sección de texto

    void cpdf_end_text ( int pdf document) linebreak
           La función cpdf_end_text() finaliza unasección de texto que fue inicializada con cpdf_begin_text().




                                                                                                                262
ClibPDF

         Ejemplo 1. Salida de texto

         <?php cpdf_begin_text($pdf);
         cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding");
         cpdf_text($pdf, 100, 100, "Algún texto");
         cpdf_end_text($pdf) ?>



         Vea también cpdf_begin_text().




cpdf_fill_stroke (PHP 3>= 3.0.8, PHP 4 )
         LLena y traza el camino actual

   void cpdf_fill_stroke ( int pdf document) linebreak
         La función cpdf_fill_stroke() llena el interior del camino actual con el color de relleno actual y dibuja el
         camino actual.
         Vea también cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(),
         cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().




cpdf_fill (PHP 3>= 3.0.8, PHP 4 )
         LLena el camino actual

   void cpdf_fill ( int pdf document) linebreak
         La función cpdf_fill() llena el interior del camino actual con el color alctual de relleno.
         Vea también cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(),
         cpdf_setrgbcolor().




cpdf_finalize_page (PHP 3>= 3.0.10, PHP 4 )
         Finaliza una página

   void cpdf_finalize_page ( int pdf document, int page number) linebreak
         La función cpdf_finalize_page() finaliza una página con número de página page number. Esta
         función es sólo para ahorrar memoria. Una página terminada ocupa menos memoria pero no puede
         volver a ser modificada.
         Vea también cpdf_page_init().




                                                                                                                263
ClibPDF

cpdf_finalize (PHP 3>= 3.0.8, PHP 4 )
           Finaliza un documento

    void cpdf_finalize ( int pdf document) linebreak
           La función cpdf_finalize() finaliza un documento. Aún se tiene que llamar a cpdf_close().
           Vea también cpdf_close().




cpdf_global_set_document_limits (PHP 4 )
           Sets document limits for any pdf document

    void cpdf_global_set_document_limits ( int maxpages, int maxfonts, int maximages, int maxannotations, int
maxobjects) linebreak
           La función cpdf_global_set_document_limits() define varios límites del documento. Esta función debe
           ser llamada antes de cpdf_open() para que haga efecto. Ello define los límites de cualquier documento
           abierto con anterioridad.
           Vea también cpdf_open().




cpdf_import_jpeg (PHP 3>= 3.0.9, PHP 4 )
           Abre una imagen JPEG

    int cpdf_open_jpeg ( int pdf document, string file name, double x-koor, double y-koor, double angle, double
width, double height, double x-scale, double y-scale, int mode) linebreak
           La función cpdf_import_jpeg() abre una imagen almacenada en el fichero de nombre file name. El
           formato de la imagen debe ser JPEG. La imagen es situada en la página actual en la posición (x-koor,
           y-koor). La imagen es rotada angle grados.
           El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por
           defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript,
           despreciando la unidad actual.
           Vea también cpdf_place_inline_image(),




cpdf_lineto (PHP 3>= 3.0.8, PHP 4 )
           Dibuja una línea

    void cpdf_lineto ( int pdf document, double x-koor, double y-koor, int mode) linebreak




                                                                                                                264
ClibPDF

         La función cpdf_lineto() dibuja una línea desde el punto actual al punto con coordenadas (x-koor,
         y-koor).
         El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa el valor
         especificado para la página por defecto. De otro modo las coordenadas se miden en puntos postscript,
         despreciando la unidad actual.
         Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().




cpdf_moveto (PHP 3>= 3.0.8, PHP 4 )
         Define el punto actual

   void cpdf_moveto ( int pdf document, double x-koor, double y-koor, int mode) linebreak
         La funcióncpdf_moveto() pone el punto actual en las coordenadas x-koor y y-koor.
         El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, la unidad por defecto
         será la especificada para la página. De otro modo las coordenadas se medirán en puntos postscript
         despreciando la unidad en curso.




cpdf_newpath (PHP 3>= 3.0.9, PHP 4 )
         Starts a new path

   void cpdf_newpath ( int pdf document) linebreak
         The cpdf_newpath() starts a new path on the document given by the pdf document parameter.




cpdf_open (PHP 3>= 3.0.8, PHP 4 )
         Abre un nuevo documento PDF

   int cpdf_open ( int compression, string filename) linebreak
         LA función cpdf_open() abre un documento PDF nuevo. El primer parámetro activa la compresión del
         documento si no es igual a 0. El segundo parámetro, opcional, es el fichero en el que el documento es
         escrito. Si es omitido, el documento es creado en memoria y puede ser escrito en un fichero mediante la
         función cpdf_save_to_file() o escrito por la salida estándar con cpdf_output_buffer().

              Nota: El valor de retorno será necesario en nuevas versiones de ClibPDF como el primer parámetro
              en todas las demás funciones que escriben en el documento PDF.
              La librería ClibPDF toma el nombre de fichero "-" como sinónimo de stdout (salida estándar). Si se
              compila PHP como módulo de apache esto no funcionará porque la manera en que ClibPDF
              direcciona a la salida estándar no funciona con apache. Usted puede solucionar este problema
              evitando el enobre de fichero y usando cpdf_output_buffer() para la salida de documentos PDF.




                                                                                                               265
ClibPDF




           Vea también cpdf_close(), cpdf_output_buffer().




cpdf_output_buffer (PHP 3>= 3.0.9, PHP 4 )
           Pone el documento PDF en el buffer de memoria

    void cpdf_output_buffer ( int pdf document) linebreak
           La función cpdf_output_buffer() muestra el documento PDF por la salida estándar. El documento debe
           ser creado en memoria, que es el caso de la función cpdf_open() cuando ha sido llamada sin parámetros.
           Vea también cpdf_open().




cpdf_page_init (PHP 3>= 3.0.8, PHP 4 )
           Comienza una nueva página

     void cpdf_page_init ( int pdf document, int page number, int orientation, double height, double width, double
unit) linebreak
           La función cpdf_page_init() crea una nueva página de altura height y profundidad width. La página
           tiene el número page number y orientación orientation. orientation puede ser 0 para
           retrato y 1 para paisaje. El último parámetro opcional unit define la unidad del sistema de coordenadas.
           El valor debería ser el número de puntos postscript por unidad. Como el valor de una pulgada el igual a
           72 puntos, un valor de 72 sería la unidad para una pulgada. Por defecto es 72.
           Vea también cpdf_set_current_page().




cpdf_place_inline_image (PHP 3>= 3.0.9, PHP 4 )
           Situa una imagen en la página

    void cpdf_place_inline_image ( int pdf document, int image, double x-koor, double y-koor, double angle, double
width, double height, int mode) linebreak
           La función cpdf_place_inline_image() situa una imagen creada con las funciones de imagenes de PHP
           en la posición de la página (x-koor, y-koor). La imagen puede ser escalada al mismo tiempo.
           El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por
           defecto especificada para la página. De otro modo las coordenadas son medidas en puntos postscript,
           descartando la unidad actual.
           Vea también cpdf_import_jpeg(),



                                                                                                                266
ClibPDF

cpdf_rect (PHP 3>= 3.0.8, PHP 4 )
           Dibuja un rectángulo

     void cpdf_rect ( int pdf document, double x-koor, double y-koor, double width, double height, int mode) line-
break
           La función cpdf_rect() dibuja un rectángulo con su esquina inferior izquierda en el punto (x-koor,
           y-koor). La anchura es widgth. La altura es height.
           El último parámetro opcional define el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por
           defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript,
           despreciando la unidad actual.




cpdf_restore (PHP 3>= 3.0.8, PHP 4 )
           Restaura un entorno formalmente salvado

    void cpdf_restore ( int pdf document) linebreak
           La función cpdf_restore() restaura el entorno salvado con cpdf_save(). Funciona como el comando
           grestore de postscript. Muy útil si se quiere trasladar o rotar un objeto sin afectar ortros objetos.

           Ejemplo 1. Salvar/Restaurar

           <?php cpdf_save($pdf);
           // hacer todo tipo de rotaciones, transformaciones, ...
           cpdf_restore($pdf) ?>



           Vea también cpdf_save().




cpdf_rlineto (PHP 3>= 3.0.9, PHP 4 )
           Dibuja una línea

    void cpdf_rlineto ( int pdf document, double x-koor, double y-koor, int mode) linebreak
           La función cpdf_rlineto() dibuja una línea desde el punto actual al punto relativo con coordenadas
           (x-koor, y-koor).
           El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa el valor por
           defecto para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la
           unidad actual.
           Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().




                                                                                                                   267
ClibPDF

cpdf_rmoveto (PHP 3>= 3.0.9, PHP 4 )
         Define el punto actual

   void cpdf_rmoveto ( int pdf document, double x-koor, double y-koor, int mode) linebreak
         La función cpdf_rmoveto() pone el punto actual relativo a las coordenadas x-koor y y-koor.
         El último parámetro opciona determina la loingitud de la unidad. Si es 0 o se omite, la unidad por defecto
         será la especificada para la página. De otro modo las coordenadas se medirán en puntos postscript,
         despreciando la unidad en curso.
         Vea también cpdf_moveto().




cpdf_rotate_text (PHP 3>= 3.0.9, PHP 4 )
         Sets text rotation angle

   void cpdf_rotate_text ( int pdfdoc, float angle) linebreak


                                                                Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cpdf_rotate (PHP 3>= 3.0.8, PHP 4 )
         Define la rotación

   void cpdf_rotate ( int pdf document, double angle) linebreak
         La función cpdf_rotate() define la rotación en angle grados.




cpdf_save_to_file (PHP 3>= 3.0.8, PHP 4 )
         Escribe el documento PDF en un fichero

   void cpdf_save_to_file ( int pdf document, string filename) linebreak
         La función cpdf_save_to_file() guarda el documento PDF en un fichero si este documeto ha sido creado
         en memoria. Esta función no es necesaria si el documento PDF ha sido abierto mediante la
         especificación de un nombre de fichero en la función cpdf_open().




                                                                                                               268
ClibPDF

          Vea también cpdf_output_buffer(), cpdf_open().




cpdf_save (PHP 3>= 3.0.8, PHP 4 )
          Salva el entorno actual

   void cpdf_save ( int pdf document) linebreak
          La función cpdf_save() salva el entorno actual. Funciona como el comando gsave de postscript. Muy útil
          si se quiere trasladar o trotar un objeto sin afetar a los demás.
          Vea también cpdf_restore().




cpdf_scale (PHP 3>= 3.0.8, PHP 4 )
          Define la escala

   void cpdf_scale ( int pdf document, double x-scale, double y-scale) linebreak
          La función cpdf_scale() define el factor de escala en los dos sentidos.




cpdf_set_action_url (PHP 3>= 3.0.9, PHP 4 )
          Sets hyperlink

   void cpdf_set_action_url ( int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode]) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cpdf_set_char_spacing (PHP 3>= 3.0.8, PHP 4 )
          Determina el espacio entre caracteres

   void cpdf_set_char_spacing ( int pdf document, double space) linebreak
          LA función cpdf_set_char_spacing() define el espacio entre caracteres.




                                                                                                                   269
ClibPDF

          Vea también cpdf_set_word_spacing(), cpdf_set_leading().




cpdf_set_creator (PHP 3>= 3.0.8, PHP 4 )
          Define el campo creator en el documento PDF

   void cpdf_set_creator ( string creator) linebreak
          La función cpdf_set_creator() define el creador de un documento PDF.
          Vea también cpdf_set_subject(), cpdf_set_title(), cpdf_set_keywords().




cpdf_set_current_page (PHP 3>= 3.0.9, PHP 4 )
          Define la página actual

   void cpdf_set_current_page ( int pdf document, int page number) linebreak
          La función cpdf_set_current_page() define la página en la que se van a realizar todas las operaciones.
          Uno puede cambiar entre páginas a menos que una página ha sido finalizada con cpdf_finalize_page().
          Vea también cpdf_finalize_page().




cpdf_set_font_directories (PHP 4 >= 4.0.6)
          Sets directories to search when using external fonts

   void cpdf_set_font_directories ( int pdfdoc, string pfmdir, string pfbdir) linebreak


                                                                 Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cpdf_set_font_map_file (PHP 4 >= 4.0.6)
          Sets fontname to filename translation map when using external fonts

   void cpdf_set_font_map_file ( int pdfdoc, string filename) linebreak




                                                                                                             270
ClibPDF


                                                                 Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cpdf_set_font (PHP 3>= 3.0.8, PHP 4 )
          Selecciona la fuente y el tamaño actual

   void cpdf_set_font ( int pdf document, string font name, double size, string encoding) linebreak
          La función cpdf_set_font() define la fuente actual, el tamaño y la codificación. Actualmente solo son
          soportadas las fuentes estándar de postscript. El último parámetro encoding puede tomar los
          siguientes valores: "MacRomanEncoding", "MacExpertEncoding", "WinAnsiEncoding", y "NULL".
          "NULL" es para el cifrado incluído en la fuente. Para mas información vea el manual de ClibPDF,
          especialmente para cómo soportar las fuentes asiáticas.




cpdf_set_horiz_scaling (PHP 3>= 3.0.8, PHP 4 )
          Define la escala horizontal del texto

   void cpdf_set_horiz_scaling ( int pdf document, double scale) linebreak
          La función cpdf_set_horiz_scaling() define la escala horizontal al scale por ciento.




cpdf_set_keywords (PHP 3>= 3.0.8, PHP 4 )
          Pone el valor del campo ’keywords’(palabras clave) de un documento PDF

   void cpdf_set_keywords ( string keywords) linebreak
          La función cpdf_set_keywords() define las palabras clave de un documento PDF.
          Vea también cpdf_set_title(), cpdf_set_creator(), cpdf_set_subject().




cpdf_set_leading (PHP 3>= 3.0.8, PHP 4 )
          Define la distancias entre las líneas de texto

   void cpdf_set leading ( int pdf document, double distance) linebreak




                                                                                                            271
ClibPDF

          La función cpdf_set_leading() define la distancia entre las líneas de texto. Esto se usará si el texto es la
          salida de cpdf_continue_text().
          Vea también cpdf_continue_text().




cpdf_set_page_animation (PHP 3>= 3.0.9, PHP 4 )
          Define la separación entre páginas

   void cpdf_set_page_animation ( int pdf document, int transition, double duration) linebreak
          La función cpdf_set_page_animation() define la transición entre páginas que se siguen.
          El valor de transition puede ser

          0 para ninguno,
          1 para dos líneas que se barren a través de la pantalla, revelen la página,
          2 para múltiples líneas,
          3 para que una caja revele la página,
          4 para una única línea,
          5 para que la página naterior se disipe para revelar la pagina,
          6 para que el efecto de disolución se mueva de un extremop de la página al otro,
          7 para que la página antígua simplemente sea reemplazada por la nueva página (default)

          El valor de duration es el número de segundos entre las páginas que se pasan.




cpdf_set_subject (PHP 3>= 3.0.8, PHP 4 )
          Define el valor del campo subjet de un documento PDF

   void cpdf_set_subject ( string subject) linebreak
          La función cpdf_set_subject() define el asunto de un documento PDF
          Vea también cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords().




cpdf_set_text_matrix (PHP 3>= 3.0.8, PHP 4 )
          Define la matriz de texto

   void cpdf_set_text_matrix ( int pdf document, array matrix) linebreak
          La función cpdf_set_text_matrix() define una matriz que describe una transformación aplicada a la
          fuente actual de texto.




                                                                                                                  272
ClibPDF

cpdf_set_text_pos (PHP 3>= 3.0.8, PHP 4 )
          Define la posición del texto

   void cpdf_set_text_pos ( int pdf document, double x-koor, double y-koor, int mode) linebreak
          La función cpdf_set_text_pos() define la posición del texto para la siguiente llamada a cpdf_show().
          El último parámetro opcional mode determina la longitud de la unidad. Si es 0 o se omite, se usa el valor
          por defecto para la página. De otro modo, las coordenadas son medidas en puntos postscript,
          despreciando la unidad actual.
          Vea también cpdf_show(), cpdf_text().




cpdf_set_text_rendering (PHP 3>= 3.0.8, PHP 4 )
          Determina cómo es presentado el texto

   void cpdf_set_text_rendering ( int pdf document, int mode) linebreak
          La función cpdf_set_text_rendering() determina cómo es presentado el texto. Los posibles valores para
          mode son 0=llenar texto, 1=poner texto, 2=llenar y poner texto, 3=invisible, 4=llenar texto y añadirlo al
          camino de corte, 5=poner texto y añadirlo al camino de corte, 6=llenar y poner texto y añadirlo al camino
          de corte, 7=añadirlo al camino de corte




cpdf_set_text_rise (PHP 3>= 3.0.8, PHP 4 )
          Define la elevación del texto

   void cpdf_set_text_rise ( int pdf document, double value) linebreak
          La función cpdf_set_text_rise() define la elevación del texto a value unidades.




cpdf_set_title (PHP 3>= 3.0.8, PHP 4 )
          Define el campo title de un documento PDF

   void cpdf_set_title ( string title) linebreak
          La función cpdf_set_title() define el título de un documento PDF
          Vea también cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords().




                                                                                                                273
ClibPDF

cpdf_set_viewer_preferences (PHP 3>= 3.0.9, PHP 4 )
         How to show the document in the viewer

   void cpdf_set_viewer_preferences ( int pdfdoc, array preferences) linebreak


                                                               Aviso
                            Esta función no está documentada actualmente, solamente se encuentra
                            disponible la lista de parametros.




cpdf_set_word_spacing (PHP 3>= 3.0.8, PHP 4 )
         Define el espacio entre palabras

   void cpdf_set_word_spacing ( int pdf document, double space) linebreak
         La función cpdf_set_word_spacing() especifica el espacio entre palabras.
         Vea también cpdf_set_char_spacing(), cpdf_set_leading().




cpdf_setdash (PHP 3>= 3.0.8, PHP 4 )
         Defina el patrón de la raya

   void cpdf_setdash ( int pdf document, double white, double black) linebreak
         La función cpdf_setdash() define el patrón de la raya white unidades blancas y black unidades
         negras. Si los dos son 0 se pone una línea sólida.




cpdf_setflat (PHP 3>= 3.0.8, PHP 4 )
         Define la monotonía

   void cpdf_setflat ( int pdf document, double value) linebreak
         La función cpdf_setflat() pone la monotonía a un valor de entre 0 y 100.




                                                                                                        274
ClibPDF

cpdf_setgray_fill (PHP 3>= 3.0.8, PHP 4 )
         Pone el color de relleno al valor gris

   void cpdf_setgray_fill ( int pdf document, double value) linebreak
         La función cpdf_setgray_fill() define el valor de gris actual para rellelanr un camino.
         Vea también cpdf_setrgbcolor_fill().




cpdf_setgray_stroke (PHP 3>= 3.0.8, PHP 4 )
         Define el color para dibujar al valor gris

   void cpdf_setgray_stroke ( int pdf document, double gray value) linebreak
         La función cpdf_setgray_stroke() pone el color de dibujo actual al valor de gris dado.
         Vea también cpdf_setrgbcolor_stroke().




cpdf_setgray (PHP 3>= 3.0.8, PHP 4 )
         Pone el color de relleno y dibujo a gris

   void cpdf_setgray ( int pdf document, double gray value) linebreak
         La función cpdf_setgray_stroke() pone el color de relleno y dibujo al color gris dado.
         Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().




cpdf_setlinecap (PHP 3>= 3.0.8, PHP 4 )
         Define el parámetro linecap

   void cpdf_setlinecap ( int pdf document, int value) linebreak
         La función cpdf_setlinecap() define el parámetro linecap entre los valores 0 y 2. 0 = empalmar al final, 1
         = redondear, 2 = esquina proyectada




cpdf_setlinejoin (PHP 3>= 3.0.8, PHP 4 )
         Define el parámetro linejoin




                                                                                                             275
ClibPDF

    void cpdf_setlinejoin ( int pdf document, long value) linebreak
           La función cpdf_setlinejoin() define el parámetro entre un valor de 0 y 2. 0 = ingletes, 1 = redondear, 2
           = ángulo oblícuo




cpdf_setlinewidth (PHP 3>= 3.0.8, PHP 4 )
           Define la profundidad de la línea

    void cpdf_setlinewidth ( int pdf document, double width) linebreak
           La función cpdf_setlinewidth() define la preofundidad de la línea a width.




cpdf_setmiterlimit (PHP 3>= 3.0.8, PHP 4 )
           Define el límite del inglete

    void cpdf_setmiterlimit ( int pdf document, double value) linebreak
           La función cpdf_setmiterlimit() define el límite del inglete a un valor mayor o igual a 1.




cpdf_setrgbcolor_fill (PHP 3>= 3.0.8, PHP 4 )
           Pone el color de relleno a l valor de clor rgb

     void cpdf_setrgbcolor_fill ( int pdf document, double red value, double green value, double blue value) line-
break
           La función cpdf_setrgbcolor_fill() pone el color rgb actual para rellenar un camino.
           Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor().




cpdf_setrgbcolor_stroke (PHP 3>= 3.0.8, PHP 4 )
           Pone el color de dibujo al valor de color rgb

     void cpdf_setrgbcolor_stroke ( int pdf document, double red value, double green value, double blue value)
linebreak
           La función cpdf_setrgbcolor_stroke() pone el color de dibujo actual al valor de color rgb dado.
           Vea también cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().




                                                                                                                276
ClibPDF

cpdf_setrgbcolor (PHP 3>= 3.0.8, PHP 4 )
         Pone el color de relleno y dibujo al valor de color rgb

   void cpdf_setrgbcolor ( int pdf document, double red value, double green value, double blue value) linebreak
         La función cpdf_setrgbcolor_stroke() pone el color de relleno y dibujo actual al color rgb dado.
         Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().




cpdf_show_xy (PHP 3>= 3.0.8, PHP 4 )
         Muestra texto en la posición

   void cpdf_show_xy ( int pdf document, string text, double x-koor, double y-koor, int mode) linebreak
         La función cpdf_show_xy() muestra la cadena text en la posición con coordenadas (x-coor,
         y-coor). El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la
         unidad por defecto especificada para la página. De otro modo las coordenadas son medidas en puntos
         postscript, despreciando la unidad actual.

              Nota: La función cpdf_show_xy() es idéntica a cpdf_text() sin el parámetro opcional.




         Vea también cpdf_text().




cpdf_show (PHP 3>= 3.0.8, PHP 4 )
         Muestra el texto en la posición actual

   void cpdf_show ( int pdf document, string text) linebreak
         La función cpdf_show() muestra la cadena text en la posixción actual.
         Vea también cpdf_text(), cpdf_begin_text(), cpdf_end_text().




cpdf_stringwidth (PHP 3>= 3.0.8, PHP 4 )
         Devuelve la anchura del texto en la fuente actual

   double cpdf_stringwidth ( int pdf document, string text) linebreak
         La función cpdf_stringwidth() devuelve la anchura de la cadena text. Requiere haber definido antes
         una fuente.



                                                                                                                277
ClibPDF

           Vea también cpdf_set_font().




cpdf_stroke (PHP 3>= 3.0.8, PHP 4 )
           Dibuja una línea a lo largo del camino

    void cpdf_stroke ( int pdf document) linebreak
           La función cpdf_stroke() dibuja una línea a lo largo del camino actual.
           Vea también cpdf_closepath(), cpdf_closepath_stroke().




cpdf_text (PHP 3>= 3.0.8, PHP 4 )
           Muestra texto conparámetros

     void cpdf_text ( int pdf document, string text, double x-koor, double y-koor, int mode, double orientation, int
alignmode) linebreak
           La función cpdf_text() muestra la cadena text en la posición de coordenadas (x-coor, y-coor). El
           parámero opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la unidad por defecto
           especificada para la página. De otro modo las coordenadas son medidas en puntos postscript
           despreciando la unidad actual. El parámetro opcional orientation es la rotación del texto en grados.
           El parámetro opcional alignmode determina cómo está alineado el texto. Vea la documentación de
           ClibPDF para los posibles valores.
           Vea también cpdf_show_xy().




cpdf_translate (PHP 3>= 3.0.8, PHP 4 )
           Define el sistema de origen de coordenadas

    void cpdf_translate ( int pdf document, double x-koor, double y-koor, int mode) linebreak
           La función cpdf_translate() define el sistema origen de coordenadas en el punto (x-coor, y-coor).
           El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la unidad por
           defecto especificada en la página. De otro modo las coordenadas son medidas en puntos postscript,
           depreciando la unidad actual.




                                                                                                                 278
XI. Crack functions

Introducción
     These functions allow you to use the CrackLib library to test the ’strength’ of a password. The ’strength’
     of a password is tested by that checks length, use of upper and lower case and checked against the
     specified CrackLib dictionary. CrackLib will also give helpful diagnostic messages that will help
     ’strengthen’ the password.




Requerimientos
     More information regarding CrackLib along with the library can be found at
     http://www.users.dircon.co.uk/~crypto/.




Instalación
     In order to use these functions, you must compile PHP with Crack support by using the
     --with-crack[=DIR] option.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión no define ningún tipo de recurso.




Constantes predefinidas
     Esta extensión no define ninguna constante.




Ejemplos
     This example shows how to open a CrackLib dictionary, test a given password, retrieve any diagnostic




                                                                                                           279
Crack functions

messages, and close the dictionary.


Ejemplo 1. CrackLib example


<?php
// Open CrackLib Dictionary
$dictionary = crack_opendict(’/usr/local/lib/pw_dict’)
      or die(’Unable to open CrackLib dictionary’);

// Perform password check
$check = crack_check($dictionary, ’gx9A2s0x’);

// Retrieve messages
$diag = crack_getlastmessage();
echo $diag; // ’strong password’

// Close dictionary
crack_closedict($dictionary);
?>




     Nota: If crack_check() returns TRUE, crack_getlastmessage() will return ’strong password’.




                                                                                                    280
Crack functions

crack_check (PHP 4 >= 4.0.5)
          Performs an obscure check with the given password

   bool crack_check ( [resource dictionary, string password]) linebreak
          Returns TRUE if password is strong, or FALSE otherwise.


                                                          Aviso
                     Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                     funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                     cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                     módulo es tu responsabiliad.


          crack_check() performs an obscure check with the given password on the specified dictionary .
          If dictionary is not specified, the last opened dictionary is used.




crack_closedict (PHP 4 >= 4.0.5)
          Closes an open CrackLib dictionary

   bool crack_closedict ( [resource dictionary]) linebreak
          Devuelve TRUE si todo fue bien, FALSE en caso de fallo.


                                                          Aviso
                     Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                     funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                     cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                     módulo es tu responsabiliad.


          crack_closedict() closes the specified dictionary identifier. If dictionary is not specified, the
          current dictionary is closed.




crack_getlastmessage (PHP 4 >= 4.0.5)
          Returns the message from the last obscure check

   string crack_getlastmessage ( void) linebreak




                                                                                                          281
Crack functions


                                                           Aviso
                     Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                     funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                     cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                     módulo es tu responsabiliad.


         crack_getlastmessage() returns the message from the last obscure check.




crack_opendict (PHP 4 >= 4.0.5)
         Opens a new CrackLib dictionary

   resource crack_opendict ( string dictionary) linebreak
         Returns a dictionary resource identifier on success, or FALSE on failure.


                                                           Aviso
                     Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                     funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                     cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                     módulo es tu responsabiliad.


         crack_opendict() opens the specified CrackLib dictionary for use with crack_check().

              Nota: Only one dictionary may be open at a time.



         See also: crack_check(), and crack_closedict().




                                                                                                          282
XII. CURL, Client URL Library Functions
    PHP supports libcurl, a library, created by Daniel Stenberg, that allows you to connect and communicate
    to many different types of servers with many different types of protocols. libcurl currently supports the
    http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates,
    HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP’s ftp extension), HTTP form
    based upload, proxies, cookies and user+password authentication.
    In order to use the CURL functions you need to install the CURL (http://curl.haxx.se/) package. PHP
    requires that you use CURL 7.0.2-beta or higher. PHP will not work with any version of CURL below
    version 7.0.2-beta.
    To use PHP’s CURL support you must also compile PHP --with-curl[=DIR] where DIR is the
    location of the directory containing the lib and include directories. In the "include" directory there should
    be a folder named "curl" which should contain the easy.h and curl.h files. There should be a file named
    "libcurl.a" located in the "lib" directory.
    These functions have been added in PHP 4.0.2.
    Once you’ve compiled PHP with CURL support, you can begin using the curl functions. The basic idea
    behind the CURL functions is that you initialize a CURL session using the curl_init(), then you can set
    all your options for the transfer via the curl_exec() and then you finish off your session using the
    curl_close(). Here is an example that uses the CURL functions to fetch the PHP homepage into a file:

    Ejemplo 1. Using PHP’s CURL module to fetch the PHP homepage

    <?php

    $ch = curl_init ("http://www.php.net/");
    $fp = fopen ("php_homepage.txt", "w");

    curl_setopt ($ch, CURLOPT_INFILE, $fp);
    curl_setopt ($ch, CURLOPT_HEADER, 0);

    curl_exec ($ch);
    curl_close ($ch);
    fclose ($fp);
    ?>




                                                                                                             283
CURL

curl_close (PHP 4 >= 4.0.2)
          Close a CURL session

   void curl_close ( int ch) linebreak
          This functions closes a CURL session and frees all ressources. The CURL handle, ch, is also deleted.




curl_errno (PHP 4 >= 4.0.3)
          Return an integer containing the last error number

   int curl_errno ( resource ch) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




curl_error (PHP 4 >= 4.0.3)
          Return a string containing the last error for the current session

   string curl_error ( resource ch) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




curl_exec (PHP 4 >= 4.0.2)
          Perform a CURL session

   bool curl_exec ( int ch) linebreak
          This function is should be called after you initialize a CURL session and all the options for the session
          are set. Its purpose is simply to execute the predefined CURL session (given by the ch).




                                                                                                                 284
CURL

curl_getinfo (PHP 4 >= 4.0.4)
          Get information regarding a specific transfer

   string curl_getinfo ( resource ch, int opt) linebreak


                                                                 Aviso
                               Esta función no está documentada actualmente, solamente se encuentra
                               disponible la lista de parametros.




curl_init (PHP 4 >= 4.0.2)
          Initialize a CURL session

   int curl_init ( [string url]) linebreak
          The curl_init() will initialize a new session and return a CURL handle for use with the curl_setopt(),
          curl_exec(), and curl_close() functions. If the optional url parameter is supplied then the
          CURLOPT_URL option will be set to the value of the parameter. You can manually set this using the
          curl_setopt() function.

          Ejemplo 1. Initializing a new CURL session and fetching a webpage

          <?php
          $ch = curl_init();

          curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
          curl_setopt ($ch, CURLOPT_HEADER, 0);

          curl_exec ($ch);

          curl_close ($ch);
          ?>




          See also: curl_close(), curl_setopt()




curl_setopt (PHP 4 >= 4.0.2)
          Set an option for a CURL transfer




                                                                                                               285
CURL

bool curl_setopt ( int ch, string option, mixed value) linebreak
       The curl_setopt() function will set options for a CURL session identified by the ch parameter. The
       option parameter is the option you want to set, and the value is the value of the option given by the
       option.
       The value should be a long for the following options (specified in the option parameter):

       •    CURLOPT_INFILESIZE: When you are uploading a file to a remote site, this option should be used
           to tell PHP what the expected size of the infile will be.
       •    CURLOPT_VERBOSE: Set this option to a non-zero value if you want CURL to report everything that
           is happening.
       •   CURLOPT_HEADER: Set this option to a non-zero value if you want the header to be included in the
           output.
       •    CURLOPT_NOPROGRESS: Set this option to a non-zero value if you don’t want PHP to display a
           progress meter for CURL transfers

             Nota: PHP automatically sets this option to a non-zero parameter, this should only be changed for
               debugging purposes.




       •   CURLOPT_NOBODY: Set this option to a non-zero value if you don’t want the body included with the
           output.
       •    CURLOPT_FAILONERROR: Set this option to a non-zero value if you want PHP to fail silently if the
           HTTP code returned is greater than 300. The default behaviour is to return the page normally, ignoring
           the code.
       •   CURLOPT_UPLOAD: Set this option to a non-zero value if you want PHP to prepare for an upload.
       •    CURLOPT_POST: Set this option to a non-zero value if you want PHP to do a regular HTTP POST.
           This POST is a normal application/x-www-from-urlencoded kind, most commonly used by HTML
           forms.
       •    CURLOPT_FTPLISTONLY: Set this option to a non-zero value and PHP will just list the names of
           an FTP directory.
       •    CURLOPT_FTPAPPEND: Set this option to a non-zero value and PHP will append to the remote file
           instead of overwriting it.
       •    CURLOPT_NETRC: Set this option to a non-zero value and PHP will scan your ~./netrc file to find
           your username and password for the remote site that you’re establishing a connection with.
       •    CURLOPT_FOLLOWLOCATION : Set this option to a non-zero value to follow any "Location: "
           header that the server sends as a part of the HTTP header (note this is recursive, PHP will follow as
           many "Location: " headers that it is sent.)
       •   CURLOPT_PUT: Set this option a non-zero value to HTTP PUT a file. The file to PUT must be set
           with the CURLOPT_INFILE and CURLOPT_INFILESIZE.
       •    CURLOPT_MUTE: Set this option to a non-zero value and PHP will be completely silent with regards
           to the CURL functions.




                                                                                                               286
CURL

•   CURLOPT_TIMEOUT: Pass a long as a parameter that contains the maximum time, in seconds, that
    you’ll allow the curl functions to take.
•    CURLOPT_LOW_SPEED_LIMIT: Pass a long as a parameter that contains the transfer speed in
    bytes per second that the transfer should be below during CURLOPT_LOW_SPEED_TIME seconds
    for PHP to consider it too slow and abort.
•    CURLOPT_LOW_SPEED_TIME: Pass a long as a parameter that contains the time in seconds that the
    transfer should be below the CURLOPT_LOW_SPEED_LIMIT for PHP to consider it too slow and
    abort.
•   CURLOPT_RESUME_FROM : Pass a long as a parameter that contains the offset, in bytes, that you
    want the transfer to start from.
•   CURLOPT_SSLVERSION : Pass a long as a parameter that contains the SSL version (2 or 3) to use.
    By default PHP will try and determine this by itself, although, in some cases you must set this
    manually.
•   CURLOPT_TIMECONDITION : Pass a long as a parameter that defines how the
    CURLOPT_TIMEVALUE is treated. You can set this parameter to TIMECOND_IFMODSINCE or
    TIMECOND_ISUNMODSINCE. This is a HTTP-only feature.
•    CURLOPT_TIMEVALUE: Pass a long as a parameter that is the time in seconds since January 1st,
    1970. The time will be used as specified by the CURLOPT_TIMEVALUE option, or by default the
    TIMECOND_IFMODSINCE will be used.


The value parameter should be a string for the following values of the option parameter:

•    CURLOPT_URL: This is the URL that you want PHP to fetch. You can also set this option when
    initializing a session with the curl_init() function.
•    CURLOPT_USERPWD: Pass a string formatted in the [username]:[password] manner, for PHP to use
    for the connection. connection.
•    CURLOPT_PROXYUSERPWD: Pass a string formatted in the [username]:[password] format for
    connection to the HTTP proxy.
•   CURLOPT_RANGE: Pass the specified range you want. It should be in the "X-Y" format, where X or
    Y may be left out. The HTTP transfers also support several intervals, seperated with commas as in
    X-Y,N-M.
•    CURLOPT_POSTFIELDS: Pass a string containing the full data to post in an HTTP "POST"
    operation.
•   CURLOPT_REFERER: Pass a string containing the "referer" header to be used in an HTTP request.
•    CURLOPT_USERAGENT: Pass a string containing the "user-agent" header to be used in an HTTP
    request.
•    CURLOPT_FTPPORT: Pass a string containing the which will be used to get the IP address to use for
    the ftp "PORT" instruction. The POST instruction tells the remote server to connect to our specified IP
    address. The string may be a plain IP address, a hostname, a network interface name (under UNIX), or
    just a plain ’-’ to use the systems default IP address.
•   CURLOPT_COOKIE: Pass a string containing the content of the cookie to be set in the HTTP header.




                                                                                                      287
CURL

          •   CURLOPT_SSLCERT: Pass a string containing the filename of PEM formatted certificate.
          •   CURLOPT_SSLCERTPASSWD: Pass a string containing the password required to use the
              CURLOPT_SSLCERT certificate.
          •   CURLOPT_COOKIEFILE: Pass a string containing the name of the file containing the cookiee data.
              The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file.
          •   CURLOPT_CUSTOMREQUEST: Pass a string to be used instead of GET or HEAD when doing an
              HTTP request. This is useful for doing DELETE or another, more obscure, HTTP request.

                Nota: Don’t do this without making sure your server supports the command first.




          The following options expect a file descriptor that is obtained by using the fopen() function:

          •   CURLOPT_FILE: The file where the output of your transfer should be placed, the default is
              STDOUT.
          •   CURLOPT_INFILE: The file where the input of your transfer comes from.
          •   CURLOPT_WRITEHEADER: The file to write the header part of the output into.
          •   CURLOPT_STDERR: The file to write errors to instead of stderr.




curl_version (PHP 4 >= 4.0.2)
          Return the current CURL version

   string curl_version ( void) linebreak
          The curl_version() function returns a string containing the current CURL version.




                                                                                                           288
XIII. Funciones de pago electrónico
    Estas funciones solo están disponibles si el intérprete ha sido compilado con
    --with-cybercash=[DIR]. Estas funciones han sido añadidas en PHP4.




                                                                                    289
Cybercash

cybercash_base64_decode (PHP 4 )

  string cybercash_base64_decode ( string inbuff) linebreak




cybercash_base64_encode (PHP 4 )
         ???

  string cybercash_base64_encode ( string inbuff) linebreak




cybercash_decr (PHP 4 )
         ???

  array cybercash_decr ( string wmk, string sk, string inbuff) linebreak
         La función devuelve un array asociativo con los elementos "errcode" y, si "errcode" es FALSE, "outbuff"
         (string), "outLth" (long) y "macbuff" (string).




cybercash_encr (PHP 4 )
         ???

  array cybercash_encr ( string wmk, string sk, string inbuff) linebreak
         La función devuelve un array asociativo con los elementos "errcode" y, si "errcode" es FALSE, "outbuff"
         (string), "outLth" (long) y "macbuff" (string).




                                                                                                             290
XIV. Crédit Mutuel CyberMUT functions

Introducción
     This extension allows you to process credit cards transactions using Crédit Mutuel CyberMUT system
     (http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html).
     CyberMUT is a popular Web Payment Service in France, provided by the Crédit Mutuel bank. If you are
     foreign in France, these functions will not be useful for you.
     The use of these functions is almost identical to the original SDK functions, except for the parameters of
     return for cybermut_creerformulairecm() and cybermut_creerreponsecm(), which are returned directly
     by functions PHP, whereas they had passed in reference in the original functions.
     These functions have been added in PHP 4.0.6.

          Nota: These functions only provide a link to CyberMUT SDK. Be sure to read the CyberMUT
          Developers Guide for full details of the required parameters.




Instalación
     These functions are only available if PHP has been compiled with the --with-cybermut[=DIR]
     option, where DIR is the location of libcm-mac.a and cm-mac.h. You will require the appropriate
     SDK for your platform, which may be sent to you after your CyberMUT’s subscription (contact them via
     Web, or go to the nearest Crédit Mutuel).




                                                                                                           291
CyberMUT

cybermut_creerformulairecm (PHP 4 >= 4.0.5)
           Generate HTML form of request for payment

     string cybermut_creerformulairecm ( string url_CM, string version, string TPE, string montant, string ref_commande,
string texte_libre, string url_retour, string url_retour_ok, string url_retour_err, string langue, string code_societe,
string texte_bouton) linebreak
           cybermut_creerformulairecm() is used to generate the HTML form of request for payment.

           Ejemplo 1. First step of payment (equiv cgi1.c)


           <?php
           // Directory where the keys are located
           putenv("CMKEYDIR=/var/creditmut/cles");

           // Version number
           $VERSION="1.2";

                $retour = cybermut_creerformulairecm(
                "https://www.creditmutuel.fr/test/telepaiement/paiement.cgi",
                $VERSION,
                "1234567890",
                "300FRF",
                $REFERENCE,
                $TEXTE_LIBRE,
                $URL_RETOUR,
                $URL_RETOUR_OK,
                $URL_RETOUR_ERR,
                "francais",
                "company",
                "Paiement par carte bancaire");

                echo $retour;
           ?>




           See also cybermut_testmac() and cybermut_creerreponsecm().




cybermut_creerreponsecm (PHP 4 >= 4.0.5)
           Generate the acknowledgement of delivery of the confirmation of payment

    string cybermut_creerreponsecm ( string phrase) linebreak
           cybermut_creerreponsecm() returns a string containing delivery acknowledgement message.




                                                                                                              292
CyberMUT

           The parameter is "OK" if the message of confirmation of the payment was correctly identified by
           cybermut_testmac(). Any other chain is regarded as an error message.
           See also cybermut_creerformulairecm() and cybermut_testmac().




cybermut_testmac (PHP 4 >= 4.0.5)
           Make sure that there no was data diddling contained in the received message of confirmation

     bool cybermut_testmac ( string code_MAC, string version, string TPE, string cdate, string montant, string
ref_commande, string texte_libre, string code-retour) linebreak
           cybermut_testmac() is used to make sure that there was not data diddling contained in the received
           message of confirmation. Pay attention to parameters code-retour and texte-libre, which
           cannot be evaluated as is, because of the dash. You must retrieve them by using:


           <?php
              $code_retour = $_GET["code-retour"];
              $texte_libre = $_GET["texte-libre"];
           ?>




           Ejemplo 1. Last step of payment (equiv cgi2.c)


           <?php
           // Make sure that Enable Track Vars is ON.
           // Directory where are located the keys
           putenv("CMKEYDIR=/var/creditmut/cles");

           // Version number
           $VERSION="1.2";

           $texte_libre = $_GET["texte-libre"];
           $code_retour = $_GET["code-retour"];

           $mac_ok = cybermut_testmac($MAC,$VERSION,$TPE,$date,$montant,$reference,$texte_libre,$code_r

           if ($mac_ok) {

             //
             // insert data processing here
             //
             //

             $result=cybermut_creerreponsecm("OK");




                                                                                                                293
CyberMUT

} else {
  $result=cybermut_creerreponsecm("Document Falsifie");
}

?>




See also cybermut_creerformulairecm() and cybermut_creerreponsecm().




                                                                            294
XV. Cyrus IMAP administration functions

Introducción

                                                               Aviso
                           Esta función no está documentada actualmente, solamente se encuentra
                           disponible la lista de parametros.




Constantes predefinidas
         Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión
         ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución.

CYRUS_CONN_NONSYNCLITERAL (integer)



CYRUS_CONN_INITIALRESPONSE (integer)



CYRUS_CALLBACK_NUMBERED (integer)



CYRUS_CALLBACK_NOLITERAL (integer)




                                                                                                             295
Cyradm functions

cyrus_authenticate (PHP 4 >= 4.1.0)
            Authenticate against a Cyrus IMAP server

    bool cyrus_authenticate ( resource connection [, string mechlist [, string service [, string user [, int minssf [, int
maxssf]]]]]) linebreak


                                                                     Aviso
                                Esta función no está documentada actualmente, solamente se encuentra
                                disponible la lista de parametros.




cyrus_bind (PHP 4 >= 4.1.0)
            Bind callbacks to a Cyrus IMAP connection

     bool cyrus_bind ( resource connection, array callbacks) linebreak


                                                                     Aviso
                                Esta función no está documentada actualmente, solamente se encuentra
                                disponible la lista de parametros.




cyrus_close (PHP 4 >= 4.1.0)
            Close connection to a Cyrus IMAP server

     bool cyrus_close ( resource connection) linebreak


                                                                     Aviso
                                Esta función no está documentada actualmente, solamente se encuentra
                                disponible la lista de parametros.




                                                                                                                      296
Cyradm functions

cyrus_connect (PHP 4 >= 4.1.0)
          Connect to a Cyrus IMAP server

   resource cyrus_connect ( [string host [, string port [, int flags]]]) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cyrus_query (PHP 4 >= 4.1.0)
          Send a query to a Cyrus IMAP server

   bool cyrus_query ( resource connection, string query) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




cyrus_unbind (PHP 4 >= 4.1.0)
          Unbind ...

   bool cyrus_unbind ( resource connection, string trigger_name) linebreak


                                                                   Aviso
                             Esta función no está documentada actualmente, solamente se encuentra
                             disponible la lista de parametros.




                                                                                                         297
XVI. Character type functions

Introducción
     The functions provided by this extension check whether a character or string falls into a certain character
     class according to the current locale (see also setlocale()).
     When called with an integer argument these functions behave exactly like their C counterparts from
     "ctype.h".
     When called with a string argument they will check every character in the string and will only return
     TRUE if every character in the string matches the requested criteria.

     Passing anything else but a string or integer will return FALSE immediately.




Requerimientos
     None besides functions from the standard C library which are always available.




Instalación
     Beginning with PHP 4.2.0 these functions are enabled by default. For older versions you have to
     configure and compile PHP with --enable-ctype.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     Esta extensión no define ningún tipo de recurso.




Constantes predefinidas
     Esta extensión no define ninguna constante.




                                                                                                             298
ctype

ctype_alnum (PHP 4 >= 4.0.4)
          Check for alphanumeric character(s)

   bool ctype_alnum ( string text) linebreak
          Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. In the standard C
          locale letters are just [A-Za-z]. The function is equivalent to (ctype_alpha($text) ||
          ctype_digit($text)).

          See also ctype_alpha(), ctype_digit(), and setlocale().




ctype_alpha (PHP 4 >= 4.0.4)
          Check for alphabetic character(s)

   bool ctype_alpha ( string text) linebreak
          Returns TRUE if every character in text is a letter from the current locale, FALSE otherwise. In the
          standard C locale letters are just [A-Za-z] and ctype_alpha() is equivalent to (ctype_upper($text)
          || ctype_lower($text)), but other languages have letters that are considered neither upper nor
          lower case.
          See also ctype_upper(), ctype_lower(), and setlocale().




ctype_cntrl (PHP 4 >= 4.0.4)
          Check for control character(s)

   bool ctype_cntrl ( string text) linebreak
          Returns TRUE if every character in text has a special control function, FALSE otherwise. Control
          characters are e.g. line feed, tab, esc.




ctype_digit (PHP 4 >= 4.0.4)
          Check for numeric character(s)

   bool ctype_digit ( string text) linebreak
          Returns TRUE if every character in text is a decimal digit, FALSE otherwise.
          See also ctype_alnum() and ctype_xdigit().




                                                                                                                 299
ctype

ctype_graph (PHP 4 >= 4.0.4)
          Check for any printable character(s) except space

   bool ctype_graph ( string text) linebreak
          Returns TRUE if every character in text is printable and actually creates visible output (no white space),
          FALSE otherwise.
          See also ctype_alnum(), ctype_print(), and ctype_punct().




ctype_lower (PHP 4 >= 4.0.4)
          Check for lowercase character(s)

   bool ctype_lower ( string text) linebreak
          Returns TRUE if every character in text is a lowercase letter in the current locale.
          See also ctype_alpha() and ctype_upper().




ctype_print (PHP 4 >= 4.0.4)
          Check for printable character(s)

   bool ctype_print ( string text) linebreak
          Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if
          text contains control characters or characters that do not have any output or control function at all.
          See also ctype_cntrl(), ctype_graph(), and ctype_punct().




ctype_punct (PHP 4 >= 4.0.4)
          Check for any printable character which is not whitespace or an alphanumeric character

   bool ctype_punct ( string text) linebreak
          Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.
          See also ctype_cntrl(), ctype_graph(), and ctype_punct().




                                                                                                                 300
ctype

ctype_space (PHP 4 >= 4.0.4)
          Check for whitespace character(s)

   bool ctype_space ( string text) linebreak
          Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the
          blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.




ctype_upper (PHP 4 >= 4.0.4)
          Check for uppercase character(s)

   bool ctype_upper ( string text) linebreak
          Returns TRUE if every character in text is a uppercase letter in the current locale.
          See also ctype_alpha() and ctype_lower().




ctype_xdigit (PHP 4 >= 4.0.4)
          Check for character(s) representing a hexadecimal digit

   bool ctype_xdigit ( string text) linebreak
          Returns TRUE if every character in text is a hexadecimal ’digit’, that is a decimal digit or a character
          from [A-Fa-f] , FALSE otherwise.
          See also ctype_digit().




                                                                                                                 301
XVII. Funciones de la capa de abstraccion de
bases de datos (dbm-style)
    Estas funciones son la base para el acceso a bases de datos del estilo Berkeley DB.
    Este es un nivel de abstraccion general para varias bases de datos. Como tal su funcionalidad esta
    limitada a un grupo de modernas bases de datos como Sleepycat Software’s DB2 (). (Esta no debe
    confundirse con IBM DB2 software, la cual es soportada mediante las funciones ODBC.)
    El comportamiento de varios aspectos depende de la implementacion de la base de datos. Funciones
    como dba_optimize() y dba_sync() cumpliran su funcionalidad con unas bases de datos pero no con
    otras.
    Los siguientes manejadores (handlers) estan soportados:

    •    dbm es el mas antiguo (original) tipo de base de datos de la familia de Berkeley DB. Se debe evitar su
        uso, si es posible. Nosotros no soportamos las funciones de compatibilidad de DB2 y gdbm, porque
        ellas solo son compatibles a nivel de codigo fuente, pero no pueden manejar el formato original dbm.
    •    ndbm es un tipo mas nuevo y mas flexible que dbm. Todavia tiene la mayoria de las limitaciones de
        dbm (Por lo tanto es descartado).
    •   gdbm es el gestor de bases de datos de GNU (database manager) ().
    •    db2 es Sleepycat Software’s DB2 (). Es descrito como "un conjunto de herramientas de programacion
        que proveen acceso de alto nivel a bases de datos en aplicaciones standalone o en el modelo
        cliente/servidor. "
    •    cdb es "una rapida, de confianza, sencilla herramienta para la creacion y lectura de bases de datos
        constantes." Fue creada por el autor de qmail y puede encontrarse en here (). Como la base es
        constante solo se soportan las operaciones de lectura.




    Ejemplo 1. Ejemplo de DBA

    <?php

    $id = dba_open("/tmp/test.db", "n", "db2");

    if(!$id) {
        echo "dba_open failedn";
        exit;
    }

    dba_replace("key", "This is an example!", $id);

    if(dba_exists("key", $id)) {
        echo dba_fetch("key", $id);
        dba_delete("key", $id);
    }

    dba_close($id);




                                                                                                              302
dba

?>



DBA es "binary safe" y no tiene ningun limite arbitrario. Hereda todas sus limitaciones de la
implementacion de base de datos que tenga.
Todos las bases de datos basadas en ficheros deben proveer un mecanismo para establecer el modo a la
hora de crear nuevas bases de datos, si ello es posible. Habitualmente este modo es pasado como el
cuarto argumento en dba_open() o en dba_popen().
Se puede acceder a todas las entradas de una base de datos de modo secuencial (lineal) usando las
funciones dba_firstkey() y dba_nextkey(). No se puede cambiar la base de datos mientras se recorre
(traversing) por ella.


Ejemplo 2. Recorriendo una base de datos

<?php

# ...open database...

$key = dba_firstkey($id);

while($key != false) {
    if(...) { # remember the key to perform some action later
        $handle_later[] = $key;
    }
    $key = dba_nextkey($id);
}

for($i = 0; $i < count($handle_later); $i++)
    dba_delete($handle_later[$i], $id);

?>




                                                                                                    303
dba

dba_close (PHP 3>= 3.0.8, PHP 4 )
          Cerrar uba base de datos

   void dba_close ( int handle) linebreak
          dba_close() cierra la conexion con una base de datos previamente abierta y libera todos los recursos
          especificados por handle.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_close() no devuelve ningun valor.
          Ver tambien: dba_open() dba_popen()




dba_delete (PHP 3>= 3.0.8, PHP 4 )
          Borra una entrada especificada por la clave key

   bool dba_delete ( string key, int handle) linebreak
          dba_delete() borra la entrada especificada por key de la base de datos especificada por handle.
          key es la clave de la entrada que es borrada.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_delete() devuelve TRUE o FALSE, si la entrada es borrada o no, respectivamente.
          Ver tambien: dba_exists() dba_fetch() dba_insert() dba_replace()




dba_exists (PHP 3>= 3.0.8, PHP 4 )
          Comprueba si la clave key existe

   bool dba_exists ( string key, int handle) linebreak
          dba_exists() comprueba si la clave key existe en la base de datos especificada por handle.
          key es la clave para la que se realiza la comprobacion.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_exists() devuelve TRUE o FALSE, si la clave es hallada o no, respectivamente.
          Ver tambien: dba_fetch() dba_delete() dba_insert() dba_replace()




                                                                                                                 304
dba

dba_fetch (PHP 3>= 3.0.8, PHP 4 )
          Extrae los datos especificados por la clave key

   string dba_fetch ( string key, int handle) linebreak
          dba_fetch() extrae los datos especificados por la clave key de la base de datos determinada por
          handle.
          key es la clave de la entrada de los datos que queremos extraer.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_fetch() devuelve la cadena asociada o FALSE, si el par key/data es hallado o no, respectivamente.
          Ver tambien: dba_exists() dba_delete() dba_insert() dba_replace()




dba_firstkey (PHP 3>= 3.0.8, PHP 4 )
          Conseguir la primera clave

   string dba_firstkey ( int handle) linebreak
          dba_firstkey() devuelve la primera clave de la base de datos especificada por handle y resetea el
          puntero interno de claves. Esto permite una busqueda lineal por toda la base de datos.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_firstkey() devuelve la clave o FALSE en funcion de si tiene exito o falla, respectivamente.
          Ver tambien: dba_nextkey()




dba_insert (PHP 3>= 3.0.8, PHP 4 )
          Insertar una entrada

   bool dba_insert ( string key, string value, int handle) linebreak
          dba_insert() inserta la entrada descrita con key y value dentro de la base de datos especificada por
          handle. Fallara si ya existe una entrada con el mismo parametro key.
          key es la clave de la entrada a ser insertada.
          value es el valor a ser insertado.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_insert() devuelve TRUE o FALSE, en funcion de si tiene exito o falla, respectivamente.
          Ver tambien: dba_exists() dba_delete() dba_fetch() dba_replace()




                                                                                                              305
dba

dba_nextkey (PHP 3>= 3.0.8, PHP 4 )
          Extraer la siguiente clave

   string dba_nextkey ( int handle) linebreak
          dba_nextkey() devuelve la siguiente clave de la base de datos especificada por handle e incrementa el
          puntero de claves interno.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_nextkey() devuelve la clave o FALSE dependiendo de si tiene exito o falla, respectivamente.
          Ver tambien: dba_firstkey()




dba_open (PHP 3>= 3.0.8, PHP 4 )
          Abrir una base de datos

   int dba_open ( string path, string mode, string handler [, ...]) linebreak
          dba_open() establece una instancia para path con mode usando handler.
          path normalmente es el "path" en el sistema de ficheros.
          mode es "r" para acceso de lectura, "w" para lectura/escritura de una base de datos ya existente, "c" para
          lectura/escritura y creacion de una base datos si esta no existe, y "n" para crear, truncar y
          lectura/escritura.
          handler es el nombre de el manejador (handler) que sera usado para el acceso al path. Es pasado
          como un parametro opcional a dba_open() y puede usarse en lugar de ella.
          dba_open() devuelve un valor positivo de handler o FALSE, en el caso de que la apertura de la base de
          datos se realice o si falla, respectivamente.
          Ver tambien: dba_popen() dba_close()




dba_optimize (PHP 3>= 3.0.8, PHP 4 )
          Optimiza la base de datos

   bool dba_optimize ( int handle) linebreak
          dba_optimize() optimiza la base de datos especificada por handle.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_optimize() devuelve TRUE o FALSE, si la optimizacion tiene exito o falla, respectivamente.
          Ver tambien: dba_sync()




                                                                                                                306
dba

dba_popen (PHP 3>= 3.0.8, PHP 4 )
          Apertura persistente de una base de datos

   int dba_popen ( string path, string mode, string handler [, ...]) linebreak
          dba_popen() establece una instancia persistente para path con mode usando handler.
          path normalmente es el "path" en el sistema de ficheros.
          mode es "r" para acceso de lectura, "w" para lectura/escritura de una base de datos ya existente, "c" para
          lectura/escritura y creacion de una base datos si esta no existe, y "n" para crear, truncar y
          lectura/escritura.
          handler es el nombre del manejador (handler) que sera usado para el acceso al path. Es pasado como
          un parametro opcional a dba_popen() y puede usarse en lugar de ella.
          dba_popen() devuelve un valor positivo de handler o FALSE, en el caso de que la apertura de la base de
          datos se realice o si falla, respectivamente.
          Ver tambien: dba_open() dba_close()




dba_replace (PHP 3>= 3.0.8, PHP 4 )
          Reemplaza o inserta una entrada

   bool dba_replace ( string key, string value, int handle) linebreak
          dba_replace() reemplaza o inserta la entrada descrita con key y value dentro de la base de datos
          especificada por handle.
          key es la clave de la entrada a insertar.
          value es el valor a ser insertado.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().
          dba_replace() devuelve TRUE o FALSE, dependiendo de si tiene exito o falla respectivamente.
          Ver tambien: dba_exists() dba_delete() dba_fetch() dba_insert()




dba_sync (PHP 3>= 3.0.8, PHP 4 )
          Sincroniza la base de datos

   bool dba_sync ( int handle) linebreak
          dba_sync() sincroniza la base de datos especificada por handle. Esto probablemente realice una
          escritura fisica en el disco, si es soportado.
          handle es un manejador (handle) de la base de datos devuelto por dba_open().




                                                                                                                307
dba

dba_sync() devuelve TRUE o FALSE, si la sincronizacion tiene exito o falla, respectivamente.
Ver tambien: dba_optimize()




                                                                                               308
XVIII. Funciones de fecha y hora




                                   309
Fecha/hora

checkdate (PHP 3, PHP 4 )
          valida una fecha u hora

   int checkdate ( int month, int day, int year) linebreak
          Devuelve un valor verdadero si la fecha dada es válida; en caso contrario, devuelve un valor falso.
          Comprueba la validez de la fecha formada por los argumentos. Se considera válida una fecha si:
          •   el año está entre 0 y 32767, ambos incluidos
          •   el mes está entre 1 y 12, ambos incluidos
          •   el día está en el rango permitido para el mes dado. Se tienen en consideración los años bisiestos.




date (PHP 3, PHP 4 )
          da formato a la fecha/hora local

   string date ( string format [, int timestamp]) linebreak
          Devuelve una cadena formateada de acuerdo con la cadena de formato dada, utilizando el valor de
          timestamp dado o la hora local actual si no hay parámetro.
          Se reconocen los siguientes caracteres en la cadena de formato:

          •   a - "am" o "pm"
          •   A - "AM" o "PM"
          •   d - día del mes, dos dígitos con cero a la izquierda; es decir, de "01" a "31"
          •   D - día de la semana, en texto, con tres letras; por ejemplo, "Fri"
          •   F - mes, en texto, completo; por ejemplo, "January"
          •   h - hora, de "01" a "12"
          •   H - hora, de "00" a "23"
          •   g - hour, sin ceros, de "1" a "12"
          •   G - hour, sin ceros; de "0" a "23"
          •   i - minutos; de "00" a "59"
          •   j - día del mes sin cero inicial; de "1" a "31"
          •   l (’L’ minúscula) - día de la semana, en texto, completo; por ejemplo, "Friday"
          •   L - "1" or "0", según si el año es bisiesto o no
          •   m - mes; de "01" a "12"
          •   n - mes sin cero inicial; de "1" a "12"
          •   M - mes, en texto, 3 letras; por ejemplo, "Jan"




                                                                                                                   310
Fecha/hora

          •   s - segundos; de "00" a "59"
          •   S - sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd"
          •   t - número de días del mes dado; de "28" a "31"
          •   U - segundos desde el valor de ’epoch’
          •   w - día de la semana, en número, de "0" (domingo) a "6" (sábado)
          •   Y - año, cuatro cifras; por ejemplo, "1999"
          •   y - año, dos cifras; por ejemplo, "99"
          •   z - día del año; de "0" a "365"
          •   Z - diferencia horaria en segundos (de "-43200" a "43200")
          Los caracteres no reconocidos se imprimen tal cual. El formato "Z" siempre devuelve "0" en la función
          gmdate()()

          Ejemplo 1. Ejemplo de date()

          print (date("l dS of F Y h:i:s A"));
          print ("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));




          Es posible usar date() y mktime() juntas para obtener fechas futuras o pasadas.

          Ejemplo 2. Ejemplo de date() y mktime()

          $tomorrow = mktime(0,0,0,date("m") ,date("d")+1,date("Y"));
          $lastmonth = mktime(0,0,0,date("m")-1,date("d"), date("Y"));
          $nextyear = mktime(0,0,0,date("m"), date("d"), date("Y")+1);




          Para dar formato a fechas en otros idiomas, se deben usar las funciones setlocale() y strftime().
          Ver también gmdate() y mktime().




getdate (PHP 3, PHP 4 )
          obtiene información de fecha y hora

   array getdate ( int timestamp) linebreak
          Devuelve un array asociativo que contiene la información de fecha del valor timestamp como los
          siguientes elementos:
          •   "seconds" - segundos
          •   "minutes" - minutos




                                                                                                               311
Fecha/hora

          •   "hours" - horas
          •   "mday" - día del mes
          •   "wday" - día de la semana, en número
          •   "mon" - mes, en número
          •   "year" - año, en número
          •   "yday" - día del año, en número; por ejemplo, "299"
          •   "weekday" - día de la semana, en texto, completo; por ejemplo, "Friday"
          •   "month" - mes, en texto, completo; por ejemplo, "January"




gettimeofday (PHP 3>= 3.0.7, PHP 4 )
          obtiene la hora actual

   array gettimeofday ( void) linebreak
          Es un interfaz para gettimeofday(2). Devuelve un array asociativo que contiene los datos devueltos por
          esta llamada al sistema.
          •   "sec" - segundos
          •   "usec" - microsegundos
          •   "minuteswest" - minutos al oeste de Greenwich
          •   "dsttime" - tipo de corrección dst




gmdate (PHP 3, PHP 4 )
          da formato a una fecha/hora GMT/CUT

   string gmdate ( string format, int timestamp) linebreak
          Idéntica a la función data() excepto en que la hora devuelta es la de Greenwich (GMT). Por ejemplo, si
          se utiliza en Finlandia (GMT +0200), la primera línea del ejemplo devuelve "Jan 01 1998 00:00:00",
          mientras la segunda imprime "Dec 31 1997 22:00:00".

          Ejemplo 1. Ejemplo de gmdate()

          echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );
          echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );




                                                                                                              312
Fecha/hora

          Ver también date(), mktime() y gmmktime().




gmmktime (PHP 3, PHP 4 )
          obtiene el valor timestamp UNIX de una fecha GMT

   int gmmktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst]) linebreak
          Idéntica a mktime(), excepto en que los parámetros representan una fecha GMT.




gmstrftime (PHP 3>= 3.0.12, PHP 4 )
          da formato a una fecha/hora GMT/CUT según las convenciones locales

   string gmstrftime ( string format, int timestamp) linebreak
          Se comporta como strftime(), excepto en que la hora devuelta es la de Greenwich (GMT). Por ejemplo, si
          se utiliza en la zona horaria EST (GMT -0500), la primera línea del ejemplo imprime "Dec 31 1998
          20:00:00", mientras la segunda imprime "Jan 01 1999 01:00:00".

          Ejemplo 1. Ejemplo de gmstrftime()

          setlocale (’LC_TIME’,’en_US’);
          echo strftime ("%b %d %Y %H:%M:%S",mktime(20,0,0,12,31,98))."n";
          echo gmstrftime ("%b %d %Y %H:%M:%S",mktime(20,0,0,12,31,98))."n";




          Ver también strftime().




localtime (PHP 4 )
          Obtener la hora local

   array localtime ( [int muestra_de_tiempo [, bool es_asociativo]]) linebreak
          La función localtime() devuelve un vector idético al de la estructura devuelta en C por la llamada a la
          misma función. El primer parámetro que se le pasa a localtime() es el timestamp, una representació de
          una fecha/hora concretas. Si no se proporciona, se utilizará la hora actual. El segundo argumento de
          localtime() es es_asociativo. Si está a 0 o no es proporcionado, el vector se devuelve como un
          vector normal, indizado numéricamente. Si el argumento está a 1, el vector devuelto es un vector
          asociativo conteniendo los diferentes elementos de la estructura devuelta por C al llamar a la función
          localtime. Los nombres de las diferentes claves del vector asociativo se encuentran a continuación:
          •   "tm_sec" - segundos




                                                                                                                    313
Fecha/hora

          •   "tm_min" - minutos
          •   "tm_hour" - horas
          •   "tm_mday" - día del mes
          •   "tm_mon" - mes del año, empezando en 0 que es Enero
          •   "tm_year" - Años que hacen desde 1900
          •   "tm_wday" - Día de la semana
          •   "tm_yday" - Día del año
          •   "tm_isdst" - Si el cambio de hora para el ahorro energético tiene efecto o no




microtime (PHP 3, PHP 4 )
          devuelve el valor timestamp UNIX actual con microsegundos

   string microtime ( void) linebreak
          Devuelve la cadena "msec sec", donde sec es la hora actual en número de segundos desde el valor Unix
          Epoch (0:00:00 del 1 de enero de 1970, hora GMT), y msec es la parte de microsegundos. Esta función
          sólo está disponible en sistemas operativos con admiten la llamada al sistema gettimeofday().
          Ver también time().




mktime (PHP 3, PHP 4 )
          obtiene el timestamp UNIX de una fecha

   int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst]) linebreak
          Advertencia: Véase el extraño orden de los argumentos, que se diferencia del orden de argumentos en
          una llamada mktime() de UNIX y que no permite eliminar parámetros de derecha a izquierda (ver abajo).
          Es un error común mezclar estos valores en un script.
          Devuelve el valor timestamp Unix correspondiente a los argumentos dados. El timestamp es un entero de
          tipo long que contiene el número de segundos entre el valor Unix Epoch (1 de enero de 1970) y la hora
          especificada.
          Se pueden eliminar argumentos en orden de derecha a izquierda; en los argumentos omitidos se toma el
          valor de la fecha y hora locales.
          is_dst puede ponerse a 1 si la hora corresponde a horario de verano, 0 si no, o -1 (valor por omisión)
          si no se sabe.

               Nota: is_dst se añadió en la versión 3.0.10.




                                                                                                                  314
Fecha/hora

          mktime() es útil para realizar cálculos y validaciones con fechas, ya que calcula automáticamente el
          valor correcto para una entrada fuera de rango. Por ejemplo, cada una de las líneas siguientes produce la
          cadena "Jan-01-1998".


          Ejemplo 1. Ejemplo de mktime()

          echo date( "M-d-Y", mktime(0,0,0,12,32,1997) );
          echo date( "M-d-Y", mktime(0,0,0,13,1,1997) );
          echo date( "M-d-Y", mktime(0,0,0,1,1,1998) );




          El último día de cada mes se puede expresar como el día "0" del mes siguiente, no el día -1. Los dos
          ejemplos siguientes producen la cadena "The last day in Feb 2000 is: 29".

          Ejemplo 2. El último día del próximo mes

          $lastday=mktime(0,0,0,3,0,2000);
          echo strftime("Last day in Feb 2000 is: %d",$lastday);

          $lastday=mktime(0,0,0,4,-31,2000);
          echo strftime("Last day in Feb 2000 is: %d",$lastday);




          Ver también date() y time().




strftime (PHP 3, PHP 4 )
          da formato a la hora o fecha local de acuerdo con las convenciones locales

   string strftime ( string format, int timestamp) linebreak
          Devuelve una cadena formateada según la cadena de formato dada utilizando el valor timestamp o la
          hora local actual. Los nombres del mes y el día de la semana y otras cadenas dependientes del idioma
          respetan lo establecido con setlocale().
          Se reconocen los siguientes especificadores de conversión en la cadena de formato:

          •   %a - nombre del día de la semana abreviado
          •   %A - nombre del día de la semana completo
          •   %b - nombre del mes abreviado
          •   %B - nombre del mes completo
          •   %c - representación de fecha y hora preferidas en el idioma actual
          •   %d - día del mes en número (de 00 a 31)




                                                                                                                 315
Fecha/hora

          •   %H - hora como un número de 00 a 23
          •   %I - hora como un número de 01 a 12
          •   %j - día del año como un número de 001 a 366
          •   %m - mes como un número de 01 a 12
          •   %M - minuto en número
          •   %p - ‘am’ o ‘pm’, según la hora dada, o las cadenas correspondientes en el idioma actual
          •   %S - segundos en número
          •   %U - número de la semana en el año, empezando con el primer domingo como el primer día de la
              primera semana
          •   %W - número de la semana en el año, empezando con el primer lunes como el primer día de la
              primera semana
          •   %w - día de la semana en número (el domingo es el 0)
          •   %x - representación preferida de la fecha sin la hora
          •   %X - representación preferida de la hora sin la fecha
          •   %y - año en número de 00 a 99
          •   %Y - año en número de cuatro cifras
          •   %Z - nombre o abreviatura de la zona horaria
          •   %% - carácter ‘%’

          Ejemplo 1. Ejemplo de strftime()

          setlocale ("LC_TIME", "C");
          print(strftime("%A in Finnish is "));
          setlocale ("LC_TIME", "fi_FI");
          print(strftime("%A, in French "));
          setlocale ("LC_TIME", "fr_CA");
          print(strftime("%A and in German "));
          setlocale ("LC_TIME", "de_DE");
          print(strftime("%A.n"));


          Este ejemplo funciona si se tienen los respectivos ‘locales’ instalados en el sistema.
          Ver también setlocale() y mktime().




strtotime (PHP 3>= 3.0.12, PHP 4 )
          Procesar cualquier descripción textual de fecha/hora en Inglés convirtiéndola en una timestamp de UNIX.

   int strtotime ( string hora [, int ahora]) linebreak




                                                                                                               316
Fecha/hora

         La función espera que se le pase una cadena conteniendo una fecha en formato Inglés e intentará
         procesarla y convertirla a una timestamp (muestra de tiempo) de UNIX relativa a la timestamp
         proporcionada en ahora, o la hora actual si no se indica ninguna. Si falla, devolverá -1.
         Dado que strtotime() obra de acuerdo con la sintaxis de fechas de GNU, puede echar un vistazo a la
         página del manual GNU titulada Date Input Formats
         (http://www.gnu.org/manual/tar-1.12/html_chapter/tar_7.html) (Formatos de entrada de fechas). La
         sintaxis descrita ahí es válida para el parátro hora.


         Ejemplo 1. Ejemplos con strtotime()


         echo   strtotime   ("now"), "n";
         echo   strtotime   ("10 September 2000"), "n";
         echo   strtotime   ("+1 day"), "n";
         echo   strtotime   ("+1 week"), "n";
         echo   strtotime   ("+1 week 2 days 4 hours 2 seconds"), "n";
         echo   strtotime   ("next Thursday"), "n";
         echo   strtotime   ("last Monday"), "n";




         Ejemplo 2. Comprobando si falla


         $str = ’No v&aacute;lida’;
         if (($timestamp = strtotime($str)) === -1) {
             echo "La cadena ($str) no es v&aacute;lida.";
         } else {
             echo "$str == ". date(’l dS of F Y h:i:s A’,$timestamp);
         }




             Nota: El rango válido de una timestamp suele ser desde Fri, 13 Dec 1901 20:45:54 GMT (Viernes,
             13 de diciembre) a Tue, 19 Jan 2038 03:14:07 GMT (Martes, 19 de enero). (Estas son las fechas
             que corresponden a los valores mínimo y máximo de un entero con signo de 32 bits.)




time (PHP 3, PHP 4 )
         devuelve el timestamp UNIX actual




                                                                                                              317
Fecha/hora

int time ( void) linebreak
       Devuelve la hora actual como número de segundos transcurridos desde las 00:00:00 del 1 de enero de
       1970 GMT (Unix Epoch).
       Ver también date().




                                                                                                        318
XIX. Funciones para dBase
    Estas funciones permiten el acceso a datos almacenados en formato dBase (dbf).
    No hay soporte para índices o campos Memo. Tampoco hay soporte para bloqueo: si dos procesos
    concurrentes en el servidor modifican el mismo fichero dBase, probablemente se destruirán los datos.
    A diferencia de las bases de datos SQL, las "bases de datos" dBase no pueden cambiar su definición. Una
    vez creado el fichero, la definición de la base de datos es fija. No hay índices que aceleren la búsqueda u
    organicen los datos de distinto modo. Los ficheros dBase son simples ficheros secuenciales con registros
    de longitud fija. Los nuevos registros se añaden al final del fichero y los registros borrados se conservan
    hasta que se llama a la función dbase_pack()().
    Se recomienda no utilizar ficheros dBase como bases de datos, sino elegir cualquier servidor SQL;
    MySQL o Postgres son opciones habituales con PHP. El soporte para dBase se proporciona para permitir
    importar y exportar datos a y desde la base de datos web, ya que este formato de ficheros es aceptado
    habitualmente por las hojas de datos y los organizadores de Windows. La importación y exportación de
    datos es lo único para lo que sirve el soporte dBase.




                                                                                                        319
dBase

dbase_add_record (PHP 3, PHP 4 )
           añade un registro a un fichero dBase

    bool dbase_add_record ( int dbase_identifier, array record) linebreak
           Añade los datos de record a la base de datos. Si el número de elementos del registro proporcionado
           no es igual al número de campos de la base de datos, la operación fallará y la función devolverá FALSE.




dbase_close (PHP 3, PHP 4 )
           cierra un fichero dBase

    bool dbase_close ( int dbase_identifier) linebreak
           Cierra el fichero asociado con dbase_identifier.




dbase_create (PHP 3, PHP 4 )
           crea una base de datos dBase

    int dbase_create ( string filename, array fields) linebreak
           El parámetro fields es un array de arrays, cada uno de los cuales describe el formato de un campo de
           la base de datos. Cada campo consiste de un nombre, un carácter que indica el tipo de campo, una
           longitud, y una precisión.
           Los tipos de campos disponibles son:

L
                Lógico. No tienen longitud ni precisión.

M
                Memo. (Sin soporte en PHP.) No tienen longitud ni precisión.

D
                Fecha (almacenada como AAAAMMDD). No tienen longitud ni precisión.

N
                Número. Tienen longitud y precisión (número de cifras tras el punto decimal).

C
                Cadena.




                                                                                                               320
dBase

        Si la base de datos se crea con éxito, se devuelve un dbase_identifier; en caso contrario, devuelve FALSE.



        Ejemplo 1. Crear un fichero dBase

        // "database" name
        $dbname = "/tmp/test.dbf";

        // database "definition"
        $def =
            array(
                array("date",                "D"),
                array("name",                "C", 50),
                array("age",                 "N",   3, 0),
                array("email",               "C", 128),
                array("ismember",            "L")
            );

        // creation
        if (!dbase_create($dbname, $def))
            print "<strong>Error!</strong>";




dbase_delete_record (PHP 3, PHP 4 )
        borra un registro del fichero dBase

  bool dbase_delete_record ( int dbase_identifier, int record) linebreak
        Marca el registro record para ser borrado del fichero de datos. Para eliminar realmente el registro del
        fichero, debe llamarse a la función dbase_pack().




dbase_get_record_with_names (PHP 3>= 3.0.4, PHP 4 )
        lee un registro de un fichero dBase como array asociativo

  array dbase_get_record_with_names ( int dbase_identifier, int record) linebreak
        Devuelve los datos del registro record en un array asociativo. El array incluye también un elemento
        con índice ’deleted’ que vale 1 si el registro ha sido marcado para borrar (ver dbase_delete_record().
        Cada campo se convierte al tipo PHP apropiado. (Las fechas se transforman en cadenas.)




                                                                                                             321
dBase

dbase_get_record (PHP 3, PHP 4 )
         lee un registro de un fichero dBase

   array dbase_get_record ( int dbase_identifier, int record) linebreak
         Devuelve los datos del registro record en un array. El array se indexa a partir de 0, e incluye un
         elemento con el índice asociativo ’deleted’, que vale 1 si el registro ha sido marcado para borrar (ver
         dbase_delete_record().
         Cada campo se convierte al tipo PHP apropiado. (Las fechas se guardan como cadenas.)




dbase_numfields (PHP 3, PHP 4 )
         cuenta el número de campos en un fichero dBase

   int dbase_numfields ( int dbase_identifier) linebreak
         Devuelve el número de campos (columnas) en el fichero especificado. Los números de campo va de 0 a
         dbase_numfields($db)-1, mientras los números de registros van de 1 a dbase_numrecords($db).

         Ejemplo 1. Uso de dbase_numfields()

         $rec = dbase_get_record($db, $recno);
         $nf = dbase_numfields($db);
         for ($i=0; $i < $nf; $i++) {
             print $rec[$i]."<br>n";
         }




dbase_numrecords (PHP 3, PHP 4 )
         cuenta el número de registros en un fichero dBase

   int dbase_numrecords ( int dbase_identifier) linebreak
         Devuelve el número de registros (filas) en el fichero especificado. Los números de registro van de 1 a
         dbase_numrecords($db), mientras los números de campo van de 0 a dbase_numfields($db)-1.




dbase_open (PHP 3, PHP 4 )
         abre un fichero dBase

   int dbase_open ( string filename, int flags) linebreak




                                                                                                                   322
dBase

         Los "flags" son los que utiliza la llamada al sistema open(). Normalmente, 0 significa sólo lectura, 1 sólo
         escritura y 2 lectura y escritura.
         Devuelve un dbase_identifier del fichero abierto, o FALSE si no pudo abrirse el fichero.




dbase_pack (PHP 3, PHP 4 )
         "empaqueta" un fichero dBase

   bool dbase_pack ( int dbase_identifier) linebreak
         Empaqueta el fichero especificado, borrando definitivamente todos los registros marcados con la función
         dbase_delete_record().




dbase_replace_record (PHP 3>= 3.0.11, PHP 4 )
         reemplaza un registro en un fichero dBase

   bool dbase_replace_record ( int dbase_identifier, array record, int dbase_record_number) linebreak
         Reemplaza los datos asociados con el registro record_number con los datos de record en el fichero
         de datos. Si el número de elementos del registro proporcionado no es igual al número de campos de la
         base de datos, la operación fallará y la función devolverá FALSE.
         dbase_record_number es un entero en el rango de 1 al número de registros en el fichero de datos
         (devuelto por la función dbase_numrecords()).




                                                                                                              323
XX. Funciones dbm
    Estas funcione le permiten almacenar registros en una base de datos estilo dbm. Este tipo de base de
    datos (soportadas por las librerías db y gdbm de Berkeley, así como por algunas librerías del sistema y
    por una librería incluída para acceso a archivos de texto) guarda pares clave/valor (en oposición a los
    registros completos soportados por las bases de datos relacionales).


    Ejemplo 1. ejemplo de dbm

    $dbm = dbmopen("vistoya", "w");
    if (dbmexists($dbm, $idusuario)) {
      $visto_ya = dbmfetch($dbm, $idusuario);
    } else {
      dbminsert($dbm, $idusuario, time());
    }
    do_stuff();
    dbmreplace($dbm, $idusuario, time());
    dbmclose($dbm);




                                                                                                         324
DBM

dblist (PHP 3, PHP 4 )
          describe la librería compatible dbm que se está usando

   string dblist ( void) linebreak



dbmclose (PHP 3, PHP 4 )
          cierra una base de datos dbm

   bool dbmclose ( int identif_dbm) linebreak
          Desbloquea y cierra la base de datos especificada.




dbmdelete (PHP 3, PHP 4 )
          borra el valor de una clave de una base de datos dbm

   bool dbmdelete ( int identif_dbm, string clave) linebreak
          Borra el valor para la clave en la base de datos.
          Devuelve FALSE si la clave no existía en la base de datos.




dbmexists (PHP 3, PHP 4 )
          dice si existe un valor para una clave dada en la base de datos dbm

   bool dbmexists ( int identif_dbm, string clave) linebreak
          Devuelve TRUE si hay un valor asociado con la clave.




dbmfetch (PHP 3, PHP 4 )
          obtiene un valor para una clave desde la base de datos dbm

   string dbmfetch ( int identif_dbm, string clave) linebreak
          Devuelve el valor asociado con la clave.




                                                                                325
DBM

dbmfirstkey (PHP 3, PHP 4 )
          obtiene la primera clave de una base de datos dbm

   string dbmfirstkey ( int identif_dbm) linebreak
          Devuelve la primera clave de la base de datos. Nótese que no se garantiza ningún orden en particular,
          pues la base de datos se crea utilizando una tabla hash, que no garantiza ordenación alguna.




dbminsert (PHP 3, PHP 4 )
          inserta un valor para una clave en la base de datos dbm

   int dbminsert ( int identif_dbm, string clave, string valor) linebreak
          Añade el valor a la base de datos con la clave especificada.
          Devuelve -1 si la base de datos se abrío en modo sólo lectura, 0 si la inserción tuvo éxito y 1 si la clave
          ya existía (para sustituir el valor, utilice dbmreplace().)




dbmnextkey (PHP 3, PHP 4 )
          obtiene la siguiente clave de una base de datos dbm

   string dbmnextkey ( int identif_dbm, string clave) linebreak
          Devuelve la clave que sigue a clave. Llamando a dbmfirstkey() seguida de llamadas sucesivas a
          dbmnextkey() se pueden visitar todos los pares clave/valor de la base de datos dbm. Por ejemplo:

          Ejemplo 1. Visitanco cada par clave/valor en una base de datos dbm.

          $clave = dbmfirstkey($id_dbm);
          while ($clave) {
              echo "$clave = " . dbmfetch($id_dbm, $clave) . "n";
              $clave = dbmnextkey($id_dbm, $clave);
          }




dbmopen (PHP 3, PHP 4 )
          abre una base de datos dbm

   int dbmopen ( string fichero, string indicadores) linebreak




                                                                                                                   326
DBM

          El primer argumento es el nombre con sendero completo del archivo dbm que se va a abrir y el segundo
          es el modo de apertura, que puede ser "r", "n", "c" o "w", que significan sólo lectura, nuevo (implica
          lectura/escritura y suele truncar una base de datos si ya existía con ese nombre), crear (implica
          lectura/escritura, pero sin truncar la base de datos) y abrir para lectura/escritura, respectivamente.
          Devuelve un identificador que se pasa al resto de funciones dbm si tiene éxito, o FALSE si falla.
          Si se utiliza el soporte de ndbm, este creará los archivos fichero.dir y fichero.pag. gdbm sólo utiliza un
          archivo y lo mismo hace el soporte interno de archivos de texto, mientras que el db de Berkeley crea un
          archivo fichero.db. Nótese que el PHP hace su propio bloqueo de archivo sobre el que pudiera realizar la
          propia librería dbm. El PHP no borra los archivos .lck que crea. Los utiliza simplemente como i-nodos
          fijos en los que hacer el bloqueo. Para más información sobre archivos dbm, vea las páginas man de su
          Unix o obtenga el gdbm de GNU desde ftp://prep.ai.mit.edu/pub/gnu.




dbmreplace (PHP 3, PHP 4 )
          sustituye el valor de una clave en la base de datos dbm

   bool dbmreplace ( int identif_dbm, string clave, string valor) linebreak
          Sustituye el valor para la clave especificada de la base de datos.
          También añadirá la clave a la base de datos si no existía antes.




                                                                                                              327
XXI. dbx functions

Introducción
     The dbx module is a database abstraction layer (db ’X’, where ’X’ is a supported database). The dbx
     functions allow you to access all supported databases using a single calling convention. The
     dbx-functions themselves do not interface directly to the databases, but interface to the modules that are
     used to support these databases.




Requerimientos
     To be able to use a database with the dbx-module, the module must be either linked or loaded into PHP,
     and the database module must be supported by the dbx-module. Currently, following databases are
     supported, but others will follow (soon, I hope :-):


     •   FrontBase (available from PHP 4.1.0).
     •   Microsoft SQL Server
     •   MySQL
     •   ODBC
     •   PostgreSQL
     •   Sybase-CT (available from PHP 4.2.0).


     Documentation for adding additional database support to dbx can be found at
     http://www.guidance.nl/php/dbx/doc/.




Instalación
     In order to have these functions available, you must compile PHP with dbx support by using the
     --enable-dbx option and all options for the databases that will be used, e.g. for MySQL you must also
     specify --with-mysql=[DIR]. To get other supported databases to work with the dbx-module refer to




                                                                                                            328
dbx

     their specific documentation.




Configuración en tiempo de ejecución
     Esta extensión no define ninguna directiva de configuración.




Tipos de recursos
     There are two resource types used in the dbx module. The first one is the link-object for a database
     connection, the second a result-object which helds the result of a query.




Constantes predefinidas
     Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión




                                                                                                           329
dbx

          ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución.

DBX_MYSQL (integer)



DBX_ODBC (integer)



DBX_PGSQL (integer)



DBX_MSSQL (integer)



DBX_FBSQL (integer)



DBX_OCI8 (integer)



DBX_SYBASECT (integer)



DBX_PERSISTENT (integer)



DBX_RESULT_INFO (integer)



DBX_RESULT_INDEX (integer)



DBX_RESULT_ASSOC (integer)



DBX_CMP_NATIVE (integer)



DBX_CMP_TEXT (integer)



DBX_CMP_NUMBER (integer)



DBX_CMP_ASC (integer)



DBX_CMP_DESC (integer)

                                                                                                   330
dbx

dbx_close (PHP 4 >= 4.0.6)
          Close an open connection/database

   bool dbx_close ( object link_identifier) linebreak
          Devuelve TRUE si todo fue bien, FALSE en caso de fallo.

          Ejemplo 1. dbx_close() example


          <?php
          $link = dbx_connect(DBX_MYSQL, "localhost", "db", "username", "password")
              or die ("Could not connect");

          print("Connected successfully");
          dbx_close($link);
          ?>




               Nota: Always refer to the module-specific documentation as well.



          See also: dbx_connect().




dbx_compare (PHP 4 >= 4.1.0)
          Compare two rows for sorting purposes

   int dbx_compare ( array row_a, array row_b, string column_key [, int flags]) linebreak
          dbx_compare() returns 0 if the row_a[$column_key] is equal to row_b[$column_key], and 1 or -1
          if the former is greater or is smaller than the latter one, respectively, or vice versa if the flag is set to
          DBX_CMP_DESC. dbx_compare() is a helper function for dbx_sort() to ease the make and use of the
          custom sorting function.
          The flags can be set to specify comparison direction:

          •   DBX_CMP_ASC - ascending order

          •   DBX_CMP_DESC - descending order

          and the preferred comparison type:

          •   DBX_CMP_NATIVE - no type conversion

          •   DBX_CMP_TEXT - compare items as strings
          •   DBX_CMP_NUMBER - compare items numerically




                                                                                                                   331
dbx

            One of the direction and one of the type constant can be combined with bitwise OR operator (|). The
            default value for the flags parameter is DBX_CMP_ASC | DBX_CMP_NATIVE.

            Ejemplo 1. dbx_compare() example


            <?php
            function user_re_order ($a, $b) {
                $rv = dbx_compare ($a, $b, "parentid", DBX_CMP_DESC);
                if ( !$rv ) {
                    $rv = dbx_compare ($a, $b, "id", DBX_CMP_NUMBER);
                }
                return $rv;
            }

            $link   = dbx_connect (DBX_ODBC, "", "db", "username", "password")
                or die ("Could not connect");

            $result = dbx_query ($link, "SELECT id, parentid, description FROM table ORDER BY id");
                // data in $result is now ordered by id

            dbx_sort ($result, "user_re_order");
                // date in $result is now ordered by parentid (descending), then by id

            dbx_close ($link);
            ?>




            See also dbx_sort().




dbx_connect (PHP 4 >= 4.0.6)
            Open a connection/database

      object dbx_connect ( mixed module, string host, string database, string username, string password [, int persis-
tent]) linebreak
            dbx_connect() returns an object on success, FALSE on error. If a connection has been made but the
            database could not be selected, the connection is closed and FALSE is returned. The persistent
            parameter can be set to DBX_PERSISTENT, if so, a persistent connection will be created.
            The module parameter can be either a string or a constant, though the latter form is preferred. The
            possible values are given below, but keep in mind that they only work if the module is actually loaded.


            •   DBX_MYSQL or "mysql"
            •   DBX_ODBC or "odbc"

            •   DBX_PGSQL or "pgsql"




                                                                                                                  332
dbx

           •   DBX_MSSQL or "mssql"

           •   DBX_FBSQL or "fbsql" (available from PHP 4.1.0)

           •   DBX_SYBASECT or "sybase_ct" (available from PHP 4.2.0)



           The host, database, username and password parameters are expected, but not always used
           depending on the connect functions for the abstracted module.
           The returned object has three properties:

database
                 It is the name of the currently selected database.

handle
                 It is a valid handle for the connected database, and as such it can be used in module-specific
                functions (if required).


                $link = dbx_connect (DBX_MYSQL, "localhost", "db", "username", "password");
                mysql_close ($link->handle); // dbx_close($link) would be better here




module
                 It is used internally by dbx only, and is actually the module number mentioned above.




           Ejemplo 1. dbx_connect() example


           <?php
           $link = dbx_connect (DBX_ODBC, "", "db", "username", "password", DBX_PERSISTENT)
               or die ("Could not connect");

           print ("Connected successfully");
           dbx_close ($link);
           ?>




                Nota: Always refer to the module-specific documentation as well.




           See also: dbx_close().




                                                                                                                 333
dbx

dbx_error (PHP 4 >= 4.0.6)
          Report the error message of the latest function call in the module (not just in the connection)

   string dbx_error ( object link_identifier) linebreak
          dbx_error() returns a string containing the error message from the last function call of the abstracted
          module (e.g. mysql module). If there are multiple connections in the same module, just the last error is
          given. If there are connections on different modules, the latest error is returned for the module specified
          by the link_identifier parameter.

          Ejemplo 1. dbx_error() example


          <?php
          $link   = dbx_connect(DBX_MYSQL, "localhost", "db", "username", "password")
              or die ("Could not connect");

          $result = dbx_query($link, "select id from non_existing_table");
          if ( $result == 0 ) {
              echo dbx_error ($link);
          }
          dbx_close ($link);
          ?>




               Nota: Always refer to the module-specific documentation as well.
               The error message for Microsoft SQL Server is actually the result of the mssql_get_last_message()
               function.




dbx_query (PHP 4 >= 4.0.6)
          Send a query and fetch all results (if any)

   object dbx_query ( object link_identifier, string sql_statement [, long flags]) linebreak
          dbx_query() returns an object or 1 on success, and 0 on failure. The result object is returned only if the
          query given in sql_statement produces a result set.

          Ejemplo 1. How to handle the returned value


          <?php
          $link   = dbx_connect(DBX_ODBC, "", "db", "username", "password")
              or die("Could not connect");




                                                                                                                 334
dbx


        $result = dbx_query($link, ’SELECT id, parentid, description FROM table’);

        if ( is_object($result) ) {
            // ... do some stuff here, see detailed examples below ...
            // first, print out field names and types
            // then, draw a table filled with the returned field values
        }
        else if ( $result == 1 ) {
            echo("Query executed successfully, but no result set returned");
        }
        else {
            exit("Query failed");
        }

        dbx_close($link);
        ?>




        The flags parameter is used to control the amount of information that is returned. It may be any
        combination of the following constants with the bitwise OR operator (|):


DBX_RESULT_INDEX

              It is always set, that is, the returned object has a data property which is a 2 dimensional array
             indexed numerically. For example, in the expression data[2][3] 2 stands for the row (or record)
             number and 3 stands for the column (or field) number. The first row and column are indexed at 0.
             If DBX_RESULT_ASSOC is also specified, the returning object contains the information related to
             DBX_RESULT_INFO too, even if it was not specified.



DBX_RESULT_INFO

             It provides info about columns, such as field names and field types.

DBX_RESULT_ASSOC

              It effects that the field values can be accessed with the respective column names used as keys to the
             returned object’s data property.
             Associated results are actually references to the numerically indexed data, so modifying
             data[0][0] causes that data[0][’field_name_for_first_column’] is modified as well.



        Note that DBX_RESULT_INDEX is always used, regardless of the actual value of flags parameter. This
        means that the following combinations is effective only:

        •   DBX_RESULT_INDEX
        •   DBX_RESULT_INDEX | DBX_RESULT_INFO




                                                                                                              335
dbx

            •     DBX_RESULT_INDEX | DBX_RESULT_INFO | DBX_RESULT_ASSOC - this is the default, if flags is
                not specified.


            The returing object has four or five properties depending on flags:

handle
                    It is a valid handle for the connected database, and as such it can be used in module specific
                   functions (if required).


                   $result = dbx_query ($link, "SELECT id FROM table");
                   mysql_field_len ($result->handle, 0);




cols and rows
                    These contain the number of columns (or fields) and rows (or records) respectively.


                   $result = dbx_query ($link, ’SELECT id FROM table’);
                   echo $result->rows; // number of records
                   echo $result->cols; // number of fields




info (optional)
                    It is returned only if either DBX_RESULT_INFO or DBX_RESULT_ASSOC is specified in the flags
                   parameter. It is a 2 dimensional array, that has two named rows (name and type) to retrieve column
                   information.

                   Ejemplo 2. lists each field’s name and type


                   $result = dbx_query ($link, ’SELECT id FROM table’,
                                        DBX_RESULT_INDEX | DBX_RESULT_INFO);

                   for ($i = 0; $i < $result->cols; $i++ ) {
                       echo $result->info[’name’][$i] . "n";
                       echo $result->info[’type’][$i] . "n";
                   }




                                                                                                                    336
dbx

data
                   This property contains the actual resulting data, possibly associated with column names as well
                  depending on flags. If DBX_RESULT_ASSOC is set, it is possible to use
                  $result->data[2]["field_name"].

                  Ejemplo 3. outputs the content of data property into HTML table


                  $result = dbx_query ($link, ’SELECT id, parentid, description FROM table’);

                  echo "<table>n";
                  foreach ( $result->data as $row ) {
                      echo "<tr>n";
                      foreach ( $row as $field ) {
                          echo "<td>$field</td>";
                      }
                      echo "</tr>n";
                  }
                  echo "</table>n";




                  Nota: Always refer to the module-specific documentation as well.



             See also: dbx_connect().




dbx_sort (PHP 4 >= 4.0.6)
             Sort a result from a dbx_query by a custom sort function

       bool dbx_sort ( object result, string user_compare_function) linebreak
             Devuelve TRUE si todo fue bien, FALSE en caso de fallo.

                  Nota: It is always better to use ORDER BY SQL clause instead of dbx_sort(), if possible.




             Ejemplo 1. dbx_sort() example


             <?php
             function user_re_order ($a, $b) {
                 $rv = dbx_compare ($a, $b, "parentid", DBX_CMP_DESC);




                                                                                                                     337
dbx

     if ( !$rv ) {
         $rv = dbx_compare ($a, $b, "id", DBX_CMP_NUMBER);
     }
     return $rv;
}

$link   = dbx_connect (DBX_ODBC, "", "db", "username", "password")
    or die ("Could not connect");

$result = dbx_query ($link, "SELECT id, parentid, description FROM tbl ORDER BY id");
    // data in $result is now ordered by id

dbx_sort ($result, "user_re_order");
    // data in $result is now ordered by parentid (descending), then by id

dbx_close ($link);
?>




See also dbx_compare().




                                                                             338
XXII. DB++ Functions
                                                 Aviso
           Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
           funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
           cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
           módulo es tu responsabiliad.




Introducción
     db++, made by the German company Concept asa (http://www.concept-asa.de/), is a relational database
     system with high performance and low memory and disk usage in mind. While providing SQL as an
     additional language interface, it is not really a SQL database in the first place but provides its own AQL
     query language which is much more influenced by the relational algebra then SQL is.
     Concept asa always had an interest in supporting open source languages, db++ has had Perl and Tcl call
     interfaces for years now and uses Tcl as its internal stored procedure language.




Requerimientos
     This extension relies on external client libraries so you have to have a db++ client installed on the system
     you want to use this extension on.
     Concept asa (http://www.concept-asa.de/) provides db++ Demo versions
     (http://www.concept-asa.de/down-eng.html) and documentation
     (http://www.concept-asa.de/downloads/doc-eng.tar.gz) for Linux, some other UNIX versions. There is
     also a Windows version of db++, but this extension doesn’t support it (yet).




Instalación
     In order to build this extension yourself you need the db++ client libraries and header files to be installed
     on your system (these are included in the db++ installation archives by default). You have to run
     configure with option --with-dbplus to build this extension.
     configure looks for the client libraries and header files under the default paths /usr/dbplus,
     /usr/local/dbplus and /opt/dblus. If you have installed db++ in a different place you have add




                                                                                                             339
DB++

      the installation path to the configure option like this: --with-dbplus=/your/installation/path.




Configuración en tiempo de ejecución
      Esta extensión no define ninguna directiva de configuración.




Tipos de recursos

dbplus_relation
      Most db++ functions operate on or return dbplus_relation resources. A dbplus_relation is a
      handle to a stored relation or a relation generated as the result of a query.




Constantes predefinidas
      Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión
      ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución.


db++ error codes

      Tabla 1. DB++ Error Codes

      PHP Constant                      db++ constant                      meaning
       DBPLUS_ERR_NOERR (integer)       ERR_NOERR                          Null error condition
       DBPLUS_ERR_DUPLICATE             ERR_DUPLICATE                      Tried to insert a duplicate tuple
      (integer)
       DBPLUS_ERR_EOSCAN (integer)      ERR_EOSCAN                         End of scan from rget()
       DBPLUS_ERR_EMPTY (integer)       ERR_EMPTY                          Relation is empty (server)
       DBPLUS_ERR_CLOSE (integer)       ERR_CLOSE                          The server can’t close
       DBPLUS_ERR_WLOCKED (integer) ERR_WLOCKED                            The record is write locked

       DBPLUS_ERR_LOCKED (integer)      ERR_LOCKED                         Relation was already locked
       DBPLUS_ERR_NOLOCK (integer)      ERR_NOLOCK                         Relation cannot be locked
       DBPLUS_ERR_READ (integer)        ERR_READ                           Read error on relation
       DBPLUS_ERR_WRITE (integer)       ERR_WRITE                          Write error on relation
       DBPLUS_ERR_CREATE (integer)      ERR_CREATE                         Create() system call failed
       DBPLUS_ERR_LSEEK (integer)       ERR_LSEEK                          Lseek() system call failed




                                                                                                           340
DB++

PHP Constant                  db++ constant    meaning
DBPLUS_ERR_LENGTH (integer)   ERR_LENGTH       Tuple exceeds maximum length
DBPLUS_ERR_OPEN (integer)     ERR_OPEN         Open() system call failed
DBPLUS_ERR_WOPEN (integer)    ERR_WOPEN        Relation already opened for
                                               writing
DBPLUS_ERR_MAGIC (integer)    ERR_MAGIC        File is not a relation
DBPLUS_ERR_VERSION (integer) ERR_VERSION       File is a very old relation

DBPLUS_ERR_PGSIZE (integer)   ERR_PGSIZE       Relation uses a different page size
DBPLUS_ERR_CRC (integer)      ERR_CRC          Invalid crc in the superpage
DBPLUS_ERR_PIPE (integer)     ERR_PIPE         Piped relation requires lseek()
DBPLUS_ERR_NIDX (integer)     ERR_NIDX         Too many secondary indices
DBPLUS_ERR_MALLOC (integer)   ERR_MALLOC       Malloc() call failed
DBPLUS_ERR_NUSERS (integer)   ERR_NUSERS       Error use of max users
DBPLUS_ERR_PREEXIT (integer) ERR_PREEXIT       Caused by invalid usage

DBPLUS_ERR_ONTRAP (integer)   ERR_ONTRAP       Caused by a signal
DBPLUS_ERR_PREPROC (integer) ERR_PREPROC       Error in the preprocessor

DBPLUS_ERR_DBPARSE (integer) ERR_DBPARSE       Error in the parser

DBPLUS_ERR_DBRUNERR           ERR_DBRUNERR     Run error in db
(integer)
DBPLUS_ERR_DBPREEXIT          ERR_DBPREEXIT    Exit condition caused by prexit() *
(integer)                                      procedure
DBPLUS_ERR_WAIT (integer)     ERR_WAIT         Wait a little (Simple only)
DBPLUS_ERR_CORRUPT_TUPLE ERR_CORRUPT_TUPLE     A client sent a corrupt tuple
(integer)
DBPLUS_ERR_WARNING0           ERR_WARNING0      The Simple routines encountered
(integer)                                      a non fatal error which was
                                               corrected
DBPLUS_ERR_PANIC (integer)    ERR_PANIC         The server should not really die
                                               but after a disaster send
                                               ERR_PANIC to all its clients
DBPLUS_ERR_FIFO (integer)     ERR_FIFO         Can’t create a fifo
DBPLUS_ERR_PERM (integer)     ERR_PERM         Permission denied
DBPLUS_ERR_TCL (integer)      ERR_TCL          TCL_error
DBPLUS_ERR_RESTRICTED         ERR_RESTRICTED   Only two users
(integer)
DBPLUS_ERR_USER (integer)     ERR_USER          An error in the use of the library
                                               by an application programmer




                                                                                 341
DB++

PHP Constant             db++ constant     meaning
DBPLUS_ERR_UNKNOWN (integer) ERR_UNKNOWN




                                                      342
DB++

dbplus_add (4.1.0 - 4.2.1 only)
          Add a tuple to a relation

   int dbplus_add ( resource relation, array tuple) linebreak


                                                           Aviso
                      Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                      funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                      cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                      módulo es tu responsabiliad.


          This function will add a tuple to a relation. The tuple data is an array of attribute/value pairs to be
          inserted into the given relation. After successful execution the tuple array will contain the
          complete data of the newly created tuple, including all implicitly set domain fields like sequences.
          The function will return zero (aka. DBPLUS_ERR_NOERR) on success or a db++ error code on failure.
          See dbplus_errcode() or the introduction to this chapter for more information on db++ error codes.




dbplus_aql (4.1.0 - 4.2.1 only)
          Perform AQL query

   resource dbplus_aql ( string query [, string server [, string dbpath]]) linebreak


                                                           Aviso
                      Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                      funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                      cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                      módulo es tu responsabiliad.


          dbplus_aql() will execute an AQL query on the given server and dbpath.
          On success it will return a relation handle. The result data may be fetched from this relation by calling
          dbplus_next() and dbplus_current(). Other relation access functions will not work on a result relation.
          Further information on the AQL A... Query Language is provided in the original db++ manual.




dbplus_chdir (4.1.0 - 4.2.1 only)
          Get/Set database virtual current directory

   string dbplus_chdir ( [string newdir]) linebreak




                                                                                                                    343
DB++


                                                           Aviso
                      Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas
                      funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede
                      cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este
                      módulo es tu responsabiliad.


          dbplus_chdir() will change the virtual current directory where relation files will be looked for by
          dbplus_open(). dbplus_chdir() will return the absolute path of the current directory. Calling
          dbplus_chdir() without giving any newdir may be used to query the current working directory.




dbplus_close (4.1.0 - 4.2.1 only)
          Close a relation

   int dbplus_close ( resource relation) lineb
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php
Manual de php

Más contenido relacionado

PDF
PDF
Abb guía del usuario
PDF
Manual proyector epson powerlite s18+
PDF
Robotc guia
PDF
GNU/Linux Mandrake 10.1 Guía De Comienzo (Español)
PDF
Tutorial lego-mindstorm
PDF
2096834 Instalando Debian
Abb guía del usuario
Manual proyector epson powerlite s18+
Robotc guia
GNU/Linux Mandrake 10.1 Guía De Comienzo (Español)
Tutorial lego-mindstorm
2096834 Instalando Debian

La actualidad más candente (18)

PDF
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
PDF
Introduction to-robotics-tablet-es-b08f2764ee6a5a74cbc89a545fa24b0b
PDF
Curso Interconexion de redes.pdf
PDF
Curso Interconexion de redes Soluciones.pdf
PDF
Hacking iOS: iPhone & iPad (2º Edición) [Índice]
PDF
Deep web, tor, freenet, i2p privacidad y anonimato daniel echeverri montoya
PDF
Gasl
PDF
Black berry curve_series--1817681-0105045033-005-7.1-es
PDF
Competencias estandares-tic
PDF
Manual Epson Brightlink 421i
PDF
Implementacion red con mikrotik
PDF
Tg585 v7 setup-userguide_es
PDF
Aprendiendo Java
PDF
Manual de referencia
PDF
Quelea manual es
PDF
Black berry protect--1057537-1208091521-005-1.0-es
PDF
My sql query browser
PDF
Manual de Exomate y servidores 1
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
Introduction to-robotics-tablet-es-b08f2764ee6a5a74cbc89a545fa24b0b
Curso Interconexion de redes.pdf
Curso Interconexion de redes Soluciones.pdf
Hacking iOS: iPhone & iPad (2º Edición) [Índice]
Deep web, tor, freenet, i2p privacidad y anonimato daniel echeverri montoya
Gasl
Black berry curve_series--1817681-0105045033-005-7.1-es
Competencias estandares-tic
Manual Epson Brightlink 421i
Implementacion red con mikrotik
Tg585 v7 setup-userguide_es
Aprendiendo Java
Manual de referencia
Quelea manual es
Black berry protect--1057537-1208091521-005-1.0-es
My sql query browser
Manual de Exomate y servidores 1
Publicidad

Similar a Manual de php (20)

PDF
Cómo montar un servidor doméstico con OpenBSD
PDF
Epo 400 installguide_es-es
PDF
Servlets
PDF
Introduccion a Joomla
PDF
PDF
Fwpa doc-desarrollo
PDF
Flash as3 components_help
PDF
Guía de instalación de Debian GNU/Linux
PDF
Manual del-usuario-placa-icip-30
PDF
Manual del usuario bizagi
PDF
Guia De Instalacion Redhat EspañOl
PDF
Introduccion a mbox 2
PDF
Adobe Actionscript 3.0
PDF
Guia de inicio rsview32
PDF
Manual desarrollador
PDF
Symfony2 es
PDF
Manual presto 8.8 en español
PDF
Epo 450 product_guide_es-es
PDF
Servicios de red
Cómo montar un servidor doméstico con OpenBSD
Epo 400 installguide_es-es
Servlets
Introduccion a Joomla
Fwpa doc-desarrollo
Flash as3 components_help
Guía de instalación de Debian GNU/Linux
Manual del-usuario-placa-icip-30
Manual del usuario bizagi
Guia De Instalacion Redhat EspañOl
Introduccion a mbox 2
Adobe Actionscript 3.0
Guia de inicio rsview32
Manual desarrollador
Symfony2 es
Manual presto 8.8 en español
Epo 450 product_guide_es-es
Servicios de red
Publicidad

Último (20)

DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
Punto Critico - Brian Tracy Ccesa007.pdf
PDF
Atencion prenatal. Ginecologia y obsetricia
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
TOMO II - LITERATURA.pd plusenmas ultras
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
biología es un libro sobre casi todo el tema de biología
PPTX
Presentación de la Cetoacidosis diabetica.pptx
2 GRADO UNIDAD 5 - 2025.docx para primaria
V UNIDAD - PRIMER GRADO. del mes de agosto
caso clínico iam clinica y semiología l3.pptx
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
ciencias-1.pdf libro cuarto basico niños
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
Punto Critico - Brian Tracy Ccesa007.pdf
Atencion prenatal. Ginecologia y obsetricia
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
TOMO II - LITERATURA.pd plusenmas ultras
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Escuelas Desarmando una mirada subjetiva a la educación
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
Tomo 1 de biologia gratis ultra plusenmas
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
biología es un libro sobre casi todo el tema de biología
Presentación de la Cetoacidosis diabetica.pptx

Manual de php

  • 1. Manual de PHP Stig Sæther Bakken Alexander Aulbach Egon Schmid Jim Winstead Lars Torben Wilson Rasmus Lerdorf Andrei Zmievski Jouni Ahto
  • 2. Editado por Rafael Martínez (Coordinador) Víctor Fernández Leonardo Boshell 08-07-2002 Copyright © 1997, 1998, 1999, 2000, 2001, 2002 por por el Grupo de documentación de PHP Copyright Este manual es © Copyright 1997, 1998, 1999, 2000, 2001, 2002 por el Grupo de documentación de PHP. Los miembros de este grupo se encuentran listados en la primera página de este manual. Este manual puede ser redistribuido bajo los términos de la "GNU General Public License" publicada por la "Free Software Foundation"; tanto bajo la versión 2 de esta licencia o bajo versiones posteriores. La sección ’Extendiendo PHP 4.0’ de este manual es copyright © 2000 por Zend Technologies, Ltd. Este material puede ser distribuido solamente bajo los terminos y condiciones de la Open Publication License, v1.0 ó posterior (la última versión está disponible en http://www.opencontent.org/openpub/).
  • 3. Manual de PHP por Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Andrei Zmievski, y Jouni Ahto por Editado por Rafael Martínez (Coordinador) Editado por Víctor Fernández Editado por Leonardo Boshell Publicado 08-07-2002 Copyright © 1997, 1998, 1999, 2000, 2001, 2002 por por el Grupo de documentación de PHP Copyright Este manual es © Copyright 1997, 1998, 1999, 2000, 2001, 2002 por el Grupo de documentación de PHP. Los miembros de este grupo se encuentran listados en la primera página de este manual. Este manual puede ser redistribuido bajo los términos de la "GNU General Public License" publicada por la "Free Software Foundation"; tanto bajo la versión 2 de esta licencia o bajo versiones posteriores. La sección ’Extendiendo PHP 4.0’ de este manual es copyright © 2000 por Zend Technologies, Ltd. Este material puede ser distribuido solamente bajo los terminos y condiciones de la Open Publication License, v1.0 ó posterior (la última versión está disponible en http://www.opencontent.org/openpub/).
  • 4. Tabla de contenidos Prefacio ........................................................................................................................................................i I. Conceptos Básicos ..................................................................................................................................1 1. Introducción ...................................................................................................................................1 Qué es PHP? .............................................................................................................................2 Qué se puede hacer con PHP? ..................................................................................................2 2. Instalación ......................................................................................................................................5 Bajándose la última versión......................................................................................................6 Instalación en sistemas UNIX ..................................................................................................6 Instrucciones Rápidas de Instalación (Versión Módulo de Apache) ..............................6 Configuración..................................................................................................................7 Módulo del Apache.........................................................................................................7 Módulo fhttpd .................................................................................................................7 CGI version.....................................................................................................................7 Opciones de soporte para Base de Datos ........................................................................8 Adabas D ...............................................................................................................8 dBase .....................................................................................................................8 filePro ....................................................................................................................8 mSQL ....................................................................................................................8 MySQL..................................................................................................................9 iODBC...................................................................................................................9 OpenLink ODBC...................................................................................................9 Oracle ....................................................................................................................9 PostgreSQL ...........................................................................................................9 Solid ....................................................................................................................10 Sybase..................................................................................................................10 Sybase-CT ...........................................................................................................10 Velocis .................................................................................................................10 Una librería a medida de ODBC .........................................................................11 ODBC Unificado .................................................................................................11 LDAP...................................................................................................................11 Otras opciones de configuración...................................................................................11 --with-mcrypt=DIR.............................................................................................12 --enable-sysvsem .................................................................................................12 --enable-sysvshm.................................................................................................12 --with-xml............................................................................................................12 --enable-maintainer-mode ...................................................................................12 --with-system-regex.............................................................................................12 --with-config-file-path .........................................................................................13 --with-exec-dir.....................................................................................................13 --enable-debug.....................................................................................................13 --enable-safe-mode..............................................................................................13 --enable-track-vars...............................................................................................13 --enable-magic-quotes .........................................................................................14 --enable-debugger................................................................................................14 --enable-discard-path...........................................................................................14 iv
  • 5. --enable-bcmath...................................................................................................14 --enable-force-cgi-redirect ..................................................................................14 --disable-short-tags..............................................................................................15 --enable-url-includes ...........................................................................................15 --disable-syntax-hl...............................................................................................15 CPPFLAGS y LDFLAGS ...................................................................................15 Construyendo ................................................................................................................16 Probando .......................................................................................................................16 Comprobando la velocidad ...........................................................................................16 Instalación en sistemas Windows 95/98/NT...........................................................................16 Pasos Generales de Instalación .....................................................................................16 Windows 95/98/NT y PWS/IIS 3..................................................................................17 Windows NT e IIS 4 .....................................................................................................18 Windows 9x/NT y Apache 1.3.x...................................................................................19 Omni HTTPd 2.0b1 para Windows ..............................................................................19 Módulos del PHP ..........................................................................................................19 ¿Problemas?............................................................................................................................20 Lea las PMF (FAQ) .......................................................................................................20 Informes de error...........................................................................................................20 Otros problemas ............................................................................................................20 3. Configuración...............................................................................................................................22 El archivo de configuración ....................................................................................................23 Directivas Generales de Configuración.........................................................................23 Directivas de Configuración de Correo.........................................................................27 Directivas de Configuración de Modo Seguro ..............................................................28 Directivas de Configuración del Debugger ...................................................................28 Directivas de Carga de Extensiones ..............................................................................28 Directivas de Configuración de MySQL.......................................................................29 Directivas de Configuración de mSQL .........................................................................29 Directivas de Configuración de Postgres ......................................................................29 SESAM Configuration Directives.................................................................................30 Directivas de Configuración de Sybase ........................................................................30 Directivas de Configuración de Sybase-CT ..................................................................31 Directivas de Configuración de Informix......................................................................32 Directivas de Configuración de Matemática BC...........................................................33 Directivas de Configuración de Capacidades de los Navegadores................................33 Directivas Unificadas de Configuración de ODBC.......................................................33 4. Seguridad......................................................................................................................................35 Binarios CGI...........................................................................................................................36 Posibles ataques ............................................................................................................36 Caso 1: solamente se sirven ficheros publicos ..............................................................37 Caso 2: usando --enable-force-cgi-redirect...................................................................37 Caso 3: Usando doc_root or user_dir............................................................................37 Caso 4: Analizador PHP fuera del arbol web. ..............................................................38 Modulo Apache ......................................................................................................................38 v
  • 6. II. Referencia del Lenguaje.....................................................................................................................40 5. Síntaxis básica..............................................................................................................................40 Saliendo de HTML .................................................................................................................41 Separación de instrucciones ...................................................................................................42 Comentarios............................................................................................................................43 6. Types ............................................................................................................................................44 Enteros....................................................................................................................................45 Números en punto flotante......................................................................................................45 Cadenas...................................................................................................................................45 Conversión de cadenas..................................................................................................47 Arrays .....................................................................................................................................48 Arrays unidimensionales...............................................................................................48 Arrays Multidimensionales...........................................................................................49 Objetos....................................................................................................................................50 Inicialización de Objetos...............................................................................................51 Type juggling..........................................................................................................................51 Forzado de tipos............................................................................................................52 7. Variables.......................................................................................................................................54 Conceptos Básicos..................................................................................................................55 Variables predefinidas.............................................................................................................56 Variables de Apache......................................................................................................56 Variables de entorno......................................................................................................58 Variables de PHP...........................................................................................................58 Ambito de las variables ..........................................................................................................59 Variables variables..................................................................................................................61 Variables externas a PHP........................................................................................................62 Formularios HTML (GET y POST) .............................................................................62 IMAGE SUBMIT variable names.......................................................................63 Cookies HTTP ..............................................................................................................63 Variables de entorno......................................................................................................64 Puntos en los nombres de variables de entrada.............................................................64 Determinando los tipos de variables .............................................................................65 8. Constantes ....................................................................................................................................66 Sintaxis ...................................................................................................................................67 Constantes predefinidas ..........................................................................................................68 9. Expresiones ..................................................................................................................................69 10. Operadores .................................................................................................................................73 Operadores Aritméticos..........................................................................................................74 Operadores de Asignación......................................................................................................74 Operadores Bit a bit................................................................................................................74 Operadores de Comparación ..................................................................................................75 Operador de ejecución............................................................................................................76 Operadores de Incremento/decremento ..................................................................................76 Operadores Lógicos................................................................................................................77 Precedencia de Operadores.....................................................................................................77 Operadores de Cadenas ..........................................................................................................78 11. Estructuras de Control................................................................................................................80 if ............................................................................................................................................81 vi
  • 7. else .......................................................................................................................................81 elseif ...................................................................................................................................82 Sintaxis Alternativa de Estructuras de Control.......................................................................82 while .....................................................................................................................................83 do..while .............................................................................................................................84 for ..........................................................................................................................................85 foreach .................................................................................................................................86 break .....................................................................................................................................88 continue ...............................................................................................................................89 switch ...................................................................................................................................90 require() ..................................................................................................................................92 include()..................................................................................................................................93 require_once().........................................................................................................................96 include_once() ........................................................................................................................98 12. Funciones .................................................................................................................................100 Funciones definidas por el usuario .......................................................................................101 Parámetros de las funciones .................................................................................................101 Pasar parámetros por referencia..................................................................................101 Parámetros por defecto ...............................................................................................102 Lista de longitud variable de parámetros ....................................................................103 Devolver valores ...................................................................................................................103 old_function ....................................................................................................................104 Funciones variable................................................................................................................104 13. Clases y Objetos.......................................................................................................................106 class ...................................................................................................................................107 14. References Explained...............................................................................................................110 What References Are............................................................................................................111 What References Do.............................................................................................................111 What References Are Not.....................................................................................................112 Passing by Reference............................................................................................................112 Returning References ...........................................................................................................113 Unsetting References............................................................................................................114 Spotting References..............................................................................................................114 global References.....................................................................................................114 $this ..........................................................................................................................115 III. Características.................................................................................................................................116 15. Manejando errores....................................................................................................................116 16. Creando y manipulando imágenes ...........................................................................................121 17. Autentificación HTTP con PHP ...............................................................................................123 18. Cookies.....................................................................................................................................126 19. Manejo de envío de ficheros.....................................................................................................128 Envío de archivos con el método POST ...............................................................................129 Errores comunes ...................................................................................................................131 Envío de multiples ficheros ..................................................................................................131 Soporte del método PUT ......................................................................................................132 20. Usando archivos remotos .........................................................................................................134 21. Manejando conexiones.............................................................................................................137 vii
  • 8. 22. Conexiones persistentes a bases de datos.................................................................................139 23. Modo Seguro (Safe Mode).......................................................................................................142 Funciones restringidas/inhabilitadas por Modo Seguro .......................................................144 24. Using PHP from the command line .........................................................................................149 IV. Referencia de las Funciones ...........................................................................................................162 I. Funciones específicas de Apache................................................................................................162 apache_child_terminate........................................................................................................163 apache_lookup_uri ...............................................................................................................163 apache_note ..........................................................................................................................164 apache_setenv .......................................................................................................................164 ascii2ebcdic ..........................................................................................................................164 ebcdic2ascii ..........................................................................................................................164 getallheaders .........................................................................................................................165 virtual....................................................................................................................................165 II. Funciones de matrices ...............................................................................................................167 array_change_key_case ........................................................................................................169 array_chunk ..........................................................................................................................169 array_count_values...............................................................................................................170 array_diff ..............................................................................................................................171 array_fill ...............................................................................................................................172 array_filter ............................................................................................................................172 array_flip...............................................................................................................................174 array_intersect ......................................................................................................................174 array_key_exists ...................................................................................................................175 array_keys.............................................................................................................................175 array_map .............................................................................................................................176 array_merge_recursive .........................................................................................................179 array_merge ..........................................................................................................................180 array_multisort .....................................................................................................................181 array_pad ..............................................................................................................................182 array_pop..............................................................................................................................183 array_push ............................................................................................................................183 array_rand.............................................................................................................................184 array_reduce .........................................................................................................................185 array_reverse ........................................................................................................................185 array_search..........................................................................................................................186 array_shift.............................................................................................................................186 array_slice.............................................................................................................................187 array_splice...........................................................................................................................188 array_sum .............................................................................................................................189 array_unique .........................................................................................................................190 array_unshift.........................................................................................................................191 array_values..........................................................................................................................192 array_walk ............................................................................................................................192 array......................................................................................................................................193 arsort .....................................................................................................................................194 asort ......................................................................................................................................194 viii
  • 9. compact.................................................................................................................................195 count .....................................................................................................................................195 current...................................................................................................................................196 each.......................................................................................................................................196 end ........................................................................................................................................198 extract ...................................................................................................................................198 in_array.................................................................................................................................199 key ........................................................................................................................................200 krsort.....................................................................................................................................200 ksort ......................................................................................................................................201 list .........................................................................................................................................201 natcasesort ............................................................................................................................202 natsort ...................................................................................................................................202 next .......................................................................................................................................203 pos.........................................................................................................................................204 prev .......................................................................................................................................204 rango .....................................................................................................................................204 reset.......................................................................................................................................205 rsort.......................................................................................................................................205 shuffle ...................................................................................................................................205 sizeof.....................................................................................................................................206 sort ........................................................................................................................................206 uasort ....................................................................................................................................206 uksort ....................................................................................................................................207 usort ......................................................................................................................................207 III. Funciones Aspell [deprecated].................................................................................................209 aspell_check-raw ..................................................................................................................210 aspell_check .........................................................................................................................210 aspell_new ............................................................................................................................210 aspell_suggest.......................................................................................................................211 IV. Funciones matemáticas de precisión arbitraria BCMath .........................................................212 bcadd.....................................................................................................................................213 bccomp .................................................................................................................................213 bcdiv .....................................................................................................................................213 bcmod ...................................................................................................................................213 bcmul ....................................................................................................................................213 bcpow....................................................................................................................................214 bcscale ..................................................................................................................................214 bcsqrt ....................................................................................................................................214 bcsub.....................................................................................................................................214 V. Funciones de compresión Bzip2 ...............................................................................................216 bzclose ..................................................................................................................................218 bzcompress ...........................................................................................................................218 bzdecompress .......................................................................................................................218 bzerrno..................................................................................................................................219 bzerror...................................................................................................................................219 bzerrstr..................................................................................................................................220 bzflush...................................................................................................................................220 ix
  • 10. bzopen...................................................................................................................................220 bzread ...................................................................................................................................221 bzwrite ..................................................................................................................................221 VI. Funciones de calendario...........................................................................................................223 cal_days_in_month...............................................................................................................225 cal_from_jd...........................................................................................................................225 cal_info .................................................................................................................................225 cal_to_jd ...............................................................................................................................225 easter_date ............................................................................................................................225 easter_days ...........................................................................................................................226 FrenchToJD ..........................................................................................................................227 GregorianToJD .....................................................................................................................227 JDDayOfWeek......................................................................................................................228 JDMonthName .....................................................................................................................228 JDToFrench ..........................................................................................................................229 JDToGregorian .....................................................................................................................229 JDToJewish...........................................................................................................................229 JDToJulian ............................................................................................................................229 jdtounix.................................................................................................................................229 JewishToJD...........................................................................................................................230 JulianToJD ............................................................................................................................230 unixtojd.................................................................................................................................230 VII. Funciones del API de CCVS ..................................................................................................232 ccvs_add ...............................................................................................................................233 ccvs_auth ..............................................................................................................................233 ccvs_command .....................................................................................................................233 ccvs_count ............................................................................................................................233 ccvs_delete ...........................................................................................................................234 ccvs_done .............................................................................................................................234 ccvs_init................................................................................................................................234 ccvs_lookup..........................................................................................................................235 ccvs_new ..............................................................................................................................235 ccvs_report ...........................................................................................................................235 ccvs_return ...........................................................................................................................236 ccvs_reverse..........................................................................................................................236 ccvs_sale...............................................................................................................................236 ccvs_status............................................................................................................................237 ccvs_textvalue ......................................................................................................................237 ccvs_void ..............................................................................................................................237 VIII. soporte de las funciones COM para Windows ......................................................................239 COM .....................................................................................................................................240 VARIANT.............................................................................................................................241 com_addref ...........................................................................................................................242 com_get ................................................................................................................................242 com_invoke...........................................................................................................................243 com_isenum..........................................................................................................................243 com_load_typelib .................................................................................................................243 com_load ..............................................................................................................................243 x
  • 11. com_propget .........................................................................................................................244 com_propput.........................................................................................................................244 com_propset .........................................................................................................................244 com_release ..........................................................................................................................244 com_set.................................................................................................................................244 IX. Funciones de Clases/Objectos .................................................................................................245 call_user_method_array .......................................................................................................248 call_user_method..................................................................................................................248 class_exists ...........................................................................................................................249 get_class_methods................................................................................................................249 get_class_vars.......................................................................................................................250 get_class ...............................................................................................................................252 get_declared_classes.............................................................................................................252 get_object_vars.....................................................................................................................252 get_parent_class ...................................................................................................................254 is_a........................................................................................................................................254 is_subclass_of.......................................................................................................................254 method_exists .......................................................................................................................254 X. Funciones de ClibPDF ..............................................................................................................256 cpdf_add_annotation ............................................................................................................259 cpdf_add_outline ..................................................................................................................259 cpdf_arc ................................................................................................................................259 cpdf_begin_text ....................................................................................................................260 cpdf_circle ............................................................................................................................260 cpdf_clip ...............................................................................................................................260 cpdf_close.............................................................................................................................261 cpdf_closepath_fill_stroke....................................................................................................261 cpdf_closepath_stroke ..........................................................................................................261 cpdf_closepath......................................................................................................................261 cpdf_continue_text ...............................................................................................................262 cpdf_curveto .........................................................................................................................262 cpdf_end_text .......................................................................................................................262 cpdf_fill_stroke.....................................................................................................................263 cpdf_fill.................................................................................................................................263 cpdf_finalize_page................................................................................................................263 cpdf_finalize .........................................................................................................................263 cpdf_global_set_document_limits........................................................................................264 cpdf_import_jpeg .................................................................................................................264 cpdf_lineto............................................................................................................................264 cpdf_moveto .........................................................................................................................265 cpdf_newpath........................................................................................................................265 cpdf_open .............................................................................................................................265 cpdf_output_buffer ...............................................................................................................266 cpdf_page_init ......................................................................................................................266 cpdf_place_inline_image......................................................................................................266 cpdf_rect ...............................................................................................................................267 cpdf_restore ..........................................................................................................................267 cpdf_rlineto...........................................................................................................................267 xi
  • 12. cpdf_rmoveto........................................................................................................................267 cpdf_rotate_text ....................................................................................................................268 cpdf_rotate............................................................................................................................268 cpdf_save_to_file..................................................................................................................268 cpdf_save ..............................................................................................................................269 cpdf_scale .............................................................................................................................269 cpdf_set_action_url ..............................................................................................................269 cpdf_set_char_spacing .........................................................................................................269 cpdf_set_creator ...................................................................................................................270 cpdf_set_current_page..........................................................................................................270 cpdf_set_font_directories .....................................................................................................270 cpdf_set_font_map_file ........................................................................................................270 cpdf_set_font ........................................................................................................................271 cpdf_set_horiz_scaling .........................................................................................................271 cpdf_set_keywords ...............................................................................................................271 cpdf_set_leading...................................................................................................................271 cpdf_set_page_animation .....................................................................................................272 cpdf_set_subject ...................................................................................................................272 cpdf_set_text_matrix ............................................................................................................272 cpdf_set_text_pos .................................................................................................................272 cpdf_set_text_rendering .......................................................................................................273 cpdf_set_text_rise.................................................................................................................273 cpdf_set_title ........................................................................................................................273 cpdf_set_viewer_preferences ...............................................................................................273 cpdf_set_word_spacing ........................................................................................................274 cpdf_setdash .........................................................................................................................274 cpdf_setflat ...........................................................................................................................274 cpdf_setgray_fill ...................................................................................................................274 cpdf_setgray_stroke..............................................................................................................275 cpdf_setgray .........................................................................................................................275 cpdf_setlinecap .....................................................................................................................275 cpdf_setlinejoin ....................................................................................................................275 cpdf_setlinewidth..................................................................................................................276 cpdf_setmiterlimit.................................................................................................................276 cpdf_setrgbcolor_fill.............................................................................................................276 cpdf_setrgbcolor_stroke .......................................................................................................276 cpdf_setrgbcolor ...................................................................................................................276 cpdf_show_xy.......................................................................................................................277 cpdf_show.............................................................................................................................277 cpdf_stringwidth...................................................................................................................277 cpdf_stroke ...........................................................................................................................278 cpdf_text ...............................................................................................................................278 cpdf_translate .......................................................................................................................278 XI. Crack functions ........................................................................................................................279 crack_check ..........................................................................................................................281 crack_closedict .....................................................................................................................281 crack_getlastmessage ...........................................................................................................281 crack_opendict......................................................................................................................282 xii
  • 13. XII. CURL, Client URL Library Functions ...................................................................................283 curl_close..............................................................................................................................284 curl_errno .............................................................................................................................284 curl_error ..............................................................................................................................284 curl_exec...............................................................................................................................284 curl_getinfo...........................................................................................................................285 curl_init.................................................................................................................................285 curl_setopt ............................................................................................................................285 curl_version ..........................................................................................................................288 XIII. Funciones de pago electrónico ..............................................................................................289 cybercash_base64_decode....................................................................................................290 cybercash_base64_encode....................................................................................................290 cybercash_decr .....................................................................................................................290 cybercash_encr .....................................................................................................................290 XIV. Crédit Mutuel CyberMUT functions ....................................................................................291 cybermut_creerformulairecm ...............................................................................................292 cybermut_creerreponsecm....................................................................................................292 cybermut_testmac.................................................................................................................293 XV. Cyrus IMAP administration functions ...................................................................................295 cyrus_authenticate ................................................................................................................296 cyrus_bind ............................................................................................................................296 cyrus_close ...........................................................................................................................296 cyrus_connect .......................................................................................................................296 cyrus_query ..........................................................................................................................297 cyrus_unbind ........................................................................................................................297 XVI. Character type functions .......................................................................................................298 ctype_alnum .........................................................................................................................299 ctype_alpha...........................................................................................................................299 ctype_cntrl ............................................................................................................................299 ctype_digit ............................................................................................................................299 ctype_graph ..........................................................................................................................299 ctype_lower ..........................................................................................................................300 ctype_print............................................................................................................................300 ctype_punct...........................................................................................................................300 ctype_space...........................................................................................................................300 ctype_upper ..........................................................................................................................301 ctype_xdigit ..........................................................................................................................301 XVII. Funciones de la capa de abstraccion de bases de datos (dbm-style)....................................302 dba_close ..............................................................................................................................304 dba_delete.............................................................................................................................304 dba_exists .............................................................................................................................304 dba_fetch ..............................................................................................................................304 dba_firstkey ..........................................................................................................................305 dba_insert .............................................................................................................................305 dba_nextkey..........................................................................................................................305 dba_open...............................................................................................................................306 dba_optimize ........................................................................................................................306 dba_popen.............................................................................................................................306 xiii
  • 14. dba_replace...........................................................................................................................307 dba_sync ...............................................................................................................................307 XVIII. Funciones de fecha y hora ..................................................................................................309 checkdate ..............................................................................................................................310 date .......................................................................................................................................310 getdate...................................................................................................................................311 gettimeofday .........................................................................................................................312 gmdate ..................................................................................................................................312 gmmktime.............................................................................................................................313 gmstrftime.............................................................................................................................313 localtime ...............................................................................................................................313 microtime..............................................................................................................................314 mktime..................................................................................................................................314 strftime..................................................................................................................................315 strtotime................................................................................................................................316 time .......................................................................................................................................317 XIX. Funciones para dBase ...........................................................................................................319 dbase_add_record .................................................................................................................320 dbase_close...........................................................................................................................320 dbase_create .........................................................................................................................320 dbase_delete_record .............................................................................................................321 dbase_get_record_with_names.............................................................................................321 dbase_get_record..................................................................................................................321 dbase_numfields ...................................................................................................................322 dbase_numrecords ................................................................................................................322 dbase_open ...........................................................................................................................322 dbase_pack ...........................................................................................................................323 dbase_replace_record ...........................................................................................................323 XX. Funciones dbm .......................................................................................................................324 dblist .....................................................................................................................................325 dbmclose...............................................................................................................................325 dbmdelete .............................................................................................................................325 dbmexists ..............................................................................................................................325 dbmfetch ...............................................................................................................................325 dbmfirstkey ...........................................................................................................................325 dbminsert ..............................................................................................................................326 dbmnextkey ..........................................................................................................................326 dbmopen ...............................................................................................................................326 dbmreplace ...........................................................................................................................327 XXI. dbx functions.........................................................................................................................328 dbx_close..............................................................................................................................331 dbx_compare ........................................................................................................................331 dbx_connect..........................................................................................................................332 dbx_error ..............................................................................................................................333 dbx_query .............................................................................................................................334 dbx_sort ................................................................................................................................337 XXII. DB++ Functions ..................................................................................................................339 dbplus_add............................................................................................................................343 xiv
  • 15. dbplus_aql.............................................................................................................................343 dbplus_chdir .........................................................................................................................343 dbplus_close .........................................................................................................................344 dbplus_curr ...........................................................................................................................344 dbplus_errcode .....................................................................................................................345 dbplus_errno .........................................................................................................................345 dbplus_find ...........................................................................................................................345 dbplus_first ...........................................................................................................................346 dbplus_flush..........................................................................................................................346 dbplus_freealllocks...............................................................................................................347 dbplus_freelock ....................................................................................................................347 dbplus_freerlocks .................................................................................................................347 dbplus_getlock......................................................................................................................348 dbplus_getunique..................................................................................................................348 dbplus_info ...........................................................................................................................349 dbplus_last............................................................................................................................349 dbplus_lockrel ......................................................................................................................349 dbplus_next...........................................................................................................................350 dbplus_open..........................................................................................................................350 dbplus_prev ..........................................................................................................................351 dbplus_rchperm ....................................................................................................................351 dbplus_rcreate.......................................................................................................................351 dbplus_rcrtexact....................................................................................................................352 dbplus_rcrtlike ......................................................................................................................352 dbplus_resolve ......................................................................................................................353 dbplus_restorepos .................................................................................................................353 dbplus_rkeys.........................................................................................................................353 dbplus_ropen ........................................................................................................................354 dbplus_rquery .......................................................................................................................354 dbplus_rrename ....................................................................................................................355 dbplus_rsecindex ..................................................................................................................355 dbplus_runlink......................................................................................................................355 dbplus_rzap...........................................................................................................................356 dbplus_savepos .....................................................................................................................356 dbplus_setindex ....................................................................................................................357 dbplus_setindexbynumber ....................................................................................................357 dbplus_sql.............................................................................................................................357 dbplus_tcl .............................................................................................................................358 dbplus_tremove ....................................................................................................................358 dbplus_undo .........................................................................................................................358 dbplus_undoprepare .............................................................................................................359 dbplus_unlockrel ..................................................................................................................359 dbplus_unselect ....................................................................................................................359 dbplus_update.......................................................................................................................360 dbplus_xlockrel ....................................................................................................................360 dbplus_xunlockrel ................................................................................................................360 XXIII. Direct IO functions.............................................................................................................362 dio_close...............................................................................................................................363 xv
  • 16. dio_fcntl................................................................................................................................363 dio_open ...............................................................................................................................363 dio_read ................................................................................................................................364 dio_seek................................................................................................................................364 dio_stat .................................................................................................................................365 dio_truncate ..........................................................................................................................365 dio_write...............................................................................................................................365 XXIV. Funciones con directorios ..................................................................................................367 chdir......................................................................................................................................368 chroot....................................................................................................................................368 dir..........................................................................................................................................368 closedir .................................................................................................................................369 getcwd...................................................................................................................................369 opendir..................................................................................................................................369 readdir...................................................................................................................................369 rewinddir...............................................................................................................................370 XXV. Funciones de DOM XML....................................................................................................371 DomAttribute->name ...........................................................................................................372 DomAttribute->specified ......................................................................................................372 DomAttribute->value............................................................................................................372 DomDocument->add_root [deprecated]...............................................................................372 DomDocument->create_attribute .........................................................................................373 DomDocument->create_cdata_section.................................................................................373 DomDocument->create_comment .......................................................................................373 DomDocument->create_element..........................................................................................374 DomDocument->create_entity_reference ............................................................................374 DomDocument->create_processing_instruction ..................................................................374 DomDocument->create_text_node.......................................................................................375 DomDocument->doctype .....................................................................................................375 DomDocument->document_element ...................................................................................375 DomDocument->dump_file..................................................................................................376 DomDocument->dump_mem...............................................................................................377 DomDocument->get_element_by_id ...................................................................................378 DomDocument->get_elements_by_tagname .......................................................................378 DomDocument->html_dump_mem .....................................................................................378 DomDocumentType->entities ..............................................................................................379 DomDocumentType->internal_subset..................................................................................379 DomDocumentType->name .................................................................................................379 DomDocumentType->notations ...........................................................................................380 DomDocumentType->public_id...........................................................................................380 DomDocumentType->system_id..........................................................................................381 DomElement->get_attribute_node .......................................................................................381 DomElement->get_attribute .................................................................................................381 DomElement->get_elements_by_tagname...........................................................................382 DomElement->has_attribute.................................................................................................382 DomElement->remove_attribute ..........................................................................................382 DomElement->set_attribute .................................................................................................383 DomElement->tagname........................................................................................................383 xvi
  • 17. DomNode->append_child ....................................................................................................383 DomNode->append_sibling .................................................................................................385 DomNode->attributes ...........................................................................................................386 DomNode->child_nodes.......................................................................................................386 DomNode->clone_node .......................................................................................................386 DomNode->dump_node .......................................................................................................386 DomNode->first_child..........................................................................................................387 DomNode->get_content .......................................................................................................387 DomNode->has_attributess ..................................................................................................387 DomNode->has_child_nodes ...............................................................................................387 DomNode->insert_before.....................................................................................................388 DomNode->is_blank_node...................................................................................................388 DomNode->last_child ..........................................................................................................389 DomNode->next_sibling ......................................................................................................389 DomNode->node_name .......................................................................................................390 DomNode->node_type .........................................................................................................390 DomNode->node_value........................................................................................................391 DomNode->owner_document ..............................................................................................391 DomNode->parent_node ......................................................................................................392 DomNode->prefix.................................................................................................................392 DomNode->previous_sibling ...............................................................................................393 DomNode->remove_child ....................................................................................................393 DomNode->replace_child ....................................................................................................394 DomNode->replace_node.....................................................................................................394 DomNode->set_content........................................................................................................394 DomNode->set_name...........................................................................................................395 DomNode->unlink_node......................................................................................................395 DomProcessingInstruction->data .........................................................................................395 DomProcessingInstruction->target.......................................................................................395 domxml_new_doc ................................................................................................................396 domxml_open_file................................................................................................................396 domxml_open_mem .............................................................................................................397 domxml_version ...................................................................................................................397 domxml_xmltree...................................................................................................................398 xpath_eval_expression..........................................................................................................398 xpath_eval.............................................................................................................................398 xpath_new_context ...............................................................................................................399 xptr_eval ...............................................................................................................................399 xptr_new_context .................................................................................................................399 XXVI. .NET functions ...................................................................................................................401 dotnet_load ...........................................................................................................................402 XXVII. Error Handling and Logging Functions ............................................................................403 error_log ...............................................................................................................................404 error_reporting......................................................................................................................405 restore_error_handler ...........................................................................................................405 set_error_handler..................................................................................................................405 trigger_error..........................................................................................................................408 user_error..............................................................................................................................408 xvii
  • 18. XXVIII. FrontBase Functions........................................................................................................410 fbsql_affected_rows..............................................................................................................412 fbsql_autocommit .................................................................................................................412 fbsql_change_user ................................................................................................................412 fbsql_close............................................................................................................................413 fbsql_commit........................................................................................................................413 fbsql_connect........................................................................................................................413 fbsql_create_blob .................................................................................................................414 fbsql_create_clob..................................................................................................................415 fbsql_create_db.....................................................................................................................415 fbsql_data_seek ....................................................................................................................416 fbsql_database_password .....................................................................................................417 fbsql_database ......................................................................................................................418 fbsql_db_query .....................................................................................................................418 fbsql_db_status .....................................................................................................................418 fbsql_drop_db.......................................................................................................................419 fbsql_errno............................................................................................................................419 fbsql_error ............................................................................................................................420 fbsql_fetch_array..................................................................................................................420 fbsql_fetch_assoc .................................................................................................................421 fbsql_fetch_field ...................................................................................................................422 fbsql_fetch_lengths...............................................................................................................423 fbsql_fetch_object ................................................................................................................423 fbsql_fetch_row ....................................................................................................................424 fbsql_field_flags ...................................................................................................................425 fbsql_field_len ......................................................................................................................425 fbsql_field_name ..................................................................................................................425 fbsql_field_seek....................................................................................................................426 fbsql_field_table ...................................................................................................................426 fbsql_field_type ....................................................................................................................426 fbsql_free_result ...................................................................................................................427 fbsql_get_autostart_info .......................................................................................................427 fbsql_hostname.....................................................................................................................428 fbsql_insert_id ......................................................................................................................428 fbsql_list_dbs........................................................................................................................429 fbsql_list_fields.....................................................................................................................429 fbsql_list_tables....................................................................................................................430 fbsql_next_result ..................................................................................................................430 fbsql_num_fields ..................................................................................................................431 fbsql_num_rows ...................................................................................................................431 fbsql_password .....................................................................................................................432 fbsql_pconnect......................................................................................................................432 fbsql_query ...........................................................................................................................433 fbsql_read_blob ....................................................................................................................434 fbsql_read_clob ....................................................................................................................435 fbsql_result ...........................................................................................................................435 fbsql_rollback .......................................................................................................................436 fbsql_select_db .....................................................................................................................436 xviii
  • 19. fbsql_set_lob_mode..............................................................................................................437 fbsql_set_transaction ............................................................................................................437 fbsql_start_db .......................................................................................................................437 fbsql_stop_db .......................................................................................................................438 fbsql_tablename....................................................................................................................438 fbsql_username.....................................................................................................................439 fbsql_warnings .....................................................................................................................439 XXIX. Funciones filePro................................................................................................................440 filepro_fieldcount..................................................................................................................441 filepro_fieldname..................................................................................................................441 filepro_fieldtype....................................................................................................................441 filepro_fieldwidth .................................................................................................................441 filepro_retrieve......................................................................................................................441 filepro_rowcount...................................................................................................................441 filepro....................................................................................................................................442 XXX. Funciones del sistema de ficheros .......................................................................................443 basename ..............................................................................................................................444 chgrp .....................................................................................................................................444 chmod ...................................................................................................................................444 chown....................................................................................................................................445 clearstatcache........................................................................................................................445 copy ......................................................................................................................................445 delete.....................................................................................................................................446 dirname .................................................................................................................................446 disk_free_space ....................................................................................................................447 disk_total_space ...................................................................................................................447 diskfreespace ........................................................................................................................447 fclose.....................................................................................................................................448 feof........................................................................................................................................448 fflush .....................................................................................................................................448 fgetc ......................................................................................................................................449 fgetcsv...................................................................................................................................449 fgets ......................................................................................................................................450 fgetss.....................................................................................................................................450 file_exists ..............................................................................................................................451 file_get_contents...................................................................................................................451 file_get_wrapper_data ..........................................................................................................451 file_register_wrapper ............................................................................................................452 file .........................................................................................................................................453 fileatime ................................................................................................................................453 filectime ................................................................................................................................454 filegroup................................................................................................................................454 fileinode ................................................................................................................................454 filemtime...............................................................................................................................454 fileowner ...............................................................................................................................455 fileperms ...............................................................................................................................455 filesize...................................................................................................................................455 filetype ..................................................................................................................................455 xix
  • 20. flock ......................................................................................................................................455 fopen .....................................................................................................................................456 fpassthru ...............................................................................................................................457 fputs ......................................................................................................................................458 fread......................................................................................................................................458 fscanf ....................................................................................................................................458 fseek......................................................................................................................................459 fstat .......................................................................................................................................460 ftell........................................................................................................................................460 ftruncate................................................................................................................................460 fwrite.....................................................................................................................................461 glob .......................................................................................................................................461 is_dir .....................................................................................................................................462 is_executable ........................................................................................................................462 is_file ....................................................................................................................................462 is_link ...................................................................................................................................462 is_readable............................................................................................................................463 is_uploaded_file....................................................................................................................463 is_writable ............................................................................................................................464 is_writeable...........................................................................................................................464 link........................................................................................................................................465 linkinfo .................................................................................................................................465 lstat .......................................................................................................................................465 mkdir.....................................................................................................................................466 move_uploaded_file..............................................................................................................466 parse_ini_file ........................................................................................................................467 pathinfo.................................................................................................................................469 pclose....................................................................................................................................470 popen ....................................................................................................................................470 readfile ..................................................................................................................................470 readlink .................................................................................................................................471 realpath .................................................................................................................................471 rename ..................................................................................................................................472 rewind ...................................................................................................................................472 rmdir .....................................................................................................................................472 set_file_buffer .......................................................................................................................472 stat.........................................................................................................................................473 symlink .................................................................................................................................473 tempnam ...............................................................................................................................474 tmpfile...................................................................................................................................474 touch .....................................................................................................................................475 umask....................................................................................................................................475 unlink....................................................................................................................................475 XXXI. Funciones Forms Data Format (Formato de Datos de Formularios)..................................476 fdf_add_template..................................................................................................................478 fdf_close ...............................................................................................................................478 fdf_create..............................................................................................................................478 fdf_get_file ...........................................................................................................................479 xx
  • 21. fdf_get_status .......................................................................................................................479 fdf_get_value ........................................................................................................................479 fdf_next_field_name.............................................................................................................479 fdf_open................................................................................................................................480 fdf_save ................................................................................................................................480 fdf_set_ap .............................................................................................................................480 fdf_set_encoding ..................................................................................................................481 fdf_set_file............................................................................................................................481 fdf_set_flags .........................................................................................................................481 fdf_set_javascript_action......................................................................................................481 fdf_set_opt............................................................................................................................482 fdf_set_status........................................................................................................................482 fdf_set_submit_form_action.................................................................................................482 fdf_set_value ........................................................................................................................482 XXXII. FriBiDi functions ..............................................................................................................484 fribidi_log2vis ......................................................................................................................486 XXXIII. Funciones FTP.................................................................................................................487 ftp_cdup................................................................................................................................488 ftp_chdir ...............................................................................................................................488 ftp_close ...............................................................................................................................488 ftp_connect ...........................................................................................................................488 ftp_delete ..............................................................................................................................488 ftp_exec ................................................................................................................................489 ftp_fget .................................................................................................................................489 ftp_fput .................................................................................................................................489 ftp_get_option.......................................................................................................................489 ftp_get...................................................................................................................................490 ftp_login ...............................................................................................................................490 ftp_mdtm ..............................................................................................................................491 ftp_mkdir ..............................................................................................................................491 ftp_nlist.................................................................................................................................491 ftp_pasv ................................................................................................................................491 ftp_put...................................................................................................................................492 ftp_pwd.................................................................................................................................492 ftp_quit .................................................................................................................................492 ftp_rawlist.............................................................................................................................492 ftp_rename............................................................................................................................493 ftp_rmdir...............................................................................................................................493 ftp_set_option .......................................................................................................................493 ftp_site ..................................................................................................................................494 ftp_size .................................................................................................................................494 ftp_systype............................................................................................................................494 XXXIV. Function Handling functions...........................................................................................496 call_user_func_array ............................................................................................................497 call_user_func.......................................................................................................................497 create_function .....................................................................................................................498 func_get_arg .........................................................................................................................500 func_get_args........................................................................................................................501 xxi
  • 22. func_num_args .....................................................................................................................501 function_exists......................................................................................................................502 get_defined_functions...........................................................................................................502 register_shutdown_function .................................................................................................503 register_tick_function...........................................................................................................503 unregister_tick_function.......................................................................................................504 XXXV. GNU Gettext.....................................................................................................................505 bind_textdomain_codeset .....................................................................................................506 bindtextdomain .....................................................................................................................506 dcgettext ...............................................................................................................................506 dcngettext .............................................................................................................................506 dgettext .................................................................................................................................507 dngettext ...............................................................................................................................507 gettext ...................................................................................................................................507 ngettext .................................................................................................................................508 textdomain ............................................................................................................................508 XXXVI. GMP functions ................................................................................................................509 gmp_abs................................................................................................................................510 gmp_add ...............................................................................................................................510 gmp_and ...............................................................................................................................510 gmp_clrbit.............................................................................................................................510 gmp_cmp ..............................................................................................................................510 gmp_com ..............................................................................................................................510 gmp_div_q ............................................................................................................................511 gmp_div_qr...........................................................................................................................511 gmp_div_r.............................................................................................................................512 gmp_div ................................................................................................................................512 gmp_divexact........................................................................................................................512 gmp_fact ...............................................................................................................................512 gmp_gcd ...............................................................................................................................513 gmp_gcdext ..........................................................................................................................513 gmp_hamdist ........................................................................................................................513 gmp_init................................................................................................................................513 gmp_intval ............................................................................................................................514 gmp_invert............................................................................................................................514 gmp_jacobi ...........................................................................................................................514 gmp_legendre .......................................................................................................................515 gmp_mod..............................................................................................................................515 gmp_mul...............................................................................................................................515 gmp_neg ...............................................................................................................................515 gmp_or..................................................................................................................................515 gmp_perfect_square .............................................................................................................516 gmp_popcount ......................................................................................................................516 gmp_pow ..............................................................................................................................516 gmp_powm ...........................................................................................................................516 gmp_prob_prime ..................................................................................................................516 gmp_random.........................................................................................................................517 gmp_scan0............................................................................................................................517 xxii
  • 23. gmp_scan1............................................................................................................................517 gmp_setbit ............................................................................................................................517 gmp_sign ..............................................................................................................................517 gmp_sqrt ...............................................................................................................................518 gmp_sqrtrm...........................................................................................................................518 gmp_strval ............................................................................................................................518 gmp_sub ...............................................................................................................................518 gmp_xor................................................................................................................................519 XXXVII. Funciones HTTP ............................................................................................................520 header ...................................................................................................................................521 headers_sent .........................................................................................................................521 setcookie ...............................................................................................................................522 XXXVIII. Funciones para Hyperwave...........................................................................................524 hw_Array2Objrec .................................................................................................................529 hw_changeobject ..................................................................................................................529 hw_Children .........................................................................................................................529 hw_ChildrenObj ...................................................................................................................529 hw_Close ..............................................................................................................................529 hw_Connect..........................................................................................................................530 hw_connection_info .............................................................................................................530 hw_Cp...................................................................................................................................530 hw_Deleteobject ...................................................................................................................531 hw_DocByAnchor................................................................................................................531 hw_DocByAnchorObj..........................................................................................................531 hw_Document_Attributes.....................................................................................................531 hw_Document_BodyTag ......................................................................................................532 hw_Document_Content........................................................................................................532 hw_Document_SetContent...................................................................................................532 hw_Document_Size..............................................................................................................532 hw_dummy ...........................................................................................................................533 hw_EditText..........................................................................................................................533 hw_Error...............................................................................................................................533 hw_ErrorMsg........................................................................................................................533 hw_Free_Document .............................................................................................................534 hw_GetAnchors....................................................................................................................534 hw_GetAnchorsObj..............................................................................................................534 hw_GetAndLock ..................................................................................................................534 hw_GetChildColl..................................................................................................................534 hw_GetChildCollObj............................................................................................................535 hw_GetChildDocColl ...........................................................................................................535 hw_GetChildDocCollObj .....................................................................................................535 hw_GetObject.......................................................................................................................535 hw_GetObjectByQuery ........................................................................................................536 hw_GetObjectByQueryColl .................................................................................................536 hw_GetObjectByQueryCollObj ...........................................................................................537 hw_GetObjectByQueryObj ..................................................................................................537 hw_GetParents......................................................................................................................537 hw_GetParentsObj................................................................................................................538 xxiii
  • 24. hw_getrellink........................................................................................................................538 hw_GetRemote .....................................................................................................................538 hw_GetRemoteChildren .......................................................................................................539 hw_GetSrcByDestObj ..........................................................................................................539 hw_GetText ..........................................................................................................................539 hw_Username .......................................................................................................................540 hw_Identify...........................................................................................................................540 hw_InCollections..................................................................................................................540 hw_Info.................................................................................................................................541 hw_InsColl ...........................................................................................................................541 hw_InsDoc............................................................................................................................541 hw_insertanchors..................................................................................................................541 hw_InsertDocument .............................................................................................................542 hw_InsertObject ...................................................................................................................542 hw_mapid .............................................................................................................................542 hw_Modifyobject .................................................................................................................543 hw_Mv..................................................................................................................................545 hw_New_Document .............................................................................................................546 hw_Objrec2Array .................................................................................................................546 hw_Output_Document .........................................................................................................546 hw_pConnect........................................................................................................................546 hw_PipeDocument ...............................................................................................................547 hw_Root ...............................................................................................................................547 hw_setlinkroot ......................................................................................................................547 hw_stat..................................................................................................................................548 hw_Unlock ...........................................................................................................................548 hw_Who ...............................................................................................................................548 XXXIX. Hyperwave API functions ...............................................................................................549 hw_api_attribute->key..........................................................................................................551 hw_api_attribute->langdepvalue ..........................................................................................551 hw_api_attribute->value .......................................................................................................551 hw_api_attribute->values .....................................................................................................551 hw_api_attribute ...................................................................................................................551 hw_api->checkin ..................................................................................................................552 hw_api->checkout ................................................................................................................552 hw_api->children..................................................................................................................553 hw_api_content->mimetype .................................................................................................553 hw_api_content->read ..........................................................................................................553 hw_api->content ...................................................................................................................553 hw_api->copy .......................................................................................................................554 hw_api->dbstat .....................................................................................................................554 hw_api->dcstat .....................................................................................................................554 hw_api->dstanchors..............................................................................................................554 hw_api->dstofsrcanchors......................................................................................................555 hw_api_error->count ............................................................................................................555 hw_api_error->reason...........................................................................................................555 hw_api->find.........................................................................................................................555 hw_api->ftstat.......................................................................................................................556 xxiv
  • 25. hwapi_hgcsp .........................................................................................................................556 hw_api->hwstat ....................................................................................................................556 hw_api->identify ..................................................................................................................556 hw_api->info ........................................................................................................................557 hw_api->insert......................................................................................................................557 hw_api->insertanchor ...........................................................................................................558 hw_api->insertcollection ......................................................................................................558 hw_api->insertdocument ......................................................................................................558 hw_api->link.........................................................................................................................559 hw_api->lock........................................................................................................................559 hw_api->move ......................................................................................................................559 hw_api_content.....................................................................................................................559 hw_api_object->assign .........................................................................................................560 hw_api_object->attreditable .................................................................................................560 hw_api_object->count ..........................................................................................................560 hw_api_object->insert ..........................................................................................................560 hw_api_object.......................................................................................................................560 hw_api_object->remove .......................................................................................................561 hw_api_object->title.............................................................................................................561 hw_api_object->value ..........................................................................................................561 hw_api->object .....................................................................................................................561 hw_api->objectbyanchor ......................................................................................................563 hw_api->parents ...................................................................................................................563 hw_api_reason->description.................................................................................................563 hw_api_reason->type ...........................................................................................................563 hw_api->remove...................................................................................................................563 hw_api->replace ...................................................................................................................564 hw_api->setcommitedversion...............................................................................................565 hw_api->srcanchors..............................................................................................................565 hw_api->srcsofdst.................................................................................................................565 hw_api->unlock....................................................................................................................565 hw_api->user ........................................................................................................................566 hw_api->userlist ...................................................................................................................566 XL. Funciones para ICAP - Internet Calendar Application Protocol ............................................567 icap_close .............................................................................................................................568 icap_create_calendar ............................................................................................................568 icap_delete_calendar ............................................................................................................568 icap_delete_event .................................................................................................................568 icap_fetch_event ...................................................................................................................569 icap_list_alarms....................................................................................................................569 icap_list_events ....................................................................................................................570 icap_open..............................................................................................................................570 icap_rename_calendar ..........................................................................................................571 icap_reopen...........................................................................................................................571 icap_snooze ..........................................................................................................................571 icap_store_event ...................................................................................................................571 XLI. iconv functions ......................................................................................................................573 iconv_get_encoding..............................................................................................................574 xxv
  • 26. iconv_set_encoding ..............................................................................................................574 iconv .....................................................................................................................................574 ob_iconv_handler .................................................................................................................575 XLII. Funciones para imágenes .....................................................................................................576 exif_imagetype .....................................................................................................................577 exif_read_data ......................................................................................................................577 exif_thumbnail......................................................................................................................580 GetImageSize .......................................................................................................................580 image_type_to_mime_type ..................................................................................................581 image2wbmp ........................................................................................................................582 imagealphablending..............................................................................................................582 ImageArc ..............................................................................................................................583 ImageChar ............................................................................................................................583 ImageCharUp .......................................................................................................................583 ImageColorAllocate .............................................................................................................583 ImageColorAt .......................................................................................................................584 ImageColorClosest ...............................................................................................................584 imagecolorclosestalpha.........................................................................................................584 imagecolorclosesthwb ..........................................................................................................585 imagecolordeallocate............................................................................................................585 ImageColorExact..................................................................................................................585 imagecolorexactalpha ...........................................................................................................586 ImageColorResolve ..............................................................................................................586 imagecolorresolvealpha ........................................................................................................586 ImageColorSet......................................................................................................................586 ImageColorsForIndex...........................................................................................................587 ImageColorsTotal .................................................................................................................587 ImageColorTransparent ........................................................................................................587 imagecopy.............................................................................................................................587 imagecopymerge...................................................................................................................588 imagecopymergegray............................................................................................................588 imagecopyresampled ............................................................................................................589 ImageCopyResized...............................................................................................................589 ImageCreate..........................................................................................................................589 imagecreatefromgd2 .............................................................................................................589 imagecreatefromgd2part.......................................................................................................590 imagecreatefromgd ...............................................................................................................590 ImageCreateFromGif............................................................................................................590 imagecreatefromjpeg ............................................................................................................591 imagecreatefrompng .............................................................................................................592 imagecreatefromstring..........................................................................................................593 imagecreatefromwbmp .........................................................................................................593 imagecreatefromxbm............................................................................................................594 imagecreatefromxpm............................................................................................................594 imagecreatetruecolor ............................................................................................................594 ImageDashedLine.................................................................................................................594 ImageDestroy .......................................................................................................................595 imageellipse..........................................................................................................................595 xxvi
  • 27. ImageFill...............................................................................................................................595 imagefilledarc .......................................................................................................................595 imagefilledellipse..................................................................................................................596 ImageFilledPolygon .............................................................................................................596 ImageFilledRectangle...........................................................................................................596 ImageFillToBorder ...............................................................................................................597 ImageFontHeight ..................................................................................................................597 ImageFontWidth ...................................................................................................................597 imageftbbox..........................................................................................................................597 imagefttext ............................................................................................................................598 imagegammacorrect..............................................................................................................598 imagegd2 ..............................................................................................................................598 imagegd ................................................................................................................................599 ImageGif...............................................................................................................................599 ImageInterlace ......................................................................................................................599 imagejpeg .............................................................................................................................600 ImageLine.............................................................................................................................600 ImageLoadFont.....................................................................................................................600 imagepalettecopy ..................................................................................................................601 imagepng ..............................................................................................................................601 ImagePolygon.......................................................................................................................602 ImagePSBBox ......................................................................................................................602 ImagePSCopyFont................................................................................................................603 ImagePSEncodeFont ............................................................................................................603 imagepsextendfont................................................................................................................604 ImagePSFreeFont .................................................................................................................604 ImagePSLoadFont ................................................................................................................604 imagepsslantfont...................................................................................................................604 ImagePSText.........................................................................................................................605 ImageRectangle ....................................................................................................................605 imagesetbrush .......................................................................................................................606 ImageSetPixel.......................................................................................................................606 imagesetstyle ........................................................................................................................606 imagesetthickness .................................................................................................................607 imagesettile...........................................................................................................................608 ImageString ..........................................................................................................................608 ImageStringUp .....................................................................................................................608 ImageSX ...............................................................................................................................609 ImageSY ...............................................................................................................................609 imagetruecolortopalette ........................................................................................................609 ImageTTFBBox....................................................................................................................609 ImageTTFText ......................................................................................................................610 imagetypes............................................................................................................................611 imagewbmp ..........................................................................................................................612 iptcembed .............................................................................................................................612 iptcparse................................................................................................................................613 jpeg2wbmp ...........................................................................................................................613 png2wbmp ............................................................................................................................613 xxvii
  • 28. read_exif_data ......................................................................................................................614 XLIII. Funciones IMAP .................................................................................................................615 imap_8bit..............................................................................................................................616 imap_alerts ...........................................................................................................................616 imap_append.........................................................................................................................616 imap_base64 .........................................................................................................................616 imap_binary..........................................................................................................................616 imap_body ............................................................................................................................617 imap_bodystruct ...................................................................................................................617 imap_check...........................................................................................................................617 imap_clearflag_full...............................................................................................................618 imap_close............................................................................................................................618 imap_createmailbox .............................................................................................................618 imap_delete...........................................................................................................................619 imap_deletemailbox .............................................................................................................619 imap_errors...........................................................................................................................619 imap_expunge.......................................................................................................................619 imap_fetch_overview ...........................................................................................................620 imap_fetchbody ....................................................................................................................621 imap_fetchheader .................................................................................................................621 imap_fetchstructure ..............................................................................................................622 imap_get_quota ....................................................................................................................623 imap_getmailboxes...............................................................................................................624 imap_getsubscribed ..............................................................................................................625 imap_header .........................................................................................................................625 imap_headerinfo ...................................................................................................................627 imap_headers........................................................................................................................629 imap_last_error.....................................................................................................................629 imap_listmailbox ..................................................................................................................629 imap_listsubscribed ..............................................................................................................630 imap_mail_compose.............................................................................................................630 imap_mail_copy ...................................................................................................................631 imap_mail_move ..................................................................................................................631 imap_mail .............................................................................................................................631 imap_mailboxmsginfo..........................................................................................................632 imap_mime_header_decode .................................................................................................632 imap_msgno .........................................................................................................................633 imap_num_msg ....................................................................................................................633 imap_num_recent .................................................................................................................633 imap_open ............................................................................................................................633 imap_ping .............................................................................................................................634 imap_popen ..........................................................................................................................634 imap_qprint...........................................................................................................................635 imap_renamemailbox ...........................................................................................................635 imap_reopen .........................................................................................................................635 imap_rfc822_parse_adrlist ...................................................................................................636 imap_rfc822_parse_headers .................................................................................................636 imap_rfc822_write_address .................................................................................................636 xxviii
  • 29. imap_scanmailbox................................................................................................................636 imap_search..........................................................................................................................637 imap_set_quota.....................................................................................................................638 imap_setacl ...........................................................................................................................638 imap_setflag_full ..................................................................................................................639 imap_sort ..............................................................................................................................639 imap_status ...........................................................................................................................640 imap_subscribe .....................................................................................................................640 imap_thread ..........................................................................................................................641 imap_uid ...............................................................................................................................641 imap_undelete.......................................................................................................................641 imap_unsubscribe .................................................................................................................641 imap_utf7_decode ................................................................................................................642 imap_utf7_encode ................................................................................................................642 imap_utf8..............................................................................................................................642 XLIV. Funciones para Informix.....................................................................................................643 ifx_affected_rows .................................................................................................................645 ifx_blobinfile_mode .............................................................................................................645 ifx_byteasvarchar..................................................................................................................645 ifx_close ...............................................................................................................................646 ifx_connect ...........................................................................................................................646 ifx_copy_blob.......................................................................................................................647 ifx_create_blob .....................................................................................................................647 ifx_create_char .....................................................................................................................647 ifx_do....................................................................................................................................647 ifx_error................................................................................................................................648 ifx_errormsg .........................................................................................................................648 ifx_fetch_row........................................................................................................................649 ifx_fieldproperties.................................................................................................................650 ifx_fieldtypes ........................................................................................................................650 ifx_free_blob ........................................................................................................................651 ifx_free_char.........................................................................................................................651 ifx_free_result.......................................................................................................................651 ifx_get_blob..........................................................................................................................652 ifx_get_char..........................................................................................................................652 ifx_getsqlca...........................................................................................................................652 ifx_htmltbl_result .................................................................................................................653 ifx_nullformat.......................................................................................................................653 ifx_num_fields......................................................................................................................654 ifx_num_rows.......................................................................................................................654 ifx_pconnect .........................................................................................................................654 ifx_prepare............................................................................................................................654 ifx_query...............................................................................................................................655 ifx_textasvarchar ..................................................................................................................657 ifx_update_blob....................................................................................................................657 ifx_update_char ....................................................................................................................657 ifxus_close_slob ...................................................................................................................657 ifxus_create_slob..................................................................................................................657 xxix
  • 30. ifx_free_slob.........................................................................................................................658 ifxus_open_slob....................................................................................................................658 ifxus_read_slob.....................................................................................................................658 ifxus_seek_slob ....................................................................................................................658 ifxus_tell_slob ......................................................................................................................659 ifxus_write_slob ...................................................................................................................659 XLV. Funciones InterBase .............................................................................................................660 ibase_blob_add .....................................................................................................................661 ibase_blob_cancel.................................................................................................................661 ibase_blob_close...................................................................................................................661 ibase_blob_create .................................................................................................................661 ibase_blob_echo ...................................................................................................................662 ibase_blob_get......................................................................................................................662 ibase_blob_import ................................................................................................................662 ibase_blob_info ....................................................................................................................663 ibase_blob_open ...................................................................................................................663 ibase_close............................................................................................................................663 ibase_commit........................................................................................................................664 ibase_connect .......................................................................................................................664 ibase_errmsg.........................................................................................................................664 ibase_execute........................................................................................................................664 ibase_fetch_object ................................................................................................................664 ibase_fetch_row....................................................................................................................665 ibase_field_info ....................................................................................................................665 ibase_free_query...................................................................................................................666 ibase_free_result...................................................................................................................666 ibase_num_fields ..................................................................................................................666 ibase_pconnect .....................................................................................................................666 ibase_prepare........................................................................................................................667 ibase_query...........................................................................................................................667 ibase_rollback.......................................................................................................................667 ibase_timefmt .......................................................................................................................667 ibase_trans ............................................................................................................................667 XLVI. Ingres II functions ...............................................................................................................668 ingres_autocommit ...............................................................................................................669 ingres_close ..........................................................................................................................669 ingres_commit ......................................................................................................................669 ingres_connect......................................................................................................................669 ingres_fetch_array ................................................................................................................670 ingres_fetch_object...............................................................................................................671 ingres_fetch_row ..................................................................................................................672 ingres_field_length ...............................................................................................................673 ingres_field_name.................................................................................................................673 ingres_field_nullable ............................................................................................................673 ingres_field_precision...........................................................................................................673 ingres_field_scale .................................................................................................................674 ingres_field_type ..................................................................................................................674 ingres_num_fields.................................................................................................................674 xxx
  • 31. ingres_num_rows..................................................................................................................675 ingres_pconnect....................................................................................................................675 ingres_query .........................................................................................................................675 ingres_rollback .....................................................................................................................676 XLVII. IRC Gateway Functions.....................................................................................................678 ircg_channel_mode...............................................................................................................679 ircg_disconnect.....................................................................................................................679 ircg_fetch_error_msg ...........................................................................................................679 ircg_get_username................................................................................................................679 ircg_html_encode .................................................................................................................680 ircg_ignore_add....................................................................................................................680 ircg_ignore_del.....................................................................................................................680 ircg_is_conn_alive................................................................................................................680 ircg_join................................................................................................................................681 ircg_kick ...............................................................................................................................681 ircg_lookup_format_messages .............................................................................................681 ircg_msg ...............................................................................................................................681 ircg_nick ...............................................................................................................................682 ircg_nickname_escape..........................................................................................................682 ircg_nickname_unescape......................................................................................................682 ircg_notice ............................................................................................................................682 ircg_part................................................................................................................................682 ircg_pconnect .......................................................................................................................683 ircg_register_format_messages ............................................................................................683 ircg_set_current ....................................................................................................................685 ircg_set_file ..........................................................................................................................685 ircg_set_on_die.....................................................................................................................685 ircg_topic..............................................................................................................................685 ircg_whois ............................................................................................................................686 XLVIII. Java ...................................................................................................................................687 java_last_exception_clear.....................................................................................................690 java_last_exception_get........................................................................................................690 XLIX. Funciones LDAP ................................................................................................................691 ldap_8859_to_t61 .................................................................................................................694 ldap_add ...............................................................................................................................694 ldap_bind ..............................................................................................................................695 ldap_close .............................................................................................................................695 ldap_compare .......................................................................................................................695 ldap_connect.........................................................................................................................697 ldap_count_entries................................................................................................................697 ldap_delete............................................................................................................................697 ldap_dn2ufn..........................................................................................................................697 ldap_err2str...........................................................................................................................698 ldap_errno.............................................................................................................................698 ldap_error .............................................................................................................................699 ldap_explode_dn...................................................................................................................699 ldap_first_attribute................................................................................................................699 ldap_first_entry.....................................................................................................................700 xxxi
  • 32. ldap_first_reference ..............................................................................................................700 ldap_free_result ....................................................................................................................700 ldap_get_attributes................................................................................................................701 ldap_get_dn ..........................................................................................................................702 ldap_get_entries....................................................................................................................702 ldap_get_option ....................................................................................................................703 ldap_get_values_len .............................................................................................................703 ldap_get_values ....................................................................................................................704 ldap_list ................................................................................................................................705 ldap_mod_add ......................................................................................................................705 ldap_mod_del .......................................................................................................................706 ldap_mod_replace.................................................................................................................706 ldap_modify..........................................................................................................................706 ldap_next_attribute ...............................................................................................................707 ldap_next_entry ....................................................................................................................707 ldap_next_reference..............................................................................................................707 ldap_parse_reference............................................................................................................707 ldap_parse_result..................................................................................................................708 ldap_read ..............................................................................................................................708 ldap_rename .........................................................................................................................708 ldap_search ...........................................................................................................................709 ldap_set_option.....................................................................................................................710 ldap_set_rebind_proc ...........................................................................................................711 ldap_sort ...............................................................................................................................711 ldap_start_tls.........................................................................................................................712 ldap_t61_to_8859 .................................................................................................................712 ldap_unbind ..........................................................................................................................712 L. Funciones de Correo ..................................................................................................................713 ezmlm_hash..........................................................................................................................714 mail .......................................................................................................................................714 LI. mailparse functions ..................................................................................................................716 mailparse_determine_best_xfer_encoding ...........................................................................717 mailparse_msg_create ..........................................................................................................717 mailparse_msg_extract_part_file..........................................................................................717 mailparse_msg_extract_part.................................................................................................718 mailparse_msg_free..............................................................................................................718 mailparse_msg_get_part_data ..............................................................................................719 mailparse_msg_get_part.......................................................................................................719 mailparse_msg_get_structure ...............................................................................................720 mailparse_msg_parse_file ....................................................................................................720 mailparse_msg_parse ...........................................................................................................721 mailparse_rfc822_parse_addresses ......................................................................................721 mailparse_stream_encode.....................................................................................................722 mailparse_uudecode_all .......................................................................................................722 LII. Funciones matemáticas ...........................................................................................................724 abs.........................................................................................................................................725 acos .......................................................................................................................................725 acosh .....................................................................................................................................725 xxxii
  • 33. asin........................................................................................................................................725 asinh......................................................................................................................................725 atan2 .....................................................................................................................................726 atan .......................................................................................................................................726 atanh .....................................................................................................................................726 base_convert .........................................................................................................................727 BinDec..................................................................................................................................727 ceil ........................................................................................................................................727 cos.........................................................................................................................................728 cosh.......................................................................................................................................728 DecBin..................................................................................................................................728 DecHex .................................................................................................................................728 DecOct..................................................................................................................................728 deg2rad .................................................................................................................................729 exp ........................................................................................................................................729 expm1 ...................................................................................................................................729 floor.......................................................................................................................................730 getrandmax ...........................................................................................................................730 HexDec .................................................................................................................................730 hypot .....................................................................................................................................730 is_finite .................................................................................................................................731 is_infinite ..............................................................................................................................731 is_nan....................................................................................................................................731 lcg_value...............................................................................................................................731 log10 .....................................................................................................................................732 log1p .....................................................................................................................................732 log .........................................................................................................................................732 max .......................................................................................................................................733 min........................................................................................................................................733 mt_getrandmax .....................................................................................................................733 mt_rand.................................................................................................................................733 mt_srand ...............................................................................................................................734 number_format .....................................................................................................................734 OctDec..................................................................................................................................735 pi ...........................................................................................................................................735 pow .......................................................................................................................................735 rad2deg .................................................................................................................................735 rand .......................................................................................................................................736 round.....................................................................................................................................736 sin .........................................................................................................................................736 sinh .......................................................................................................................................736 sqrt ........................................................................................................................................737 srand .....................................................................................................................................737 tan .........................................................................................................................................737 tanh .......................................................................................................................................737 LIII. Multi-Byte String Functions ..................................................................................................739 mb_convert_encoding...........................................................................................................747 mb_convert_kana..................................................................................................................747 xxxiii
  • 34. mb_convert_variables...........................................................................................................748 mb_decode_mimeheader......................................................................................................749 mb_decode_numericentity ...................................................................................................749 mb_detect_encoding.............................................................................................................750 mb_detect_order ...................................................................................................................750 mb_encode_mimeheader......................................................................................................752 mb_encode_numericentity ...................................................................................................752 mb_ereg_match ....................................................................................................................753 mb_ereg_replace...................................................................................................................754 mb_ereg_search_getpos........................................................................................................755 mb_ereg_search_getregs ......................................................................................................755 mb_ereg_search_init.............................................................................................................756 mb_ereg_search_pos ............................................................................................................756 mb_ereg_search_regs ...........................................................................................................757 mb_ereg_search_setpos ........................................................................................................758 mb_ereg_search ....................................................................................................................758 mb_ereg ................................................................................................................................759 mb_eregi_replace..................................................................................................................759 mb_eregi ...............................................................................................................................760 mb_get_info..........................................................................................................................760 mb_http_input.......................................................................................................................761 mb_http_output.....................................................................................................................761 mb_internal_encoding ..........................................................................................................761 mb_language.........................................................................................................................762 mb_output_handler...............................................................................................................762 mb_parse_str.........................................................................................................................763 mb_preferred_mime_name...................................................................................................763 mb_regex_encoding..............................................................................................................764 mb_send_mail.......................................................................................................................764 mb_split ................................................................................................................................765 mb_strcut ..............................................................................................................................766 mb_strimwidth......................................................................................................................766 mb_strlen ..............................................................................................................................766 mb_strpos .............................................................................................................................767 mb_strrpos ............................................................................................................................767 mb_strwidth..........................................................................................................................767 mb_substitute_character .......................................................................................................768 mb_substr .............................................................................................................................769 LIV. MCAL functions....................................................................................................................770 mcal_append_event ..............................................................................................................771 mcal_close ............................................................................................................................771 mcal_create_calendar ...........................................................................................................771 mcal_date_compare..............................................................................................................771 mcal_date_valid....................................................................................................................771 mcal_day_of_week...............................................................................................................771 mcal_day_of_year ................................................................................................................772 mcal_days_in_month............................................................................................................772 mcal_delete_calendar ...........................................................................................................772 xxxiv
  • 35. mcal_delete_event ................................................................................................................772 mcal_event_add_attribute.....................................................................................................772 mcal_event_init ....................................................................................................................773 mcal_event_set_alarm ..........................................................................................................773 mcal_event_set_category......................................................................................................773 mcal_event_set_class............................................................................................................773 mcal_event_set_description..................................................................................................774 mcal_event_set_end..............................................................................................................774 mcal_event_set_recur_daily .................................................................................................774 mcal_event_set_recur_monthly_mday .................................................................................774 mcal_event_set_recur_monthly_wday .................................................................................775 mcal_event_set_recur_none .................................................................................................775 mcal_event_set_recur_weekly..............................................................................................775 mcal_event_set_recur_yearly ...............................................................................................775 mcal_event_set_start ............................................................................................................775 mcal_event_set_title .............................................................................................................776 mcal_expunge.......................................................................................................................776 mcal_fetch_current_stream_event........................................................................................776 mcal_fetch_event..................................................................................................................777 mcal_is_leap_year ................................................................................................................778 mcal_list_alarms...................................................................................................................778 mcal_list_events ...................................................................................................................778 mcal_next_recurrence...........................................................................................................779 mcal_open.............................................................................................................................779 mcal_popen...........................................................................................................................779 mcal_rename_calendar .........................................................................................................779 mcal_reopen .........................................................................................................................780 mcal_snooze .........................................................................................................................780 mcal_store_event ..................................................................................................................780 mcal_time_valid ...................................................................................................................780 mcal_week_of_year..............................................................................................................781 LV. Funciones Criptográficas.........................................................................................................782 mcrypt_cbc ...........................................................................................................................784 mcrypt_cfb............................................................................................................................784 mcrypt_create_iv ..................................................................................................................784 mcrypt_decrypt.....................................................................................................................785 mcrypt_ecb ...........................................................................................................................785 mcrypt_enc_get_algorithms_name.......................................................................................786 mcrypt_enc_get_block_size .................................................................................................786 mcrypt_enc_get_iv_size .......................................................................................................786 mcrypt_enc_get_key_size ....................................................................................................787 mcrypt_enc_get_modes_name .............................................................................................787 mcrypt_enc_get_supported_key_sizes .................................................................................787 mcrypt_enc_is_block_algorithm_mode ...............................................................................788 mcrypt_enc_is_block_algorithm ..........................................................................................788 mcrypt_enc_is_block_mode.................................................................................................789 mcrypt_enc_self_test............................................................................................................789 mcrypt_encrypt.....................................................................................................................789 xxxv
  • 36. mcrypt_generic_deinit..........................................................................................................790 mcrypt_generic_end .............................................................................................................790 mcrypt_generic_init..............................................................................................................791 mcrypt_generic .....................................................................................................................791 mcrypt_get_block_size.........................................................................................................791 mcrypt_get_cipher_name .....................................................................................................792 mcrypt_get_iv_size...............................................................................................................792 mcrypt_get_key_size ............................................................................................................793 mcrypt_list_algorithms.........................................................................................................793 mcrypt_list_modes ...............................................................................................................794 mcrypt_module_close...........................................................................................................794 mcrypt_module_get_algo_block_size..................................................................................795 mcrypt_module_get_algo_key_size .....................................................................................795 mcrypt_module_get_supported_key_sizes...........................................................................795 mcrypt_module_is_block_algorithm_mode.........................................................................795 mcrypt_module_is_block_algorithm....................................................................................795 mcrypt_module_is_block_mode ..........................................................................................796 mcrypt_module_open ...........................................................................................................796 mcrypt_module_self_test .....................................................................................................798 mcrypt_ofb ...........................................................................................................................798 mdecrypt_generic .................................................................................................................798 LVI. Funciones Hash......................................................................................................................800 mhash_count.........................................................................................................................802 mhash_get_block_size..........................................................................................................802 mhash_get_hash_name.........................................................................................................802 mhash_keygen_s2k...............................................................................................................803 mhash....................................................................................................................................803 LVII. Mimetype Functions.............................................................................................................804 mime_content_type ..............................................................................................................805 LVIII. Funciones de Microsoft SQL Server...................................................................................806 mssql_bind............................................................................................................................807 mssql_close...........................................................................................................................807 mssql_connect ......................................................................................................................807 mssql_data_seek ...................................................................................................................808 mssql_execute.......................................................................................................................808 mssql_fetch_array.................................................................................................................808 mssql_fetch_assoc ................................................................................................................809 mssql_fetch_batch ................................................................................................................809 mssql_fetch_field..................................................................................................................809 mssql_fetch_object ...............................................................................................................810 mssql_fetch_row...................................................................................................................810 mssql_field_length................................................................................................................810 mssql_field_name .................................................................................................................811 mssql_field_seek...................................................................................................................811 mssql_field_type...................................................................................................................811 mssql_free_result..................................................................................................................811 mssql_get_last_message.......................................................................................................811 mssql_guid_string.................................................................................................................812 xxxvi
  • 37. mssql_init .............................................................................................................................812 mssql_min_error_severity ....................................................................................................812 mssql_min_message_severity ..............................................................................................812 mssql_next_result .................................................................................................................813 mssql_num_fields .................................................................................................................813 mssql_num_rows ..................................................................................................................813 mssql_pconnect ....................................................................................................................814 mssql_query..........................................................................................................................814 mssql_result..........................................................................................................................814 mssql_rows_affected ............................................................................................................815 mssql_select_db....................................................................................................................815 LIX. Ming functions for Flash .......................................................................................................817 ming_setcubicthreshold........................................................................................................819 ming_setscale .......................................................................................................................819 ming_useswfversion .............................................................................................................819 SWFAction ...........................................................................................................................819 SWFBitmap->getHeight.......................................................................................................830 SWFBitmap->getWidth........................................................................................................830 SWFBitmap ..........................................................................................................................831 swfbutton_keypress ..............................................................................................................833 SWFbutton->addAction .......................................................................................................833 SWFbutton->addShape.........................................................................................................833 SWFbutton->setAction.........................................................................................................834 SWFbutton->setdown ...........................................................................................................834 SWFbutton->setHit...............................................................................................................835 SWFbutton->setOver............................................................................................................835 SWFbutton->setUp...............................................................................................................835 SWFbutton............................................................................................................................836 SWFDisplayItem->addColor................................................................................................839 SWFDisplayItem->move......................................................................................................839 SWFDisplayItem->moveTo..................................................................................................840 SWFDisplayItem->multColor ..............................................................................................840 SWFDisplayItem->remove...................................................................................................841 SWFDisplayItem->Rotate ....................................................................................................842 SWFDisplayItem->rotateTo .................................................................................................842 SWFDisplayItem->scale.......................................................................................................844 SWFDisplayItem->scaleTo ..................................................................................................845 SWFDisplayItem->setDepth ................................................................................................845 SWFDisplayItem->setName.................................................................................................845 SWFDisplayItem->setRatio .................................................................................................846 SWFDisplayItem->skewX....................................................................................................848 SWFDisplayItem->skewXTo ...............................................................................................848 SWFDisplayItem->skewY....................................................................................................848 SWFDisplayItem->skewYTo ...............................................................................................849 SWFDisplayItem ..................................................................................................................849 SWFFill->moveTo................................................................................................................850 SWFFill->rotateTo ...............................................................................................................850 SWFFill->scaleTo.................................................................................................................851 xxxvii
  • 38. SWFFill->skewXTo..............................................................................................................851 SWFFill->skewYTo..............................................................................................................851 SWFFill ................................................................................................................................852 swffont->getwidth ................................................................................................................852 SWFFont...............................................................................................................................852 SWFGradient->addEntry......................................................................................................853 SWFGradient........................................................................................................................854 SWFMorph->getshape1 .......................................................................................................855 SWFMorph->getshape2 .......................................................................................................855 SWFMorph ...........................................................................................................................856 SWFMovie->add ..................................................................................................................857 SWFMovie->nextframe........................................................................................................858 SWFMovie->output..............................................................................................................858 SWFMovie->remove ............................................................................................................859 SWFMovie->save .................................................................................................................859 SWFMovie->setbackground.................................................................................................859 SWFMovie->setdimension...................................................................................................860 SWFMovie->setframes.........................................................................................................860 SWFMovie->setrate .............................................................................................................860 SWFMovie->streammp3 ......................................................................................................861 SWFMovie ...........................................................................................................................862 SWFShape->addFill .............................................................................................................862 SWFShape->drawCurve.......................................................................................................864 SWFShape->drawCurveTo...................................................................................................865 SWFShape->drawLine .........................................................................................................865 SWFShape->drawLineTo .....................................................................................................866 SWFShape->movePen..........................................................................................................866 SWFShape->movePenTo......................................................................................................867 SWFShape->setLeftFill........................................................................................................867 SWFShape->setLine.............................................................................................................868 SWFShape->setRightFill......................................................................................................869 SWFShape ............................................................................................................................870 SWFSprite->add ...................................................................................................................871 SWFSprite->nextframe.........................................................................................................871 SWFSprite->remove.............................................................................................................872 SWFSprite->setframes .........................................................................................................872 SWFSprite ............................................................................................................................872 SWFText->addString............................................................................................................874 SWFText->getWidth.............................................................................................................874 SWFText->moveTo ..............................................................................................................874 SWFText->setColor..............................................................................................................875 SWFText->setFont................................................................................................................875 SWFText->setHeight ............................................................................................................876 SWFText->setSpacing ..........................................................................................................876 SWFText...............................................................................................................................876 SWFTextField->addstring ....................................................................................................877 SWFTextField->align ...........................................................................................................878 SWFTextField->setbounds ...................................................................................................878 xxxviii
  • 39. SWFTextField->setcolor ......................................................................................................878 SWFTextField->setFont .......................................................................................................879 SWFTextField->setHeight....................................................................................................879 SWFTextField->setindentation.............................................................................................880 SWFTextField->setLeftMargin ............................................................................................880 SWFTextField->setLineSpacing ..........................................................................................880 SWFTextField->setMargins .................................................................................................881 SWFTextField->setname ......................................................................................................881 SWFTextField->setrightMargin ...........................................................................................881 SWFTextField.......................................................................................................................882 LX. Miscelánea de funciones.........................................................................................................884 connection_aborted...............................................................................................................885 connection_status .................................................................................................................885 connection_timeout ..............................................................................................................885 constant.................................................................................................................................885 define ....................................................................................................................................886 defined ..................................................................................................................................886 die .........................................................................................................................................887 eval........................................................................................................................................887 exit ........................................................................................................................................888 get_browser ..........................................................................................................................888 highlight_file.........................................................................................................................890 highlight_string.....................................................................................................................891 ignore_user_abort .................................................................................................................892 leak .......................................................................................................................................892 pack.......................................................................................................................................892 show_source .........................................................................................................................893 sleep......................................................................................................................................894 uniqid....................................................................................................................................894 unpack...................................................................................................................................895 usleep....................................................................................................................................895 LXI. mnoGoSearch Functions .......................................................................................................896 udm_add_search_limit .........................................................................................................897 udm_alloc_agent...................................................................................................................897 udm_api_version ..................................................................................................................898 udm_cat_list .........................................................................................................................899 udm_cat_path .......................................................................................................................900 udm_check_charset ..............................................................................................................901 udm_check_stored................................................................................................................901 udm_clear_search_limits......................................................................................................901 udm_close_stored .................................................................................................................901 udm_crc32 ............................................................................................................................902 udm_errno.............................................................................................................................902 udm_error .............................................................................................................................902 udm_find...............................................................................................................................903 udm_free_agent ....................................................................................................................903 udm_free_ispell_data ...........................................................................................................903 udm_free_res ........................................................................................................................904 xxxix
  • 40. udm_get_doc_count .............................................................................................................904 udm_get_res_field ................................................................................................................904 udm_get_res_param .............................................................................................................905 udm_load_ispell_data...........................................................................................................905 udm_open_stored .................................................................................................................908 udm_set_agent_param..........................................................................................................908 LXII. funciones mSQL ..................................................................................................................912 msql_affected_rows..............................................................................................................913 msql_close ............................................................................................................................913 msql_connect........................................................................................................................913 msql_create_db.....................................................................................................................913 msql_createdb.......................................................................................................................914 msql_data_seek.....................................................................................................................914 msql_dbname........................................................................................................................914 msql_drop_db .......................................................................................................................914 msql_dropdb .........................................................................................................................915 msql_error.............................................................................................................................915 msql_fetch_array ..................................................................................................................915 msql_fetch_field ...................................................................................................................916 msql_fetch_object.................................................................................................................916 msql_fetch_row ....................................................................................................................917 msql_field_seek ....................................................................................................................917 msql_fieldflags......................................................................................................................917 msql_fieldlen ........................................................................................................................917 msql_fieldname.....................................................................................................................918 msql_fieldtable .....................................................................................................................918 msql_fieldtype ......................................................................................................................918 msql_free_result ...................................................................................................................918 msql_freeresult .....................................................................................................................918 msql_list_dbs........................................................................................................................919 msql_list_fields.....................................................................................................................919 msql_list_tables ....................................................................................................................919 msql_listdbs..........................................................................................................................919 msql_listfields.......................................................................................................................920 msql_listtables ......................................................................................................................920 msql_num_fields...................................................................................................................920 msql_num_rows....................................................................................................................920 msql_numfields.....................................................................................................................920 msql_numrows......................................................................................................................921 msql_pconnect......................................................................................................................921 msql_query ...........................................................................................................................921 msql_regcase ........................................................................................................................922 msql_result ...........................................................................................................................922 msql_select_db .....................................................................................................................922 msql_selectdb .......................................................................................................................923 msql_tablename....................................................................................................................923 msql ......................................................................................................................................923 LXIII. Funciones MySQL..............................................................................................................925 xl
  • 41. mysql_affected_rows............................................................................................................926 mysql_change_user ..............................................................................................................926 mysql_character_set_name...................................................................................................926 mysql_close ..........................................................................................................................927 mysql_connect......................................................................................................................927 mysql_create_db...................................................................................................................928 mysql_data_seek...................................................................................................................929 mysql_db_name....................................................................................................................930 mysql_db_query ...................................................................................................................930 mysql_drop_db .....................................................................................................................931 mysql_errno..........................................................................................................................931 mysql_error...........................................................................................................................931 mysql_escape_string.............................................................................................................932 mysql_fetch_array ................................................................................................................933 mysql_fetch_assoc................................................................................................................934 mysql_fetch_field .................................................................................................................934 mysql_fetch_lengths.............................................................................................................935 mysql_fetch_object...............................................................................................................935 mysql_fetch_row ..................................................................................................................936 mysql_field_flags..................................................................................................................936 mysql_field_len ....................................................................................................................937 mysql_field_name.................................................................................................................937 mysql_field_seek ..................................................................................................................937 mysql_field_table .................................................................................................................937 mysql_field_type ..................................................................................................................938 mysql_free_result .................................................................................................................938 mysql_get_client_info ..........................................................................................................939 mysql_get_host_info ............................................................................................................939 mysql_get_proto_info...........................................................................................................940 mysql_get_server_info .........................................................................................................940 mysql_info............................................................................................................................941 mysql_insert_id ....................................................................................................................942 mysql_list_dbs......................................................................................................................942 mysql_list_fields...................................................................................................................942 mysql_list_processes ............................................................................................................942 mysql_list_tables ..................................................................................................................943 mysql_num_fields.................................................................................................................943 mysql_num_rows..................................................................................................................944 mysql_pconnect....................................................................................................................944 mysql_ping ...........................................................................................................................945 mysql_query .........................................................................................................................945 mysql_real_escape_string.....................................................................................................946 mysql_result .........................................................................................................................947 mysql_select_db ...................................................................................................................947 mysql_stat.............................................................................................................................947 mysql_tablename..................................................................................................................948 mysql_thread_id ...................................................................................................................949 mysql_unbuffered_query......................................................................................................949 xli
  • 42. LXIV. Mohawk Software session handler functions .....................................................................951 msession_connect .................................................................................................................952 msession_count.....................................................................................................................952 msession_create....................................................................................................................952 msession_destroy..................................................................................................................952 msession_disconnect ............................................................................................................953 msession_find .......................................................................................................................953 msession_get_array ..............................................................................................................953 msession_get.........................................................................................................................953 msession_getdata..................................................................................................................954 msession_inc.........................................................................................................................954 msession_list.........................................................................................................................954 msession_listvar....................................................................................................................955 msession_lock.......................................................................................................................955 msession_plugin ...................................................................................................................955 msession_randstr ..................................................................................................................955 msession_set_array...............................................................................................................956 msession_set .........................................................................................................................956 msession_setdata ..................................................................................................................956 msession_timeout .................................................................................................................957 msession_uniq ......................................................................................................................957 msession_unlock...................................................................................................................957 LXV. muscat functions ..................................................................................................................958 muscat_close.........................................................................................................................959 muscat_get............................................................................................................................959 muscat_give ..........................................................................................................................960 muscat_setup_net .................................................................................................................960 muscat_setup ........................................................................................................................960 LXVI. Funciones de Red ...............................................................................................................962 checkdnsrr.............................................................................................................................963 closelog.................................................................................................................................963 debugger_off.........................................................................................................................963 debugger_on .........................................................................................................................963 define_syslog_variables........................................................................................................963 fsockopen..............................................................................................................................964 gethostbyaddr .......................................................................................................................964 gethostbyname......................................................................................................................965 gethostbynamel.....................................................................................................................965 getmxrr .................................................................................................................................965 getprotobyname ....................................................................................................................966 getprotobynumber.................................................................................................................966 getservbyname......................................................................................................................966 getservbyport ........................................................................................................................966 ip2long..................................................................................................................................966 long2ip..................................................................................................................................967 openlog .................................................................................................................................967 pfsockopen............................................................................................................................968 socket_get_status ..................................................................................................................968 xlii
  • 43. socket_set_blocking .............................................................................................................968 socket_set_timeout ...............................................................................................................969 syslog....................................................................................................................................969 LXVII. Ncurses terminal screen control functions ........................................................................971 ncurses_addch.......................................................................................................................976 ncurses_addchnstr.................................................................................................................976 ncurses_addchstr...................................................................................................................976 ncurses_addnstr ....................................................................................................................977 ncurses_addstr ......................................................................................................................977 ncurses_assume_default_colors ...........................................................................................977 ncurses_attroff ......................................................................................................................978 ncurses_attron.......................................................................................................................978 ncurses_attrset ......................................................................................................................978 ncurses_baudrate ..................................................................................................................979 ncurses_beep.........................................................................................................................979 ncurses_bkgd ........................................................................................................................979 ncurses_bkgdset....................................................................................................................980 ncurses_border......................................................................................................................980 ncurses_can_change_color ...................................................................................................980 ncurses_cbreak .....................................................................................................................981 ncurses_clear ........................................................................................................................981 ncurses_clrtobot....................................................................................................................982 ncurses_clrtoeol....................................................................................................................982 ncurses_color_set .................................................................................................................982 ncurses_curs_set ...................................................................................................................983 ncurses_def_prog_mode.......................................................................................................983 ncurses_def_shell_mode.......................................................................................................984 ncurses_define_key...............................................................................................................984 ncurses_delay_output ...........................................................................................................984 ncurses_delch .......................................................................................................................985 ncurses_deleteln ...................................................................................................................985 ncurses_delwin .....................................................................................................................986 ncurses_doupdate .................................................................................................................986 ncurses_echo.........................................................................................................................986 ncurses_echochar..................................................................................................................987 ncurses_end ..........................................................................................................................987 ncurses_erase........................................................................................................................987 ncurses_erasechar .................................................................................................................988 ncurses_filter.........................................................................................................................988 ncurses_flash.........................................................................................................................988 ncurses_flushinp ...................................................................................................................989 ncurses_getch .......................................................................................................................989 ncurses_getmouse.................................................................................................................990 ncurses_halfdelay .................................................................................................................991 ncurses_has_colors ...............................................................................................................991 ncurses_has_ic......................................................................................................................992 ncurses_has_il.......................................................................................................................992 ncurses_has_key ...................................................................................................................992 xliii
  • 44. ncurses_hline ........................................................................................................................993 ncurses_inch .........................................................................................................................993 ncurses_init_color.................................................................................................................993 ncurses_init_pair...................................................................................................................994 ncurses_init...........................................................................................................................994 ncurses_insch........................................................................................................................994 ncurses_insdelln ...................................................................................................................995 ncurses_insertln ....................................................................................................................995 ncurses_insstr .......................................................................................................................996 ncurses_instr .........................................................................................................................996 ncurses_isendwin..................................................................................................................996 ncurses_keyok ......................................................................................................................997 ncurses_killchar....................................................................................................................997 ncurses_longname ................................................................................................................997 ncurses_mouseinterval..........................................................................................................998 ncurses_mousemask .............................................................................................................998 ncurses_move .....................................................................................................................1000 ncurses_mvaddch................................................................................................................1000 ncurses_mvaddchnstr..........................................................................................................1000 ncurses_mvaddchstr............................................................................................................1001 ncurses_mvaddnstr .............................................................................................................1001 ncurses_mvaddstr ...............................................................................................................1002 ncurses_mvcur....................................................................................................................1002 ncurses_mvdelch ................................................................................................................1002 ncurses_mvgetch ................................................................................................................1003 ncurses_mvhline .................................................................................................................1003 ncurses_mvinch ..................................................................................................................1003 ncurses_mvvline .................................................................................................................1004 ncurses_mvwaddstr ............................................................................................................1004 ncurses_napms....................................................................................................................1004 ncurses_newwin..................................................................................................................1005 ncurses_nl ...........................................................................................................................1005 ncurses_nocbreak ...............................................................................................................1005 ncurses_noecho...................................................................................................................1006 ncurses_nonl .......................................................................................................................1006 ncurses_noqiflush ...............................................................................................................1006 ncurses_noraw ....................................................................................................................1007 ncurses_putp .......................................................................................................................1007 ncurses_qiflush ...................................................................................................................1007 ncurses_raw ........................................................................................................................1008 ncurses_refresh ...................................................................................................................1008 ncurses_resetty ...................................................................................................................1009 ncurses_savetty ...................................................................................................................1009 ncurses_scr_dump ..............................................................................................................1009 ncurses_scr_init ..................................................................................................................1010 ncurses_scr_restore.............................................................................................................1010 ncurses_scr_set ...................................................................................................................1011 ncurses_scrl ........................................................................................................................1011 xliv
  • 45. ncurses_slk_attr ..................................................................................................................1011 ncurses_slk_attroff..............................................................................................................1012 ncurses_slk_attron ..............................................................................................................1012 ncurses_slk_attrset..............................................................................................................1012 ncurses_slk_clear................................................................................................................1012 ncurses_slk_color ...............................................................................................................1013 ncurses_slk_init ..................................................................................................................1013 ncurses_slk_noutrefresh .....................................................................................................1014 ncurses_slk_refresh ............................................................................................................1014 ncurses_slk_restore.............................................................................................................1014 ncurses_slk_touch...............................................................................................................1015 ncurses_standend................................................................................................................1015 ncurses_standout.................................................................................................................1015 ncurses_start_color .............................................................................................................1016 ncurses_termattrs................................................................................................................1016 ncurses_termname ..............................................................................................................1017 ncurses_timeout..................................................................................................................1017 ncurses_typeahead..............................................................................................................1017 ncurses_ungetch .................................................................................................................1018 ncurses_ungetmouse...........................................................................................................1018 ncurses_use_default_colors ................................................................................................1019 ncurses_use_env .................................................................................................................1019 ncurses_use_extended_names ............................................................................................1019 ncurses_vidattr....................................................................................................................1020 ncurses_vline ......................................................................................................................1020 ncurses_wrefresh ................................................................................................................1020 LXVIII. Lotus Notes functions ....................................................................................................1022 notes_body..........................................................................................................................1023 notes_copy_db ....................................................................................................................1023 notes_create_db ..................................................................................................................1023 notes_create_note ...............................................................................................................1024 notes_drop_db ....................................................................................................................1024 notes_find_note...................................................................................................................1025 notes_header_info...............................................................................................................1025 notes_list_msgs...................................................................................................................1026 notes_mark_read.................................................................................................................1026 notes_mark_unread.............................................................................................................1027 notes_nav_create ................................................................................................................1027 notes_search .......................................................................................................................1028 notes_unread.......................................................................................................................1028 notes_version ......................................................................................................................1029 LXIX. ODBC functions ...............................................................................................................1030 odbc_autocommit ...............................................................................................................1031 odbc_binmode ....................................................................................................................1031 odbc_close_all ....................................................................................................................1032 odbc_close ..........................................................................................................................1032 odbc_columnprivileges.......................................................................................................1032 odbc_columns.....................................................................................................................1033 xlv
  • 46. odbc_commit ......................................................................................................................1034 odbc_connect......................................................................................................................1034 odbc_cursor ........................................................................................................................1035 odbc_do ..............................................................................................................................1035 odbc_error...........................................................................................................................1035 odbc_errormsg....................................................................................................................1035 odbc_exec ...........................................................................................................................1035 odbc_execute ......................................................................................................................1036 odbc_fetch_array ................................................................................................................1036 odbc_fetch_into ..................................................................................................................1036 odbc_fetch_object...............................................................................................................1037 odbc_fetch_row ..................................................................................................................1037 odbc_field_len ....................................................................................................................1037 odbc_field_name.................................................................................................................1038 odbc_field_num ..................................................................................................................1038 odbc_field_precision...........................................................................................................1038 odbc_field_scale .................................................................................................................1038 odbc_field_type ..................................................................................................................1038 odbc_foreignkeys................................................................................................................1039 odbc_free_result .................................................................................................................1039 odbc_gettypeinfo ................................................................................................................1040 odbc_longreadlen ...............................................................................................................1041 odbc_next_result.................................................................................................................1041 odbc_num_fields.................................................................................................................1041 odbc_num_rows..................................................................................................................1042 odbc_pconnect....................................................................................................................1042 odbc_prepare ......................................................................................................................1042 odbc_primarykeys ..............................................................................................................1042 odbc_procedurecolumns.....................................................................................................1043 odbc_procedures.................................................................................................................1044 odbc_result_all ...................................................................................................................1044 odbc_result .........................................................................................................................1045 odbc_rollback .....................................................................................................................1045 odbc_setoption....................................................................................................................1045 odbc_specialcolumns..........................................................................................................1046 odbc_statistics.....................................................................................................................1047 odbc_tableprivileges ...........................................................................................................1048 odbc_tables .........................................................................................................................1048 LXX. Funciones de Oracle 8........................................................................................................1050 OCIBindByName ...............................................................................................................1051 OCICancel ..........................................................................................................................1052 OCICollAppend..................................................................................................................1052 OCICollAssign ...................................................................................................................1052 OCICollAssignElem...........................................................................................................1053 OCICollGetElem ................................................................................................................1053 OCICollMax .......................................................................................................................1053 OCICollSize .......................................................................................................................1054 OCICollTrim ......................................................................................................................1054 xlvi
  • 47. OCIColumnIsNULL...........................................................................................................1054 OCIColumnName...............................................................................................................1055 OCIColumnPrecision .........................................................................................................1056 OCIColumnScale................................................................................................................1056 OCIColumnSize .................................................................................................................1056 OCIColumnType ................................................................................................................1057 OCIColumnTypeRaw .........................................................................................................1058 OCICommit ........................................................................................................................1058 OCIDefineByName ............................................................................................................1059 OCIError.............................................................................................................................1059 OCIExecute ........................................................................................................................1060 OCIFetch ............................................................................................................................1060 OCIFetchInto......................................................................................................................1060 OCIFetchStatement ............................................................................................................1061 OCIFreeCollection .............................................................................................................1062 OCIFreeCursor ...................................................................................................................1062 OCIFreeDesc ......................................................................................................................1062 OCIFreeStatement ..............................................................................................................1062 OCIInternalDebug ..............................................................................................................1062 OCILoadLob.......................................................................................................................1063 OCILogOff .........................................................................................................................1063 OCILogon...........................................................................................................................1063 OCINewCollection .............................................................................................................1065 OCINewCursor...................................................................................................................1066 OCINewDescriptor.............................................................................................................1067 OCINLogon........................................................................................................................1068 OCINumCols......................................................................................................................1070 OCIParse.............................................................................................................................1071 OCIPLogon.........................................................................................................................1071 OCIResult ...........................................................................................................................1072 OCIRollback.......................................................................................................................1072 OCIRowCount ....................................................................................................................1072 OCISaveLob .......................................................................................................................1073 OCISaveLobFile .................................................................................................................1073 OCIServerVersion...............................................................................................................1073 OCISetPrefetch...................................................................................................................1074 OCIStatementType .............................................................................................................1074 OCIWriteLobToFile ...........................................................................................................1075 LXXI. OpenSSL functions...........................................................................................................1076 openssl_csr_export_to_file .................................................................................................1079 openssl_csr_export .............................................................................................................1079 openssl_csr_new.................................................................................................................1079 openssl_csr_sign.................................................................................................................1080 openssl_error_string ...........................................................................................................1080 openssl_free_key ................................................................................................................1081 openssl_get_privatekey.......................................................................................................1082 openssl_get_publickey........................................................................................................1082 openssl_open ......................................................................................................................1082 xlvii
  • 48. openssl_pkcs7_decrypt.......................................................................................................1083 openssl_pkcs7_encrypt.......................................................................................................1084 openssl_pkcs7_sign ............................................................................................................1085 openssl_pkcs7_verify .........................................................................................................1087 openssl_pkey_export_to_file ..............................................................................................1087 openssl_pkey_export ..........................................................................................................1088 openssl_pkey_new..............................................................................................................1088 openssl_private_decrypt .....................................................................................................1089 openssl_private_encrypt .....................................................................................................1089 openssl_public_decrypt ......................................................................................................1090 openssl_public_encrypt ......................................................................................................1090 openssl_seal........................................................................................................................1091 openssl_sign .......................................................................................................................1092 openssl_verify.....................................................................................................................1093 openssl_x509_check_private_key ......................................................................................1094 openssl_x509_checkpurpose ..............................................................................................1094 openssl_x509_export_to_file..............................................................................................1095 openssl_x509_export ..........................................................................................................1096 openssl_x509_free..............................................................................................................1096 openssl_x509_parse............................................................................................................1097 openssl_x509_read .............................................................................................................1097 LXXII. Funciones Oracle.............................................................................................................1099 Ora_Bind ............................................................................................................................1100 Ora_Close ...........................................................................................................................1100 Ora_ColumnName..............................................................................................................1100 Ora_ColumnSize ................................................................................................................1101 Ora_ColumnType ...............................................................................................................1101 Ora_Commit .......................................................................................................................1101 Ora_CommitOff..................................................................................................................1101 Ora_CommitOn ..................................................................................................................1102 Ora_Do ...............................................................................................................................1102 Ora_Error............................................................................................................................1102 Ora_ErrorCode ...................................................................................................................1103 Ora_Exec ............................................................................................................................1103 Ora_Fetch_Into...................................................................................................................1103 Ora_Fetch ...........................................................................................................................1104 Ora_GetColumn .................................................................................................................1104 Ora_Logoff .........................................................................................................................1104 Ora_Logon..........................................................................................................................1105 Ora_Numcols......................................................................................................................1105 Ora_Numrows ....................................................................................................................1105 Ora_Open ...........................................................................................................................1106 Ora_Parse............................................................................................................................1106 Ora_pLogon........................................................................................................................1106 Ora_Rollback......................................................................................................................1106 LXXIII. Ovrimos SQL functions .................................................................................................1107 ovrimos_close.....................................................................................................................1108 ovrimos_commit.................................................................................................................1108 xlviii
  • 49. ovrimos_connect.................................................................................................................1108 ovrimos_cursor ...................................................................................................................1109 ovrimos_exec......................................................................................................................1109 ovrimos_execute .................................................................................................................1109 ovrimos_fetch_into.............................................................................................................1109 ovrimos_fetch_row .............................................................................................................1110 ovrimos_field_len ...............................................................................................................1111 ovrimos_field_name ...........................................................................................................1111 ovrimos_field_num.............................................................................................................1112 ovrimos_field_type .............................................................................................................1112 ovrimos_free_result ............................................................................................................1112 ovrimos_longreadlen ..........................................................................................................1112 ovrimos_num_fields ...........................................................................................................1112 ovrimos_num_rows ............................................................................................................1113 ovrimos_prepare .................................................................................................................1113 ovrimos_result_all ..............................................................................................................1114 ovrimos_result ....................................................................................................................1115 ovrimos_rollback ................................................................................................................1116 LXXIV. Output Control Functions ..............................................................................................1117 flush ....................................................................................................................................1118 ob_clean..............................................................................................................................1118 ob_end_clean......................................................................................................................1118 ob_end_flush.......................................................................................................................1118 ob_flush ..............................................................................................................................1118 ob_get_contents..................................................................................................................1119 ob_get_length .....................................................................................................................1119 ob_get_level........................................................................................................................1119 ob_get_status ......................................................................................................................1119 ob_gzhandler ......................................................................................................................1120 ob_implicit_flush................................................................................................................1121 ob_start ...............................................................................................................................1121 LXXV. Object property and method call overloading.................................................................1122 overload ..............................................................................................................................1124 LXXVI. PDF functions ................................................................................................................1125 pdf_add_annotation ............................................................................................................1130 pdf_add_bookmark.............................................................................................................1130 pdf_add_launchlink ............................................................................................................1130 pdf_add_locallink ...............................................................................................................1130 pdf_add_note ......................................................................................................................1130 PDF_add_outline................................................................................................................1131 pdf_add_pdflink..................................................................................................................1131 pdf_add_thumbnail.............................................................................................................1131 pdf_add_weblink ................................................................................................................1131 PDF_arc..............................................................................................................................1132 pdf_arcn..............................................................................................................................1132 pdf_attach_file ....................................................................................................................1132 PDF_begin_page ................................................................................................................1132 pdf_begin_pattern...............................................................................................................1133 xlix
  • 50. pdf_begin_template ............................................................................................................1133 PDF_circle..........................................................................................................................1133 PDF_clip.............................................................................................................................1133 PDF_close_image...............................................................................................................1133 pdf_close_pdi_page............................................................................................................1134 pdf_close_pdi .....................................................................................................................1134 PDF_close...........................................................................................................................1134 PDF_closepath_fill_stroke .................................................................................................1135 PDF_closepath_stroke ........................................................................................................1135 PDF_closepath....................................................................................................................1135 pdf_concat ..........................................................................................................................1135 PDF_continue_text .............................................................................................................1136 PDF_curveto.......................................................................................................................1136 pdf_delete ...........................................................................................................................1136 PDF_end_page ...................................................................................................................1136 pdf_end_pattern..................................................................................................................1137 pdf_end_template ...............................................................................................................1137 PDF_endpath ......................................................................................................................1137 PDF_fill_stroke...................................................................................................................1137 PDF_fill ..............................................................................................................................1137 pdf_findfont ........................................................................................................................1138 pdf_get_buffer ....................................................................................................................1138 pdf_get_font .......................................................................................................................1138 pdf_get_fontname...............................................................................................................1139 pdf_get_fontsize .................................................................................................................1139 pdf_get_image_height ........................................................................................................1139 pdf_get_image_width .........................................................................................................1139 pdf_get_majorversion.........................................................................................................1139 pdf_get_minorversion.........................................................................................................1140 PDF_get_parameter............................................................................................................1140 pdf_get_pdi_parameter.......................................................................................................1140 pdf_get_pdi_value ..............................................................................................................1140 PDF_get_value ...................................................................................................................1140 pdf_initgraphics..................................................................................................................1141 PDF_lineto..........................................................................................................................1141 pdf_makespotcolor .............................................................................................................1141 PDF_moveto.......................................................................................................................1141 pdf_new ..............................................................................................................................1142 pdf_open_CCITT ...............................................................................................................1142 pdf_open_file......................................................................................................................1142 PDF_open_gif.....................................................................................................................1143 pdf_open_image_file ..........................................................................................................1143 pdf_open_image .................................................................................................................1143 PDF_open_jpeg ..................................................................................................................1144 PDF_open_memory_image................................................................................................1144 pdf_open_pdi_page ............................................................................................................1145 pdf_open_pdi......................................................................................................................1145 PDF_open_png ...................................................................................................................1145 l
  • 51. pdf_open_tiff ......................................................................................................................1145 PDF_open ...........................................................................................................................1146 PDF_place_image...............................................................................................................1146 pdf_place_pdi_page............................................................................................................1146 PDF_rect.............................................................................................................................1147 PDF_restore........................................................................................................................1147 PDF_rotate..........................................................................................................................1147 PDF_save............................................................................................................................1148 PDF_scale...........................................................................................................................1148 PDF_set_border_color........................................................................................................1148 PDF_set_border_dash.........................................................................................................1148 PDF_set_border_style ........................................................................................................1149 PDF_set_char_spacing .......................................................................................................1149 PDF_set_duration ...............................................................................................................1149 PDF_set_font......................................................................................................................1149 PDF_set_horiz_scaling.......................................................................................................1150 pdf_set_info_author............................................................................................................1150 pdf_set_info_creator...........................................................................................................1150 pdf_set_info_keywords ......................................................................................................1151 pdf_set_info_subject...........................................................................................................1151 pdf_set_info_title................................................................................................................1151 PDF_set_info......................................................................................................................1151 PDF_set_leading.................................................................................................................1152 PDF_set_parameter ............................................................................................................1152 PDF_set_text_matrix ..........................................................................................................1152 PDF_set_text_pos...............................................................................................................1152 PDF_set_text_rendering .....................................................................................................1153 PDF_set_text_rise...............................................................................................................1153 PDF_set_value....................................................................................................................1153 PDF_set_word_spacing ......................................................................................................1153 pdf_setcolor ........................................................................................................................1154 PDF_setdash .......................................................................................................................1154 PDF_setflat .........................................................................................................................1155 pdf_setfont..........................................................................................................................1155 PDF_setgray_fill.................................................................................................................1155 PDF_setgray_stroke ...........................................................................................................1155 PDF_setgray .......................................................................................................................1155 PDF_setlinecap...................................................................................................................1156 PDF_setlinejoin ..................................................................................................................1156 PDF_setlinewidth ...............................................................................................................1156 pdf_setmatrix......................................................................................................................1156 PDF_setmiterlimit ..............................................................................................................1156 pdf_setpolydash..................................................................................................................1157 PDF_setrgbcolor_fill ..........................................................................................................1157 PDF_setrgbcolor_stroke .....................................................................................................1157 PDF_setrgbcolor.................................................................................................................1157 PDF_show_boxed...............................................................................................................1158 PDF_show_xy ....................................................................................................................1158 li
  • 52. PDF_show ..........................................................................................................................1158 PDF_skew...........................................................................................................................1158 PDF_stringwidth.................................................................................................................1159 PDF_stroke .........................................................................................................................1159 PDF_translate .....................................................................................................................1159 LXXVII. Verisign Payflow Pro functions ....................................................................................1161 pfpro_cleanup .....................................................................................................................1162 pfpro_init ............................................................................................................................1162 pfpro_process_raw..............................................................................................................1162 pfpro_process .....................................................................................................................1163 pfpro_version......................................................................................................................1164 LXXVIII. opciones e información de PHP ..................................................................................1165 assert_options .....................................................................................................................1166 assert ...................................................................................................................................1166 dl .........................................................................................................................................1167 extension_loaded ................................................................................................................1168 get_cfg_var .........................................................................................................................1169 get_current_user .................................................................................................................1169 get_defined_constants.........................................................................................................1169 get_extension_funcs ...........................................................................................................1170 get_included_files...............................................................................................................1171 get_loaded_extensions........................................................................................................1172 get_magic_quotes_gpc .......................................................................................................1172 get_magic_quotes_runtime.................................................................................................1173 get_required_files ...............................................................................................................1173 getenv..................................................................................................................................1173 getlastmod...........................................................................................................................1174 getmygid .............................................................................................................................1174 getmyinode .........................................................................................................................1174 getmypid .............................................................................................................................1174 getmyuid .............................................................................................................................1175 getrusage.............................................................................................................................1175 ini_alter...............................................................................................................................1175 ini_get_all ...........................................................................................................................1176 ini_get .................................................................................................................................1176 ini_restore ...........................................................................................................................1176 ini_set .................................................................................................................................1176 php_logo_guid....................................................................................................................1184 php_sapi_name ...................................................................................................................1184 php_uname .........................................................................................................................1184 phpcredits ...........................................................................................................................1185 phpinfo................................................................................................................................1186 phpversion ..........................................................................................................................1187 putenv .................................................................................................................................1187 set_magic_quotes_runtime .................................................................................................1187 set_time_limit .....................................................................................................................1188 version_compare.................................................................................................................1188 zend_logo_guid ..................................................................................................................1189 lii
  • 53. zend_version.......................................................................................................................1189 LXXIX. Funciones POSIX ..........................................................................................................1190 posix_ctermid .....................................................................................................................1191 posix_getcwd......................................................................................................................1191 posix_getegid......................................................................................................................1191 posix_geteuid......................................................................................................................1191 posix_getgid .......................................................................................................................1191 posix_getgrgid ....................................................................................................................1192 posix_getgrnam ..................................................................................................................1192 posix_getgroups..................................................................................................................1192 posix_getlogin ....................................................................................................................1192 posix_getpgid .....................................................................................................................1192 posix_getpgrp .....................................................................................................................1193 posix_getpid .......................................................................................................................1193 posix_getppid .....................................................................................................................1193 posix_getpwnam.................................................................................................................1193 posix_getpwuid...................................................................................................................1194 posix_getrlimit....................................................................................................................1195 posix_getsid........................................................................................................................1195 posix_getuid .......................................................................................................................1196 posix_isatty.........................................................................................................................1196 posix_kill ............................................................................................................................1196 posix_mkfifo.......................................................................................................................1196 posix_setegid ......................................................................................................................1197 posix_seteuid ......................................................................................................................1197 posix_setgid........................................................................................................................1197 posix_setpgid......................................................................................................................1197 posix_setsid ........................................................................................................................1197 posix_setuid........................................................................................................................1198 posix_times.........................................................................................................................1198 posix_ttyname.....................................................................................................................1198 posix_uname.......................................................................................................................1199 LXXX. Funciones de PostgreSQL...............................................................................................1200 pg_affected_rows................................................................................................................1202 pg_cancel_query.................................................................................................................1202 pg_client_encoding.............................................................................................................1202 pg_Close .............................................................................................................................1203 pg_Connect.........................................................................................................................1203 pg_connection_busy ...........................................................................................................1203 pg_connection_reset ...........................................................................................................1204 pg_connection_status .........................................................................................................1204 pg_convert ..........................................................................................................................1204 pg_copy_from.....................................................................................................................1204 pg_copy_to .........................................................................................................................1205 pg_DBname........................................................................................................................1205 pg_delete.............................................................................................................................1205 pg_end_copy.......................................................................................................................1206 pg_escape_bytea.................................................................................................................1206 liii
  • 54. pg_escape_string ................................................................................................................1207 pg_Fetch_Array..................................................................................................................1207 pg_Fetch_Object.................................................................................................................1208 pg_fetch_result ...................................................................................................................1209 pg_Fetch_Row....................................................................................................................1210 pg_field_is_null ..................................................................................................................1211 pg_field_name ....................................................................................................................1211 pg_field_num......................................................................................................................1211 pg_field_prtlen....................................................................................................................1212 pg_field_size.......................................................................................................................1212 pg_field_type ......................................................................................................................1212 pg_free_result .....................................................................................................................1213 pg_get_result ......................................................................................................................1213 pg_Host...............................................................................................................................1213 pg_insert .............................................................................................................................1213 pg_last_error.......................................................................................................................1214 pg_last_notice.....................................................................................................................1214 pg_last_oid .........................................................................................................................1215 pg_lo_close.........................................................................................................................1215 pg_lo_create .......................................................................................................................1216 pg_lo_export.......................................................................................................................1216 pg_lo_import ......................................................................................................................1217 pg_lo_open .........................................................................................................................1217 pg_lo_read_all ....................................................................................................................1218 pg_lo_read ..........................................................................................................................1218 pg_lo_seek..........................................................................................................................1218 pg_lo_tell............................................................................................................................1219 pg_lo_unlink.......................................................................................................................1219 pg_lo_write.........................................................................................................................1219 pg_metadata........................................................................................................................1219 pg_num_fields ....................................................................................................................1220 pg_num_rows .....................................................................................................................1220 pg_Options .........................................................................................................................1221 pg_pConnect.......................................................................................................................1221 pg_Port ...............................................................................................................................1221 pg_put_line .........................................................................................................................1221 pg_query .............................................................................................................................1222 pg_result_error ...................................................................................................................1223 pg_result_status ..................................................................................................................1223 pg_select .............................................................................................................................1223 pg_send_query....................................................................................................................1224 pg_set_client_encoding ......................................................................................................1224 pg_trace ..............................................................................................................................1225 pg_tty..................................................................................................................................1225 pg_untrace ..........................................................................................................................1225 pg_update ...........................................................................................................................1226 LXXXI. Process Control Functions .............................................................................................1227 pcntl_exec...........................................................................................................................1229 liv
  • 55. pcntl_fork ...........................................................................................................................1229 pcntl_signal.........................................................................................................................1229 pcntl_waitpid ......................................................................................................................1231 pcntl_wexitstatus ................................................................................................................1232 pcntl_wifexited ...................................................................................................................1232 pcntl_wifsignaled ...............................................................................................................1232 pcntl_wifstopped ................................................................................................................1232 pcntl_wstopsig....................................................................................................................1233 pcntl_wtermsig ...................................................................................................................1233 LXXXII. Funciones de ejecución de programas..........................................................................1234 escapeshellarg.....................................................................................................................1235 escapeshellcmd ...................................................................................................................1235 exec.....................................................................................................................................1235 passthru...............................................................................................................................1236 proc_close...........................................................................................................................1236 proc_open ...........................................................................................................................1236 shell_exec ...........................................................................................................................1238 system .................................................................................................................................1238 LXXXIII. Printer functions..........................................................................................................1239 printer_abort .......................................................................................................................1240 printer_close .......................................................................................................................1240 printer_create_brush ...........................................................................................................1240 printer_create_dc ................................................................................................................1241 printer_create_font .............................................................................................................1242 printer_create_pen ..............................................................................................................1242 printer_delete_brush ...........................................................................................................1243 printer_delete_dc ................................................................................................................1243 printer_delete_font .............................................................................................................1243 printer_delete_pen ..............................................................................................................1243 printer_draw_bmp ..............................................................................................................1243 printer_draw_chord ............................................................................................................1244 printer_draw_elipse ............................................................................................................1245 printer_draw_line................................................................................................................1246 printer_draw_pie.................................................................................................................1246 printer_draw_rectangle.......................................................................................................1247 printer_draw_roundrect ......................................................................................................1248 printer_draw_text................................................................................................................1249 printer_end_doc..................................................................................................................1250 printer_end_page ................................................................................................................1250 printer_get_option ..............................................................................................................1250 printer_list...........................................................................................................................1250 printer_logical_fontheight ..................................................................................................1251 printer_open........................................................................................................................1252 printer_select_brush ...........................................................................................................1252 printer_select_font..............................................................................................................1253 printer_select_pen...............................................................................................................1253 printer_set_option...............................................................................................................1254 printer_start_doc.................................................................................................................1256 lv
  • 56. printer_start_page ...............................................................................................................1256 printer_write .......................................................................................................................1256 LXXXIV. Pspell Functions..........................................................................................................1258 pspell_add_to_personal ......................................................................................................1259 pspell_add_to_session ........................................................................................................1259 pspell_check .......................................................................................................................1259 pspell_clear_session ...........................................................................................................1260 pspell_config_create ...........................................................................................................1260 pspell_config_ignore ..........................................................................................................1261 pspell_config_mode............................................................................................................1262 pspell_config_personal .......................................................................................................1262 pspell_config_repl ..............................................................................................................1263 pspell_config_runtogether ..................................................................................................1263 pspell_config_save_repl .....................................................................................................1264 pspell_new_config ..............................................................................................................1264 pspell_new_personal ..........................................................................................................1265 pspell_new ..........................................................................................................................1266 pspell_save_wordlist...........................................................................................................1267 pspell_store_replacement ...................................................................................................1267 pspell_suggest.....................................................................................................................1268 LXXXV. GNU Readline..............................................................................................................1269 readline_add_history ..........................................................................................................1270 readline_clear_history ........................................................................................................1270 readline_completion_function............................................................................................1270 readline_info.......................................................................................................................1270 readline_list_history ...........................................................................................................1270 readline_read_history .........................................................................................................1271 readline_write_history........................................................................................................1271 readline ...............................................................................................................................1271 LXXXVI. Funciones GNU Recode .............................................................................................1272 recode_file ..........................................................................................................................1273 recode_string ......................................................................................................................1273 recode .................................................................................................................................1273 LXXXVII. Funciones de expresiones regulares compatibles con Perl........................................1274 Modificadores de Patrones..................................................................................................1275 Sintaxis de los Patrones ......................................................................................................1276 preg_grep ............................................................................................................................1296 preg_match_all ...................................................................................................................1296 preg_match .........................................................................................................................1298 preg_quote ..........................................................................................................................1298 preg_replace_callback ........................................................................................................1299 preg_replace........................................................................................................................1299 preg_split ............................................................................................................................1300 LXXXVIII. qtdom functions........................................................................................................1302 qdom_error .........................................................................................................................1303 qdom_tree ...........................................................................................................................1303 LXXXIX. Funciones para expresiones regulares.........................................................................1304 ereg_replace........................................................................................................................1306 lvi
  • 57. ereg .....................................................................................................................................1306 eregi_replace.......................................................................................................................1307 eregi ....................................................................................................................................1307 split .....................................................................................................................................1307 spliti ....................................................................................................................................1308 sql_regcase..........................................................................................................................1308 XC. Funciones Semáforo y de memoria compartida ...................................................................1310 ftok......................................................................................................................................1311 msg_get_queue ...................................................................................................................1311 msg_receive ........................................................................................................................1311 msg_remove_queue ............................................................................................................1312 msg_send ............................................................................................................................1313 msg_set_queue ...................................................................................................................1313 msg_stat_queue ..................................................................................................................1314 sem_acquire........................................................................................................................1314 sem_get...............................................................................................................................1315 sem_release.........................................................................................................................1315 sem_remove........................................................................................................................1315 shm_attach..........................................................................................................................1316 shm_detach .........................................................................................................................1316 shm_get_var........................................................................................................................1316 shm_put_var .......................................................................................................................1316 shm_remove_var.................................................................................................................1317 shm_remove........................................................................................................................1317 XCI. SESAM database functions.................................................................................................1318 sesam_affected_rows..........................................................................................................1323 sesam_commit ....................................................................................................................1323 sesam_connect....................................................................................................................1324 sesam_diagnostic................................................................................................................1324 sesam_disconnect ...............................................................................................................1326 sesam_errormsg..................................................................................................................1327 sesam_execimm..................................................................................................................1327 sesam_fetch_array ..............................................................................................................1328 sesam_fetch_result .............................................................................................................1329 sesam_fetch_row ................................................................................................................1330 sesam_field_array ...............................................................................................................1332 sesam_field_name...............................................................................................................1335 sesam_free_result ...............................................................................................................1335 sesam_num_fields...............................................................................................................1335 sesam_query .......................................................................................................................1336 sesam_rollback ...................................................................................................................1337 sesam_seek_row .................................................................................................................1338 sesam_settransaction ..........................................................................................................1339 XCII. Funciones para el manejo de sesiones ...............................................................................1341 session_cache_expire..........................................................................................................1347 session_cache_limiter.........................................................................................................1347 session_decode ...................................................................................................................1348 session_destroy...................................................................................................................1348 lvii
  • 58. session_encode ...................................................................................................................1349 session_get_cookie_params ...............................................................................................1349 session_id ...........................................................................................................................1349 session_is_registered ..........................................................................................................1350 session_module_name........................................................................................................1350 session_name......................................................................................................................1350 session_readonly.................................................................................................................1351 session_register...................................................................................................................1351 session_save_path...............................................................................................................1352 session_set_cookie_params................................................................................................1353 session_set_save_handler ...................................................................................................1353 session_start........................................................................................................................1355 session_unregister...............................................................................................................1356 session_unset ......................................................................................................................1356 session_write_close ............................................................................................................1357 XCIII. Shared Memory Functions ...............................................................................................1358 shmop_close .......................................................................................................................1359 shmop_delete......................................................................................................................1359 shmop_open........................................................................................................................1359 shmop_read.........................................................................................................................1360 shmop_size .........................................................................................................................1361 shmop_write .......................................................................................................................1361 XCIV. Shockwave Flash functions ..............................................................................................1363 swf_actiongeturl .................................................................................................................1365 swf_actiongotoframe ..........................................................................................................1365 swf_actiongotolabel............................................................................................................1365 swf_actionnextframe ..........................................................................................................1365 swf_actionplay....................................................................................................................1365 swf_actionprevframe ..........................................................................................................1366 swf_actionsettarget .............................................................................................................1366 swf_actionstop....................................................................................................................1366 swf_actiontogglequality .....................................................................................................1366 swf_actionwaitforframe......................................................................................................1366 swf_addbuttonrecord ..........................................................................................................1366 swf_addcolor ......................................................................................................................1367 swf_closefile .......................................................................................................................1367 swf_definebitmap ...............................................................................................................1368 swf_definefont ....................................................................................................................1368 swf_defineline.....................................................................................................................1368 swf_definepoly ...................................................................................................................1368 swf_definerect.....................................................................................................................1368 swf_definetext.....................................................................................................................1369 swf_endbutton ....................................................................................................................1369 swf_enddoaction.................................................................................................................1369 swf_endshape .....................................................................................................................1369 swf_endsymbol...................................................................................................................1370 swf_fontsize........................................................................................................................1370 swf_fontslant ......................................................................................................................1370 lviii
  • 59. swf_fonttracking.................................................................................................................1370 swf_getbitmapinfo..............................................................................................................1370 swf_getfontinfo...................................................................................................................1371 swf_getframe ......................................................................................................................1371 swf_labelframe ...................................................................................................................1371 swf_lookat ..........................................................................................................................1371 swf_modifyobject ...............................................................................................................1372 swf_mulcolor......................................................................................................................1372 swf_nextid ..........................................................................................................................1372 swf_oncondition .................................................................................................................1373 swf_openfile .......................................................................................................................1373 swf_ortho2..........................................................................................................................1374 swf_ortho............................................................................................................................1374 swf_perspective ..................................................................................................................1374 swf_placeobject ..................................................................................................................1374 swf_polarview ....................................................................................................................1375 swf_popmatrix....................................................................................................................1375 swf_posround .....................................................................................................................1375 swf_pushmatrix ..................................................................................................................1375 swf_removeobject...............................................................................................................1376 swf_rotate ...........................................................................................................................1376 swf_scale ............................................................................................................................1376 swf_setfont .........................................................................................................................1376 swf_setframe.......................................................................................................................1377 swf_shapearc ......................................................................................................................1377 swf_shapecurveto3 .............................................................................................................1377 swf_shapecurveto ...............................................................................................................1377 swf_shapefillbitmapclip......................................................................................................1377 swf_shapefillbitmaptile.......................................................................................................1378 swf_shapefilloff ..................................................................................................................1378 swf_shapefillsolid ...............................................................................................................1378 swf_shapelinesolid .............................................................................................................1378 swf_shapelineto ..................................................................................................................1379 swf_shapemoveto ...............................................................................................................1379 swf_showframe...................................................................................................................1379 swf_startbutton ...................................................................................................................1379 swf_startdoaction................................................................................................................1379 swf_startshape ....................................................................................................................1380 swf_startsymbol..................................................................................................................1380 swf_textwidth .....................................................................................................................1380 swf_translate.......................................................................................................................1380 swf_viewport ......................................................................................................................1381 XCV. Funciones SNMP ...............................................................................................................1382 snmp_get_quick_print ........................................................................................................1383 snmp_set_quick_print.........................................................................................................1383 snmpget...............................................................................................................................1384 snmprealwalk......................................................................................................................1384 snmpset ...............................................................................................................................1384 lix
  • 60. snmpwalk............................................................................................................................1385 snmpwalkoid.......................................................................................................................1385 XCVI. Socket functions ...............................................................................................................1387 socket_accept......................................................................................................................1390 socket_bind.........................................................................................................................1390 socket_clear_error ..............................................................................................................1391 socket_close........................................................................................................................1391 socket_connect ...................................................................................................................1392 socket_create_listen............................................................................................................1392 socket_create_pair ..............................................................................................................1393 socket_create ......................................................................................................................1393 socket_get_option...............................................................................................................1394 socket_getpeername ...........................................................................................................1395 socket_getsockname ...........................................................................................................1395 socket_iovec_add................................................................................................................1396 socket_iovec_alloc..............................................................................................................1396 socket_iovec_delete............................................................................................................1397 socket_iovec_fetch .............................................................................................................1397 socket_iovec_free ...............................................................................................................1398 socket_iovec_set .................................................................................................................1398 socket_last_error.................................................................................................................1399 socket_listen .......................................................................................................................1400 socket_read .........................................................................................................................1400 socket_readv .......................................................................................................................1401 socket_recv .........................................................................................................................1402 socket_recvfrom .................................................................................................................1402 socket_recvmsg ..................................................................................................................1403 socket_select.......................................................................................................................1403 socket_send.........................................................................................................................1405 socket_sendmsg ..................................................................................................................1406 socket_sendto .....................................................................................................................1406 socket_set_nonblock...........................................................................................................1407 socket_set_option ...............................................................................................................1407 socket_shutdown ................................................................................................................1408 socket_strerror ....................................................................................................................1408 socket_write........................................................................................................................1409 socket_writev......................................................................................................................1410 XCVII. Funciones de cadenas......................................................................................................1412 AddCSlashes.......................................................................................................................1413 AddSlashes .........................................................................................................................1413 bin2hex ...............................................................................................................................1413 chop ....................................................................................................................................1413 chr .......................................................................................................................................1414 chunk_split .........................................................................................................................1414 convert_cyr_string ..............................................................................................................1415 count_chars.........................................................................................................................1415 crc32 ...................................................................................................................................1416 crypt....................................................................................................................................1416 lx
  • 61. echo.....................................................................................................................................1417 explode ...............................................................................................................................1417 get_html_translation_table .................................................................................................1418 get_meta_tags .....................................................................................................................1418 hebrev .................................................................................................................................1419 hebrevc................................................................................................................................1419 htmlentities .........................................................................................................................1420 htmlspecialchars .................................................................................................................1420 implode ...............................................................................................................................1420 join......................................................................................................................................1421 levenshtein ..........................................................................................................................1421 localeconv ...........................................................................................................................1421 ltrim ....................................................................................................................................1424 md5_file..............................................................................................................................1424 md5 .....................................................................................................................................1424 metaphone...........................................................................................................................1424 nl_langinfo..........................................................................................................................1425 nl2br....................................................................................................................................1425 ord.......................................................................................................................................1425 parse_str..............................................................................................................................1426 print.....................................................................................................................................1426 printf ...................................................................................................................................1427 quoted_printable_decode....................................................................................................1427 quotemeta ...........................................................................................................................1427 rtrim ....................................................................................................................................1427 setlocale ..............................................................................................................................1428 similar_text .........................................................................................................................1428 soundex...............................................................................................................................1429 sprintf..................................................................................................................................1429 sscanf ..................................................................................................................................1430 str_pad ................................................................................................................................1431 str_repeat ............................................................................................................................1432 str_replace...........................................................................................................................1432 str_rot13..............................................................................................................................1433 strcasecmp ..........................................................................................................................1433 strchr ...................................................................................................................................1433 strcmp .................................................................................................................................1434 strcoll ..................................................................................................................................1434 strcspn.................................................................................................................................1434 strip_tags.............................................................................................................................1434 stripcslashes........................................................................................................................1435 stripslashes..........................................................................................................................1435 stristr ...................................................................................................................................1435 strlen ...................................................................................................................................1436 strnatcasecmp .....................................................................................................................1436 strnatcmp ............................................................................................................................1436 strncasecmp ........................................................................................................................1437 strncmp ...............................................................................................................................1437 lxi
  • 62. strpos...................................................................................................................................1438 strrchr..................................................................................................................................1438 strrev ...................................................................................................................................1439 strrpos .................................................................................................................................1439 strspn...................................................................................................................................1440 strstr ....................................................................................................................................1440 strtok ...................................................................................................................................1441 strtolower ............................................................................................................................1441 strtoupper............................................................................................................................1442 strtr......................................................................................................................................1442 substr_count........................................................................................................................1443 substr_replace .....................................................................................................................1443 substr...................................................................................................................................1444 trim .....................................................................................................................................1445 ucfirst ..................................................................................................................................1445 ucwords...............................................................................................................................1446 vprintf .................................................................................................................................1446 vsprintf................................................................................................................................1446 wordwrap ............................................................................................................................1447 XCVIII. Funciones de Sybase......................................................................................................1448 sybase_affected_rows .........................................................................................................1449 sybase_close .......................................................................................................................1449 sybase_connect ...................................................................................................................1449 sybase_data_seek................................................................................................................1450 sybase_fetch_array .............................................................................................................1450 sybase_fetch_field ..............................................................................................................1450 sybase_fetch_object............................................................................................................1451 sybase_fetch_row ...............................................................................................................1451 sybase_field_seek ...............................................................................................................1452 sybase_free_result ..............................................................................................................1452 sybase_get_last_message ...................................................................................................1452 sybase_min_client_severity................................................................................................1452 sybase_min_error_severity .................................................................................................1453 sybase_min_message_severity ...........................................................................................1453 sybase_min_server_severity ...............................................................................................1453 sybase_num_fields..............................................................................................................1453 sybase_num_rows...............................................................................................................1453 sybase_pconnect .................................................................................................................1454 sybase_query ......................................................................................................................1454 sybase_result.......................................................................................................................1454 sybase_select_db ................................................................................................................1455 XCIX. Tokenizer functions ..........................................................................................................1456 token_get_all ......................................................................................................................1457 token_name.........................................................................................................................1457 C. Funciones URL........................................................................................................................1458 base64_decode....................................................................................................................1459 base64_encode....................................................................................................................1459 parse_url .............................................................................................................................1459 lxii
  • 63. rawurldecode ......................................................................................................................1459 rawurlencode ......................................................................................................................1460 urldecode ............................................................................................................................1460 urlencode ............................................................................................................................1461 CI. Funciones sobre variables ......................................................................................................1462 doubleval.............................................................................................................................1463 empty ..................................................................................................................................1463 floatval ................................................................................................................................1463 get_defined_vars.................................................................................................................1463 get_resource_type...............................................................................................................1464 gettype ................................................................................................................................1465 import_request_variables....................................................................................................1465 intval ...................................................................................................................................1466 is_array ...............................................................................................................................1466 is_bool ................................................................................................................................1466 is_callable ...........................................................................................................................1467 is_double.............................................................................................................................1467 is_float ................................................................................................................................1467 is_int ...................................................................................................................................1467 is_integer ............................................................................................................................1468 is_long ................................................................................................................................1468 is_null .................................................................................................................................1468 is_numeric ..........................................................................................................................1468 is_object..............................................................................................................................1469 is_real .................................................................................................................................1469 is_resource..........................................................................................................................1469 is_scalar ..............................................................................................................................1469 is_string ..............................................................................................................................1470 isset .....................................................................................................................................1471 print_r .................................................................................................................................1471 serialize...............................................................................................................................1472 settype.................................................................................................................................1473 strval ...................................................................................................................................1474 unserialize...........................................................................................................................1474 unset....................................................................................................................................1475 var_dump ............................................................................................................................1476 var_export ...........................................................................................................................1477 CII. vpopmail functions ...............................................................................................................1479 vpopmail_add_alias_domain_ex ........................................................................................1480 vpopmail_add_alias_domain..............................................................................................1480 vpopmail_add_domain_ex .................................................................................................1480 vpopmail_add_domain .......................................................................................................1481 vpopmail_add_user.............................................................................................................1481 vpopmail_alias_add............................................................................................................1482 vpopmail_alias_del_domain...............................................................................................1482 vpopmail_alias_del.............................................................................................................1483 vpopmail_alias_get_all.......................................................................................................1483 vpopmail_alias_get.............................................................................................................1484 lxiii
  • 64. vpopmail_auth_user ...........................................................................................................1484 vpopmail_del_domain_ex ..................................................................................................1485 vpopmail_del_domain ........................................................................................................1485 vpopmail_del_user .............................................................................................................1486 vpopmail_error ...................................................................................................................1486 vpopmail_passwd ...............................................................................................................1487 vpopmail_set_user_quota ...................................................................................................1487 CIII. W32api functions ................................................................................................................1489 w32api_deftype ..................................................................................................................1490 w32api_init_dtype ..............................................................................................................1490 w32api_invoke_function ....................................................................................................1490 w32api_register_function ...................................................................................................1491 w32api_set_call_method ....................................................................................................1491 CIV. Funciones WDDX ...............................................................................................................1493 wddx_add_vars...................................................................................................................1494 wddx_deserialize ................................................................................................................1494 wddx_packet_end ...............................................................................................................1494 wddx_packet_start ..............................................................................................................1494 wddx_serialize_value .........................................................................................................1494 wddx_serialize_vars ...........................................................................................................1495 CV. Funciones de intérprete XML...............................................................................................1496 utf8_decode ........................................................................................................................1505 utf8_encode ........................................................................................................................1505 xml_error_string .................................................................................................................1505 xml_get_current_byte_index ..............................................................................................1506 xml_get_current_column_number .....................................................................................1506 xml_get_current_line_number ...........................................................................................1506 xml_get_error_code............................................................................................................1507 xml_parse_into_struct ........................................................................................................1507 xml_parse ...........................................................................................................................1511 xml_parser_create_ns .........................................................................................................1511 xml_parser_create...............................................................................................................1512 xml_parser_free..................................................................................................................1512 xml_parser_get_option .......................................................................................................1512 xml_parser_set_option .......................................................................................................1513 xml_set_character_data_handler ........................................................................................1514 xml_set_default_handler ....................................................................................................1514 xml_set_element_handler...................................................................................................1515 xml_set_end_namespace_decl_handler .............................................................................1516 xml_set_external_entity_ref_handler .................................................................................1516 xml_set_notation_decl_handler..........................................................................................1517 xml_set_object....................................................................................................................1518 xml_set_processing_instruction_handler ...........................................................................1519 xml_set_start_namespace_decl_handler ............................................................................1520 xml_set_unparsed_entity_decl_handler .............................................................................1520 CVI. XMLRPC functions ............................................................................................................1522 xmlrpc_decode_request......................................................................................................1523 xmlrpc_decode ...................................................................................................................1523 lxiv
  • 65. xmlrpc_encode_request......................................................................................................1523 xmlrpc_encode ...................................................................................................................1524 xmlrpc_get_type .................................................................................................................1524 xmlrpc_parse_method_descriptions ...................................................................................1525 xmlrpc_server_add_introspection_data..............................................................................1525 xmlrpc_server_call_method ...............................................................................................1526 xmlrpc_server_create..........................................................................................................1526 xmlrpc_server_destroy .......................................................................................................1527 xmlrpc_server_register_introspection_callback .................................................................1527 xmlrpc_server_register_method .........................................................................................1528 xmlrpc_set_type .................................................................................................................1528 CVII. XSLT functions ..................................................................................................................1530 xslt_create...........................................................................................................................1531 xslt_errno............................................................................................................................1531 xslt_error.............................................................................................................................1531 xslt_free ..............................................................................................................................1531 xslt_output_process ............................................................................................................1531 xslt_set_base.......................................................................................................................1532 xslt_set_encoding ...............................................................................................................1532 xslt_set_error_handler ........................................................................................................1532 xslt_set_log.........................................................................................................................1532 xslt_set_sax_handler...........................................................................................................1533 xslt_set_sax_handlers .........................................................................................................1533 xslt_set_scheme_handler....................................................................................................1534 xslt_set_scheme_handlers ..................................................................................................1534 CVIII. YAZ ..................................................................................................................................1535 yaz_addinfo ........................................................................................................................1537 yaz_ccl_conf.......................................................................................................................1537 yaz_ccl_parse .....................................................................................................................1537 yaz_close ............................................................................................................................1538 yaz_connect ........................................................................................................................1538 yaz_database.......................................................................................................................1538 yaz_element........................................................................................................................1538 yaz_errno ............................................................................................................................1539 yaz_error.............................................................................................................................1539 yaz_hits...............................................................................................................................1539 yaz_itemorder .....................................................................................................................1539 yaz_present .........................................................................................................................1542 yaz_range............................................................................................................................1542 yaz_record ..........................................................................................................................1542 yaz_scan_result...................................................................................................................1542 yaz_scan .............................................................................................................................1543 yaz_search ..........................................................................................................................1544 yaz_sort...............................................................................................................................1544 yaz_syntax ..........................................................................................................................1545 yaz_wait..............................................................................................................................1545 CIX. NIS funciona .......................................................................................................................1546 yp_all ..................................................................................................................................1547 lxv
  • 66. yp_cat .................................................................................................................................1547 yp_err_string.......................................................................................................................1547 yp_errno..............................................................................................................................1547 yp_first................................................................................................................................1548 yp_get_default_domain ......................................................................................................1548 yp_master ...........................................................................................................................1549 yp_match ............................................................................................................................1549 yp_next ...............................................................................................................................1550 yp_order..............................................................................................................................1550 CX. Zip File Functions (Read Only Access) ...............................................................................1552 zip_close .............................................................................................................................1554 zip_entry_close...................................................................................................................1554 zip_entry_compressedsize..................................................................................................1554 zip_entry_compressionmethod...........................................................................................1554 zip_entry_filesize................................................................................................................1554 zip_entry_name ..................................................................................................................1555 zip_entry_open ...................................................................................................................1555 zip_entry_read ....................................................................................................................1555 zip_open .............................................................................................................................1556 zip_read ..............................................................................................................................1556 CXI. Funciones de Compresión ...................................................................................................1557 gzclose ................................................................................................................................1558 gzcompress .........................................................................................................................1558 gzdeflate..............................................................................................................................1558 gzencode .............................................................................................................................1558 gzeof ...................................................................................................................................1559 gzfile ...................................................................................................................................1560 gzgetc..................................................................................................................................1560 gzgets..................................................................................................................................1560 gzgetss ................................................................................................................................1560 gzinflate ..............................................................................................................................1561 gzopen.................................................................................................................................1561 gzpassthru ...........................................................................................................................1562 gzputs..................................................................................................................................1562 gzread .................................................................................................................................1562 gzrewind .............................................................................................................................1563 gzseek .................................................................................................................................1563 gztell ...................................................................................................................................1563 gzuncompress .....................................................................................................................1564 gzwrite ................................................................................................................................1564 readgzfile ............................................................................................................................1564 V. Extending PHP 4.0..........................................................................................................................1566 25. Overview ................................................................................................................................1566 What Is Zend? and What Is PHP? ......................................................................................1567 26. Extension Possibilities ...........................................................................................................1568 External Modules................................................................................................................1569 Built-in Modules.................................................................................................................1569 lxvi
  • 67. The Zend Engine ................................................................................................................1570 27. Source Layout ........................................................................................................................1571 Extension Conventions .......................................................................................................1573 Macros ................................................................................................................................1573 Memory Management ........................................................................................................1573 Directory and File Functions ..............................................................................................1574 String Handling ..................................................................................................................1574 Complex Types ...................................................................................................................1574 28. PHP’s Automatic Build System .............................................................................................1576 29. Creating Extensions ...............................................................................................................1579 Compiling Modules ............................................................................................................1581 30. Using Extensions....................................................................................................................1583 31. Troubleshooting .....................................................................................................................1586 32. Source Discussion ..................................................................................................................1588 Module Structure ................................................................................................................1589 Header File Inclusions........................................................................................................1589 Declaring Exported Functions............................................................................................1589 Declaration of the Zend Function Block ............................................................................1590 Declaration of the Zend Module Block ..............................................................................1592 Creation of get_module()...................................................................................................1593 Implementation of All Exported Functions........................................................................1594 Summary.............................................................................................................................1594 33. Accepting Arguments.............................................................................................................1595 Determining the Number of Arguments.............................................................................1596 Retrieving Arguments.........................................................................................................1597 Old way of retrieving arguments (deprecated) ...................................................................1600 Dealing with a Variable Number of Arguments/Optional Parameters ...............................1601 Accessing Arguments .........................................................................................................1603 Dealing with Arguments Passed by Reference...................................................................1606 Assuring Write Safety for Other Parameters......................................................................1607 34. Creating Variables ..................................................................................................................1609 Overview ............................................................................................................................1610 Longs (Integers)..................................................................................................................1612 Doubles (Floats) .................................................................................................................1613 Strings.................................................................................................................................1613 Booleans .............................................................................................................................1614 Arrays .................................................................................................................................1615 Objects................................................................................................................................1618 Resources............................................................................................................................1618 Macros for Automatic Global Variable Creation................................................................1622 Creating Constants..............................................................................................................1623 35. Duplicating Variable Contents: The Copy Constructor .........................................................1625 36. Returning Values ....................................................................................................................1627 37. Printing Information...............................................................................................................1630 zend_printf() .....................................................................................................................1631 zend_error() ......................................................................................................................1631 Including Output in phpinfo() ............................................................................................1631 Execution Information........................................................................................................1632 lxvii
  • 68. 38. Startup and Shutdown Functions ...........................................................................................1634 39. Calling User Functions...........................................................................................................1636 40. Initialization File Support ......................................................................................................1639 41. Where to Go from Here .........................................................................................................1642 42. Reference: Some Configuration Macros ................................................................................1644 config.m4 .........................................................................................................................1645 43. API Macros ............................................................................................................................1646 VI. FAQ: Preguntas frecuentes...............................................................................................................?? 44. General Information ...................................................................................................................?? 45. Mailing lists................................................................................................................................?? 46. Obtaining PHP ...........................................................................................................................?? 47. Database issues ..........................................................................................................................?? 48. Installation..................................................................................................................................?? 49. Build Problems...........................................................................................................................?? 50. Using PHP..................................................................................................................................?? 51. PHP and HTML .........................................................................................................................?? 52. PHP and COM ...........................................................................................................................?? 53. PHP and other languages ...........................................................................................................?? 54. Migrating from PHP 2 to PHP 3 ................................................................................................?? 55. Migrating from PHP 3 to PHP 4 ................................................................................................?? 56. Miscellaneous Questions............................................................................................................?? VII. Apéndices..........................................................................................................................................?? A. Historia de PHP y proyectos relacionados ..................................................................................?? Historia de PHP ......................................................................................................................?? PHP/FI ..........................................................................................................................?? PHP 3 ............................................................................................................................?? PHP 4 ............................................................................................................................?? Historia de los proyectos relacionados con PHP ....................................................................?? PEAR ............................................................................................................................?? Iniciativa para la Garantía de Calidad de PHP..............................................................?? PHP-GTK......................................................................................................................?? Libros sobre PHP....................................................................................................................?? Publicaciones sobre PHP........................................................................................................?? B. Migrating from PHP 3 to PHP 4 .................................................................................................?? What has changed in PHP 4 ...................................................................................................?? Running PHP 3 and PHP 4 concurrently................................................................................?? Migrating Configuration Files ................................................................................................?? Parser behavior .......................................................................................................................?? Error reporting ........................................................................................................................?? Configuration changes ..................................................................................................?? Additional warning messages .......................................................................................?? Initializers ...............................................................................................................................?? empty("0")...........................................................................................................................?? Missing functions ...................................................................................................................?? Functions missing due to conceptual changes ..............................................................?? Deprecate functions and extensions..............................................................................?? Changed status for unset() ............................................................................................?? lxviii
  • 69. PHP 3 extension .....................................................................................................................?? Variable substitution in strings ...............................................................................................?? Cookies ...................................................................................................................................?? Handling of global variables...................................................................................................?? C. Migrando de PHP/FI 2.0 a PHP 3.0 ............................................................................................?? Acerca de las incompatibilidades en PHP 3.0 ........................................................................?? Tags de inicio y fin..................................................................................................................?? sintáxis de if..endif .................................................................................................................?? sintáxis de while (mientras)....................................................................................................?? Tipos de expresiones...............................................................................................................?? Cambios en los mensajes de error ..........................................................................................?? Evaluación booleana por corto-circuito..................................................................................?? Retorno de valores en funciones verdadero/falso...................................................................?? Otras incompatibilidades ........................................................................................................?? D. El debugger de PHP ....................................................................................................................?? Usando el Debugger ...............................................................................................................?? Protocolo del debugger...........................................................................................................?? E. Desarrollo en PHP .......................................................................................................................?? Añadiendo funciones al PHP3................................................................................................?? Prototipo de Función.....................................................................................................?? Argumentos de Función ................................................................................................?? Argumentos de Función Variables ................................................................................?? Usando los Argumentos de Función .............................................................................?? Manejo de Memoria en las Funciones ..........................................................................?? Asignando Variables en la Tabla de Símbolos ..............................................................?? Devolviendo valores simples ........................................................................................?? Devolviendo valores complejos ....................................................................................?? Usando la lista de recursos............................................................................................?? Utilizando la tabla de recursos persistentes ..................................................................?? Añadiendo directivas de configuración en tiempo de ejecución...................................?? Llamando a Funciones del Usuario ........................................................................................?? HashTable *tabla_funciones .........................................................................................?? pval *objeto...................................................................................................................?? pval *nombre_func .......................................................................................................?? pval *valret....................................................................................................................?? int num_params.............................................................................................................?? pval *params[] ..............................................................................................................?? Informando de errores ............................................................................................................?? E_NOTICE....................................................................................................................?? E_WARNING ...............................................................................................................?? E_ERROR.....................................................................................................................?? E_PARSE ......................................................................................................................?? E_CORE_ERROR ........................................................................................................?? E_CORE_WARNING...................................................................................................?? F. Lista de alias de funciones ...........................................................................................................?? G. List of Reserved Words ...............................................................................................................?? List of Keywords ....................................................................................................................?? Predefined Variables ...............................................................................................................?? lxix
  • 70. Server variables: $_SERVER .........................................................................................?? Environment variables: $_ENV......................................................................................?? HTTP Cookies: $_COOKIE ...........................................................................................?? HTTP GET variables: $_GET .......................................................................................?? HTTP POST variables: $_POST ...................................................................................?? HTTP File upload variables: $_FILES .........................................................................?? Request variables: $_REQUEST .....................................................................................?? Session variables: $_SESSION .....................................................................................?? Global variables: $GLOBALS .........................................................................................?? The previous error message: $php_errormsg ............................................................?? Predefined Classes ..................................................................................................................?? Standard Defined Classes..............................................................................................?? Ming Defined Classes ...................................................................................................?? Oracle 8 Defined Classes ..............................................................................................?? qtdom Defined Classes..................................................................................................?? ???...........................................................................................................................................?? Core Predefined Constants............................................................................................?? hyperwave Predefined Constants ..................................................................................?? ingres Predefined Constants..........................................................................................?? ldap Predefined Constants.............................................................................................?? mbstring Predefined Constants .....................................................................................?? mcal Predefined Constants............................................................................................?? mcrypt Predefined Constants ........................................................................................?? ming Predefined Constants ...........................................................................................?? mnogosearch Predefined Constants ..............................................................................?? msql Predefined Constants............................................................................................?? mssql Predefined Constants ..........................................................................................?? ncurses Predefined Constants........................................................................................?? oci8 Predefined Constants.............................................................................................?? odbc Predefined Constants............................................................................................?? openssl Predefined Constants........................................................................................?? oracle Predefined Constants..........................................................................................?? pcntl Predefined Constants............................................................................................?? pcre Predefined Constants.............................................................................................?? pgsql Predefined Constants ...........................................................................................?? pspell Predefined Constants ..........................................................................................?? session Predefined Constants ........................................................................................?? sockets Predefined Constants........................................................................................?? standard Predefined Constants ......................................................................................?? swf Predefined Constants..............................................................................................?? tokenizer Predefined Constants.....................................................................................?? w32api Predefined Constants........................................................................................?? xml Predefined Constants .............................................................................................?? yp Predefined Constants................................................................................................?? zlib Predefined Constants..............................................................................................?? H. List of Resource Types ................................................................................................................?? I. Lista de Identificadores (tokens) del Analizador ..........................................................................?? J. Sobre el manual ............................................................................................................................?? lxx
  • 71. Formatos .................................................................................................................................?? Sobre las notas de usuarios.....................................................................................................?? Como encontrar más información sobre PHP ........................................................................?? Como ayudar a mejorar la documentación.............................................................................?? Como generamos los formatos ...............................................................................................?? Traducciones...........................................................................................................................?? Sobre la traducción al español................................................................................................?? K. missing stuff ................................................................................................................................?? lxxi
  • 72. Prefacio PHP, acrónimo de "PHP: Hypertext Preprocessor", es un lenguaje "Open Source" interpretado de alto nivel, especialmente pensado para desarrollos web y el cual puede ser embebido en páginas HTML. La mayoría de su sintaxis es similar a C, Java y Perl y es fácil de aprender. La meta de este lenguaje es permitir escribir a los creadores de páginas web, páginas dinámicas de una manera rápida y fácil, aunque se pueda hacer mucho más con PHP. Este manual contiene principalmente una referencia de funciones PHP, tambien contiene una referencia del lenguaje, explicaciones de caracteristicas importantes de PHP y alguna información suplementaria. Este manual se puede conseguir en diferentes formatos en http://www.php.net/docs.php. Estos ficheros son actualizados a medida que el manual vaya cambiando. Más información sobre como este manual es desarrollado puede encontrarse en el apéndice’Sobre este manual’ i
  • 73. Parte I. Conceptos Básicos Capítulo 1. Introducción 1
  • 74. Capítulo 1. Introducción Qué es PHP? PHP (acronimo de "PHP: Hypertext Preprocessor") es un lenguaje "open source" interpretado de alto nivel embebido en páginas HTML y ejecutado en el servidor. Una respuesta corta y concisa, pero que significa realmente? Un ejemplo nos aclarará las cosas: Ejemplo 1-1. Un ejemplo introductorio <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I’m a PHP script!"; ?> </body> </html> Podemos ver que no es lo mismo que un script escrito en otro lenguaje de programación como Perl o C -- En vez de escribir un programa con muchos comandos para crear una salida en HTML, escribimos el código HTML con cierto código PHP embebido (introducido) en el mismo, que producirá cierta salida (en nuestro ejemplo, producir un texto). El código PHP se incluye entre etiquetas especiales de comienzo y final que nos permitirán entrar y salir del modo PHP. Lo que distingue a PHP de la tecnología Javascript, la cual se ejecuta en la máquina cliente, es que el código PHP es ejecutado en el servidor. Si tuviesemos un script similar al de nuestro ejemplo en nuestro servidor, el cliente sólamente recibiría el resultado de su ejecución en el servidor, sin ninguna posibilidad de determinar que código ha producido el resultado recibido. El servidor web puede ser incluso configurado para que procese todos los ficheros HTML con PHP. Lo mejor de usar PHP es que es extremadamente simple para el principiante, pero a su vez, ofrece muchas caracteristicas avanzadas para los programadores profesionales. No tengais miedo de leer la larga lista de caracteristicas de PHP, en poco tiempo podreis empezar a escribir vuestros primeros scripts. Aunque el desarrollo de PHP está concentrado en la programación de scripts en la parte del servidor, se puede utilizar para muchas otras cosas. Sigue leyendo y descubre más sobre PHP en la sección Qué se puede hacer con PHP?. 2
  • 75. Capítulo 1. Introducción Qué se puede hacer con PHP? PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la información de formularios, generar páginas con contenidos dinámicos, o mandar y recibir cookies. Y esto no es todo, se puede hacer mucho más. Existen tres campos en los que scripts escritos en PHP son usados. • Scripts en la parte del servidor. Este es el campo más tradicional y el principal campo de trabajo. Se necesitan tres cosas para que esto funcione. El parseador PHP (CGI ó módulo), un servidor web y un navegador. Se necesita correr el servidor web con PHP instalado. El resultado del programa PHP se puede obtener a través del navegador, conectando con el servidor web. Consultar la sección Instrucciones de instalación para más información. • Scripts en linea de comandos. Podeis crear un script PHP y correrlo sin ningún servidor web ó navegador. Solamente necesitais el parseador PHP para usarlo de esta manera. Este tipo de uso es ideal para scripts ejecutados regularmente desde cron (en *nix ó Linux) ó el Planificador de tareas (en Windows). Estos scripts tambien pueden ser usados para tareas simples de procesado de texto. Consultar la sección Usos de PHP en la linea de comandos para más información. • Escribir aplicaciones gráficas clientes. PHP no es probablemente el mejor lenguaje para escribir aplicaciones gráficas, pero si sabeis bien PHP, y os gustaria utilizar algunas características avanzadas en programas clientes, podeis utilizar PHP-GTK para escribir dichos programas. Es tambien posible escribir aplicaciones independientes de una plataforma. PHP-GTK es una extensión de PHP, no disponible en la distribución principal. Si te interesa PHP-GTK, puedes visitar las páginas web del projecto (http://gtk.php.net/). PHP puede ser utilizado en cualquiera de los principales sistemas operativos del mercado, incluyendo Linux, muchas variantes Unix (incluido HP-UX, Solaris y OpenBSD), Microsoft Windows, Mac OS X, RISC OS y probablemente alguno más. PHP soporta la mayoría de servidores web de hoy en día, incluyendo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape y iPlanet, Oreilly Website Pro server, Caudium, Xitami, OmniHTTPd y muchos otros. PHP tiene módulos disponibles para la mayoría de los servidores, para aquellos otros que soporten el estándar CGI, PHP puede usarse como procesador CGI. Asi que, con PHP teneis la libertad de escoger el sistema operativo y el servidor de vuestro gusto. Tambien teneis la posibilidad de usar programación de procediminetos ó programación orientada a objetos. Aunque no todas la características estándares de la programación orientada a objetos están implementadas en la versión actual de PHP, muchas librerías y aplicaciones grandes (incluyendo la libreria PEAR) están escritas íntegramente usando programación orientada a objetos. Con PHP no estais limitados a resultados en HTML. Entre las habilidades de PHP se incluyen, creación de imágenes, ficheros PDF y películas Flash (usando libswf y Ming) sobre la marcha. Tambien podeis presentar otros resultados, como XHTM y ficheros XML. PHP puede autogenerar estos ficheros y grabarlos en el sistema de ficheros en vez de presentarlos en la pantalla. Quizas la característica más potente y destacable de PHP es su soporte para una gran cantidad de bases de datos. Escribir un interfaz via web para una base de datos es una tarea simple con PHP. Las siguientes bases de datos están soportadas actualmente: Adabas D Ingres Oracle (OCI7 and OCI8) 3
  • 76. Capítulo 1. Introducción dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro (read-only) mSQL Solid Hyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Informix ODBC Unix dbm Tambien tenemos una extensión DBX de abstracción de base de datos que permite usar de forma transparente cualquier base de datos soportada por la extension. Adicionalmente, PHP soporta ODBC (The Open Database Connection standard), asi que podeis conectar a cualquier base de datos que soporte este estandar. PHP tambien tiene soporte para comunicarse con otros servicios usando protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros. Tambien se pueden crear raw sockets. PHP soporta WDDX para intercambio de datos entre lenguajes de programación en web. Y hablando de interconexión, PHP puede utilizar objetos Java de forma transparente como objetos PHP Y la extensión de CORBA puede ser utilizada para acceder a objetos remotos. PHP tiene unas características muy útiles para el proceso de texto, desde expresiones regulares POSIX Extended ó Perl hasta parseador de documentos XML. Para parsear y acceder documentos XML, soportamos los estandares SAX y DOM. Podeis utilizar la extensión XSLT para transformar documentos XML. Si usais PHP en el campo del comercio electrónico, encontrareis muy útiles las funciones Cybercash, CyberMUT, VeriSign Payflow Pro y CCVS para vuestros programas de pago. Para terminar, tenemos muchas otras extensiones muy interesantes, las funciones del motor de búsquedas mnoGoSearch, funciones para pasarelas de IRC, utilidades de compresión (gzip, bz2)„ conversión de calendarios, traducción ..... Como podeis ver esta página no es suficiente para enumerar todas las características y beneficios que PHP ofrece. Consultar las secciones Instalando PHP y Referencia de las funciones para una explicación de las extensiones mencionadas aqui. 4
  • 78. Capítulo 2. Instalación Bajándose la última versión El código fuente y las distribuciones binarias para algunas plataformas (incluído Windows) se pueden encontrar en http://www.php.net/. Instalación en sistemas UNIX Esta sección le guiará a través de la configuración e instalación del PHP. Conocimientos y software necesarios: • Habilidades básicas en UNIX (ser capaz de manejar el "make" y un compilador de C) • Un compilador ANSI de C • Un servidor web Instrucciones Rápidas de Instalación (Versión Módulo de Apache) 1. gunzip apache_1.3.x.tar.gz 2. tar xvf apache_1.3.x.tar 3. gunzip php-3.0.x.tar.gz 4. tar xvf php-3.0.x.tar 5. cd apache_1.3.x 6. ./configure --prefix=/www 7. cd ../php-3.0.x 8. ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars 9. make 10. make install 11. cd ../apache_1.3.x 12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a 13. make 14. make install En lugar de este paso quizás prefiera simplemente copiar el binario httpd encima del binario existente. Si lo hace, asegúrese antes de cerrar su servidor. 15. cd ../php-3.0.x 16. cp php3.ini-dist /usr/local/lib/php3.ini Puede editar el archivo /usr/local/lib/php3.ini para ajustar opciones del PHP. Si prefiere tenerlo en otro sitio, utilice --with-config-file-path=/path en el paso 8. 17. Edite su archivo httpd.conf o srm.conf y añada: 6
  • 79. Capítulo 2. Instalación AddType application/x-httpd-php3 .php3 Puede elegir la extensión que desee aquí. .php3 es simplemente nuestra sugerencia. 18. Utilice su método habitual para iniciar el servidor Apache (debe detener y reiniciar el servidor, no solamente hacerlo recargarse usando una señal HUP o USR1.) Configuración Hay dos maneras de configurar el PHP. • Utilizando el script de "setup" que viene con el PHP. Este script le hace una serie de preguntas (casi como el script "install" del PHP/FI 2.0) y ejecuta el "configure" al final. Para ejecutar este script, escriba ./setup. Este script también creará un archivo llamado "do-conf", que contendrá las opciones pasadas a la configuración. Puede editar este archivo para cambiar algunas opciones sin tener que re-ejecutar el "setup". Escriba luego ./do-conf para ejecutar la configuración con las nuevas opciones. • Ejecutar el "configure" a mano. Para ver las opciones de que dispone, escriba ./configure --help. Los detalles sobre las distintas opciones de configuración son listados a continuación. Módulo del Apache Para configurar el PHP como módulo de Apache, responda "yes" a "Build as an Apache module?" (la opción --with-apache=DIR es la que lo configura) y especifique el directorio base de la distribución de Apache. Si ha desempacado el Apache en /usr/local/www/apache_1.2.4, este será su directorio base de la distribución de Apache. El directorio por defecto es /usr/local/etc/httpd. Módulo fhttpd Para configurar el PHP como módulo fhttpd, responda "yes" a "Build as an fhttpd module?" (la opción --with-fhttpd=DIR es la que lo configura) y especifique el directorio base del fuente del fhttpd. El directorio por defecto es /usr/local/src/fhttpd. Si está ejecutando fhttpd, configurar PHP como módulo le dará mejor rendimiento, más control y capacidad de ejecución remota. 7
  • 80. Capítulo 2. Instalación CGI version El valor por defecto es configurar el PHP como programa CGI. Si está ejecutando un servidor web para el que el PHP tiene soporte como módulo, debería elegir dicha solución por motivos de rendimiento. Sin embargo, la versión CGI permite a los usuarios del Apache el ejecutar distintas páginas con PHP bajo distintos identificadores de usuario. Por favor, asegúrese de haber leído el capítulo sobre Seguridad si va a ejecutar el PHP como CGI. Opciones de soporte para Base de Datos El PHP tiene soporte nativo para bastantes bases de datos (así como para ODBC): Adabas D --with-adabas=DIR Compila con soporte para Adabas D. El parámetro es el directorio de instalación de Adabas D y por defecto vale /usr/local/adabasd. Página de Adabas (http://www.adabas.com/) dBase --with-dbase Habilita el soporte integrado para DBase. No se precisan librerías externas. filePro --with-filepro Habilita el soporte integrado de sólo lectura para filePro. No se precisan librerías externas. mSQL --with-msql=DIR Habilita el soporte para mSQL. El parámetro es el directorio de instalación de mSQL y por defecto vale /usr/local/Hughes. Este es el directorio por defecto de la distribución mSQL 2.0. configure detecta automáticamente qué versión de mSQL está ejecutándose y el PHP soporta tanto 1.0 como 2.0, pero si compila el PHP con mSQL 1.0 sólo podrá acceder a bases de datos de esa versión y viceversa. Vea también Directivas de Configuración de mSQL en el archivo de configuración. 8
  • 81. Capítulo 2. Instalación Página de mSQL (http://www.hughes.com.au) MySQL --with-mysql=DIR Habilita el soporte para MySQL. El parámetro es el directorio de instalación de MySQL y por defecto vale /usr/local. Este es el directorio de instalación de la distribución de MySQL. Vea también Directivas de Configuración de MySQL en el archivo de configuración. Página de MySQL (http://www.tcx.se) iODBC --with-iodbc=DIR Incluye soporte para iODBC. Esta característica se desarrolló inicialmente para el iODBC Driver Manager, un gestor de controlador de ODBC de redistribución libre que ese ejecuta bajo varios sabores de UNIX. El parámetro es el directorio de instalación de iODBC y por defecto vale /usr/local. Página de FreeODBC (http://users.ids.net/~bjepson/freeODBC/) o página de iODBC (http://www.iodbc.org) OpenLink ODBC --with-openlink=DIR Incluye soporte para OpenLink ODBC. El parámetro es el directorio de instalación de OpenLink ODBC y por defecto vale /usr/local/openlink. Página de OpenLink Software (http://www.openlinksw.com/) Oracle --with-oracle=DIR Incluye soporte para Oracle. Se ha probado y debería funcionar al menos con las versiones de la 7.0 a la 7.3. El parámetro es el directorio ORACLE_HOME. No necesita especificar este parámetro si su entorno de Oracle ya está ajustado. Página de Oracle (http://www.oracle.com) 9
  • 82. Capítulo 2. Instalación PostgreSQL --with-pgsql=DIR Incluye soporte para PostgreSQL. El parámetro es el directorio base de la instalación de PostgreSQL y por defecto vale /usr/local/pgsql. Vea también Directivas de Configuración de Postgres en el archivo de configuración. Página de PostgreSQL (http://www.postgreSQL.org/) Solid --with-solid=DIR Incluye soporte para Solid. El parámetro es el directorio de instalación y vale por defecto /usr/local/solid. Página de Solid (http://www.solidtech.com) Sybase --with-sybase=DIR Incluye soporte para Sybase. El parámetro es el directorio de instalación y vale por defecto /home/sybase. Vea también Directivas de Configuración de Sybase en el archivo de configuración. Página de Sybase (http://www.sybase.com) Sybase-CT --with-sybase-ct=DIR Incluye soporte para Sybase-CT. El parámetro es el directorio de instalación de Sybase-CT y por defecto vale /home/sybase. Vea también Directovas de Configuración de Sybase-CT en el archivo de configuración. Velocis --with-velocis=DIR 10
  • 83. Capítulo 2. Instalación Incluye soporte para Velocis. El parámetro es el directorio de instalación de Velocis y vale por defecto /usr/local/velocis. Página de Velocis (http://www.raima.com) Una librería a medida de ODBC --with-custom-odbc=DIR Incluye soporte para una librería a medida arbitraria de ODBC. El parámetro es el directorio base y por defecto vale /usr/local. Esta opción implica que se ha definido CUSTOM_ODBC_LIBS cuando se ejecutó el script de configuración. También deberá tener una cabecera odbc.h válida en algún lugar de su sendero (path) de inclusión. Si no tiene uno, créelo e incluya su cabecera específica desde ahí. Su cabecera puede requerir algunas definiciones extra, particularmente si es multiplataforma. Defínalas en CFLAGS. Por ejemplo, puede usar Sybase SQL Anywhere bajo QNX como sigue: CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50 ODBC Unificado --disable-unified-odbc Deshabilita el módulo de ODBC Unificado, que es un interfaz común a todas las bases de datos con interfaces basados en ODBC, tales como Solid y Adabas D. También funciona para librerías normales de ODBC. Ha sido probado con iODBC, Solid, Adabas D y Sybase SQL Anywhere. Requiere que uno (y sólo uno) de estos módulos o el módulo de Velocis esté habilitado, o que se especifique una librería a medida de ODBC. Esta opción sólo se puede aplicar si alguna de estas opciones es usada: --with-iodbc, --with-solid, --with-adabas, --with-velocis, o --with-custom-odbc. Vea también Directivas de Configuración de ODBC Unificado en el archivo de configuración. LDAP --with-ldap=DIR Incluye soporte para LDAP (Lightweight Directory Access Protocol - Protocolo Ligero de Acceso a Directorios). El parámetro es el directorio base de instalación de LDAP, y por defecto vale /usr/local/ldap. Puede encontrar más información sobre LDAP en RFC1777 (ftp://ftp.isi.edu/in-notes/rfc1777.txt) y en RFC1778 (ftp://ftp.isi.edu/in-notes/rfc1778.txt). 11
  • 84. Capítulo 2. Instalación Otras opciones de configuración --with-mcrypt=DIR --with-mcrypt Incluye soporte para la librería mcrypt. Vea la documentación de mcrypt para más información. Si utiliza el argumento opcional DIR, el PHP buscará mcrypt.h en DIR/include. --enable-sysvsem --enable-sysvsem Incluye soporte para semáforos Sys V (soportados por muchos derivados Unix). Vea la documentación sobre Semáforos y Memoria Compartida para más información. --enable-sysvshm --enable-sysvshm Incluye soporte para la memoria compartida Sys V (soportada por muchos derivados Unix). Vea la documentación sobre Semáforos y Memoria Compartida para más información. --with-xml --with-xml Incluye soporte para un parser XML no validador que utiliza la librería expat (http://www.jclark.com/xml/) de James Clark. Vea la referencia de funciones XML para más detalles. --enable-maintainer-mode --enable-maintainer-mode Activa avisos extra de dependencias y del compilador utilizados por algunos de los desarrolladores del PHP. 12
  • 85. Capítulo 2. Instalación --with-system-regex --with-system-regex Utiliza la librería de expresiones regulares del sistema en lugar de la incluída. Si está compilando PHP como módulo de servidor, debe utilizar la misma librería cuando genere el PHP y cuando lo enlace con el servidor. Active esto si la librería del sistema proporciona características especiales que pueda necesitar. Se recomienda utilizar la librería incluída siempre que sea posible. --with-config-file-path --with-config-file-path=DIR El path utilizado para buscar el archivo de configuración cuando arranca el PHP. --with-exec-dir --with-exec-dir=DIR Sólo permite ejecutar programas en DIR cuando está en modo seguro. Por defecto vale /usr/local/bin. Esta opción sólo fija el valor por defecto. Puede ser cambiado posteriormente mediante la directiva safe_mode_exec_dir en el fichero de configuración . --enable-debug --enable-debug Habilita información de depuración adicional. Esto hace posible obtener información más detallada cuando hay problemas con el PHP. (Nótese que esto no tiene que ver con las facilidades de depuración o con la información disponible para los script PHP). --enable-safe-mode --enable-safe-mode Habilita el "modo seguro" por defecto. Esto impone varias restricciones sobre lo que el PHP puede hacer, tales como abrir fichero sólo en el raiz de documentos. Lea el capítulo de Seguridad para más información. Los usuarios de CGI deberán siempre habilitar el modo seguro. Esta opción sólo fija el valor por defecto. Puede ser habilitado o deshabilitado posteriormente mediante la directiva safe_mode en el archivo de configuración. 13
  • 86. Capítulo 2. Instalación --enable-track-vars --enable-track-vars Hace que el PHP lleve el control de dónde proceden las variables GET/POST/cookie usando las matrices HTTP_GET_VARS, HTTP_POST_VARS y HTTP_COOKIE_VARS. Esta opción sólo fija el valor por defecto. Puede ser habilitado o deshabilitado posteriormente mediante la directiva track_vars en el archivo de configuración. --enable-magic-quotes --enable-magic-quotes Habilita las comillas mágicas por defecto. Esta opción sólo fija el valor por defecto. Puede ser habilitada o deshabilitada posteriormente mediante la directiva magic_quotes_runtime en el archivo de configuración. Vea también las directivas magic_quotes_gpc y magic_quotes_sybase. --enable-debugger --enable-debugger Habilita el soporte de depuración interno del PHP. Esta característica aún está en estado experimental. Vea también las directivas de Configuración del Depurador en el archivo de configuración. --enable-discard-path --enable-discard-path Si está habilitado, el ejecutable CGI del PHP se puede situar tranquilamente fuera del árbol de la web y la gente no podrá saltarse la seguridad del .htaccess. Lea la sección en el capítulo de seguridad sobre esta opción. --enable-bcmath --enable-bcmath Habilita las funciones matemáticas de precisión arbitraria estilo bc. Vea también la opción bcmath.scale en el archivo de configuración. 14
  • 87. Capítulo 2. Instalación --enable-force-cgi-redirect --enable-force-cgi-redirect Habilita la comprobación de seguridad para redirecciones internas del servidor. Deberá usar esta opción si está ejecutando la versión CGI bajo Apache. Cuando se utiliza el PHP como un ejecutable CGI, siempre comprueba primero is está siendo utilizado bajo redirección (por ejemplo bajo Apache, usando directivas Action). Esto asegura que el ejecutable del PHP no se puede usar para saltarse los mecanismos estánder de autentificación del servidor web llamando al ejecutale directamente, como en http://my.host/cgi-bin/php/secret/doc.html. Este ejemplo accede al archivo http://my.host/secret/doc.html pero sin respetar ningún ajuste de seguridad del httpd para el directorio /secret. No habilitando esta opción se deshabilita la comprobación y se permite el saltarse los ajustes de seguridad y autenticación del httpd. Haga esto sólo si el software de su servidor no puede indicar que se ha realizado una redirección segura y que todos sus archivos bajo la raiz de documentos y los directorios de los usuarios pueden ser accedidos por cualquiera. Lea la sección en el capítulo de seguridad acerca de esta opción. --disable-short-tags --disable-short-tags Deshabilita las etiquetas de PHP en formato corto <? ?>. Debe deshabilitar el formato corto si desea usar PHP con XML. Con el formato corto deshabilitado, la única etiqueta de código de PHP es <?php ?>. Esta opción sólo fija el valor por defecto. Puede ser habilitada o deshabilitada posteriormente mediante la directiva short_open_tag en el archivo de configuración. --enable-url-includes --enable-url-includes Hace posible ejecutar código en otros servidores HTTP o FTP directamente desde el PHP usando include(). Vea también la opción include_path en el archivo de configuración. --disable-syntax-hl --disable-syntax-hl Desconecta el resalte de sintáxis. 15
  • 88. Capítulo 2. Instalación CPPFLAGS y LDFLAGS Para hacer que la instalación de PHP busque los archivos de cabecera o de librería en distintos directorios, modifique las variables de entorno CPPFLAGS y LDFLAGS respectivamente. Si está utilizando un shell "sensible", podrá ejecutar LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure Construyendo Cuando el PHP está configurado, ya está listo para construir el ejecutable CGI o la librería PERL. El comando make debería ocuparse de esto. Si fallara y no puede saber el motivo, vea la sección de Problemas. Probando Si ha construído el PHP como un programa CGI, puede probar su funcionamiento tecleando make test. Siempre es buena idea probar su construcción. Así puede atrapar pronto los problemas del PHP en su plataforma sin tener que batallar con ellos luego. Comprobando la velocidad Si ha construído el PHP como un programa CGI, puede comprobar la velocidad de su código escribiendo make bench. Nótese que se el modo seguro está habilitado por defecto, el test no podrá finalizar si se toma más de los 30 segundos disponibles. Esto se debe a que la función set_time_limit() no se puede usar en modo seguro. Use el ajuste de configuración max_execution_time para controlar este tiempo en sus propios script. make bench ignora el archivo de configuración. Instalación en sistemas Windows 95/98/NT Esta guía de instalación le ayudará a instalar y configurar el PHP en sus servidores web bajo Windows 9x/NT. Esta guía fue compilada por Bob Silva (mailto:bob_silva@mail.umesd.k12.or.us). La última revisión puede encontrarse en http://www.umesd.k12.or.us/php/win32install.html. Esta guía proporciona soporte de instalacion para: • Personal Web Server (se recomienda la última versión) • Internet Information Server 3 ó 4 • Apache 1.3.x • Omni HTTPd 2.0b1 16
  • 89. Capítulo 2. Instalación Pasos Generales de Instalación Los siguientes pasos deben realizarse en todas las instalaciones antes de las instrucciones específicas de cada servidor. • Extraiga el archivo de distribución a un directorio de su elección. "C:PHP3" es un buen comienzo. • Copie el archivo ’php3.ini-dist’ a su directorio ’%WINDOWS%’ y renómbrelo a ’php3.ini’. Su directorio ’%WINDOWS%’ es típicamente: c:windows para Windows 95/98 c:winnt o c:winnt40 para servidores NT • Edite su archivo ’php3.ini’: • Necesitaá cambiar la opción ’extension_dir’ para que apunte a su php-install-dir, o a donde quiera que haya puesto sus archivos ’php3_*.dll’. P.ej.: c:php3 • Si está utilizando Omni Httpd, no siga el siguiente paso. Fije el ’doc_root’ para que apunte a la raiz web de sus servidores. P.ej.: c:apachehtdocs o c:webroot • Elija qué módulos desearía cargar cuando comience el PHP. Puede descomentar las líneas: ’extension=php3_*.dll’ para cargar estos módulos. Algunos módulos requieren que tenga instaladas en sus sistema librerías adicionales para que el módulo funcione correctamente. El FAQ (http://www.php.net/FAQ.php) de PHP tiene más información sobre dónde obtener librerías de soporte. También puede cargar un módulo dinámicamente en su script utilizando: dl("php_*.dll"); • En el PWS y el IIS puede fijar el browscap.ini para que apunte a: ’c:windowssysteminetsrvbrowscap.ini’ bajo Windows 95/98 y a ’c:winntsystem32inetsrvbrowscap.ini’ bajo NT Server. Las DLL para las extensiones del PHP van precedidas de ’php3_’. Esto evita confusiones entre las extensiones del PHP y sus librerías de soporte. Windows 95/98/NT y PWS/IIS 3 El método recomendado para configurar estos servidores es usar el archivo INF incluído con la distribución (php_iis_reg.inf). Quizás desee editar este archivo y asegurarse que las extensiones y directorios de instalación se ajustan a su configuración. O puede seguir los pasos que siguen para hacerlo de forma manual. AVISO: Estos pasos conllevan el trabajar directamente con el registro de windows. Un error aquí puede dejar su sistema en un estado inestable. Le recomendamos encarecidamente que haga una copia de seguridad del registro con antelación. El equipo de Desarrollo del PHP no se hará responsable si se daña su registro. • Ejecute Regedit. • Navegue hasta: HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap. • En el menú de edición elija: New->String Value. 17
  • 90. Capítulo 2. Instalación • Escriba la extensión que desea usar para sus script PHP. P.ej.: .php3 • Haga doble click en el nuevo valor de cadena y escriba la ruta al php.exe en el campo del valor. P.ej.: c:php3php.exe %s %s. La parte ’%s %s’ son MUY importantes, pues el PHP no funcionará correctamente sin ella. • Repita estos pasos para cada extensión que desee asociar con los scripts PHP. • Ahora navegue hasta: HKEY_CLASSES_ROOT • En el menú de edición elija: New->Key. • Déle a la clave el nombre de la extensión que preparó en la sección anterior. P.ej.: .php3 • Marque la nueva clave y en el panel del lado derecho haga doble click en "default value" y escriba phpfile. • Repita el último paso para cada extensión que haya preparado en la sección previa. • Ahora cree otra New->Key bajo HKEY_CLASSES_ROOT y denomínela phpfile. • Marque la nueva clave phpfile y haga doble click en el panel derecho sobre "default value" y escriba PHP Script. • Pulse el botón derecho sobre la clave phpfile y seleccione New->Key y llámela Shell. • Pulse el botón derecho sobre la clave Shell y elija New->Key y llámela open. • Pulse el botón derecho sobre la clave open y elija New->Key y llámela command. • Marque la nueva clave command y en el panel derecho haga doble click sobre "default value" y entre la ruta hasta el php.exe. P.ej.: c:php3php.exe -q %1. (no olvide el %1). • Salga del Regedit. Los usuarios de PWS e IIS3 tienen ahora un sistema completamente operativo. Los usuarios del IIS3 también pueden usar una curiosa herramienta (http://www.genusa.com/iis/iiscfg.html) de Steven Genusa para configurar sus mapeados de script. Windows NT e IIS 4 Para instalar el PHP en un NT Server con IIS 4, siga estas instrucciones: • En el Controlador de Servicios de Internet (MMC), elija el sitio Web o el directorio de comienzo de una aplicación. • Abra las propiedades del directorio (haciendo click derecho y eligiendo propiedades) y luego pulse sobre la pestaña Carpeta Inicial, Directorio Virtual o Directorio. • Pulse el botón Configuración y luego pulse sobre la pestaña Mapas de Aplicación. • Pulse en Añadir, y en la caja Programa, escriba: c:path-to-php-dirphp.exe %s %s. DEBE mantene los %s %s al final, pues el PHP no funcionará correctamente si se equivoca al hacerlo. • En la caja Extensión, escriba la extensión de fichero que desea asociar a los script de PHP. Debe repetir los pasos 5 y 6 para cada extensión que desee asociar con los scripts PHP ( .php3 y .phtml son habituales). 18
  • 91. Capítulo 2. Instalación • Ajuste la seguridad apropiada (esto se realiza en el Controlador de Servicio de Internet (ISM)), y si su NT Server usa el sistema de archivos NTFS, añada derechos de ejecución para I_USR_ al directorio que contenga el php.exe. Windows 9x/NT y Apache 1.3.x Debe editar sus archivos srm.conf o httpd.conf para configurar el Apache para que trabaje con el ejecutable CGI del PHP. Aunque puede haber algunas variaciones al configurar PHP bajo Apache, esta es lo suficientemente simple para ser usada por el novato. Por favor, consulte la Documentación del Apache para saber de las subsiguientes directivas de configuración. • ScriptAlias /php3/ "c:/ruta-al-dir-del-php/" • AddType application/x-httpd-php3 .php3 • AddType application/x-httpd-php3 .phtml • Action application/x-httpd-php3 "/php3/php.exe" Para utilizar la capacidad de marcado del código fuente, cree simplemente un script de PHP y pegue este código en él: <?php show_source("script_original_php.php3"); ?>. Sustituya script_original_php.php3 por el nombre del archivo del que desea visualizar el código fuente (esta es la única forma de hacerlo). Nota: Bajo Win-Apache todas las barras invertidas de una ruta tal como: "c:directoryfile.ext", deben ser convertidas a barras hacia adelante. Omni HTTPd 2.0b1 para Windows Esta ha resultado ser la configuración más sencilla: Paso 1: Instale el servidor Omni Paso 2: Pulse el botón derecho sobre el icono azul del OmniHTTPd que está en la barrita del sistema y elija Propiedades Paso 3: Pulse sobre Web Server Global Settings Paso 4: En la pestaña ’External’, escriba: virtual = .php3 | actual = c:ruta-al-dir-del-phpphp.exe Paso 5: En la pestaña Mime, escriba: virtual = wwwserver/stdcgi | actual = .php3 Paso 6: Pulse en OK Repita los pasos 2 a 6 para cada extensión que desee asociar al PHP. Módulos del PHP Tabla 2-1. Módulos del PHP php3_calendar.dll Funciones de conversión de calendario 19
  • 92. Capítulo 2. Instalación php3_crypt.dll Funciones de criptografía php3_dbase.dll Funciones para DBase php3_dbm.dll Emulación GDBM con la librería Berkeley DB2 php3_filepro.dll Acceso SÓLO LECTURA a bases de datos filepro php3_gd.dll Funciones de librería GD para manipular GIF php3_hyperwave.dll Funciones de HyperWave php3_imap4r2.dll Funciones de IMAP 4 php3_ldap.dll Funciones de LDAP php3_msql1.dll Cliente de mSQL 1 php3_msql2.dll Cliente de mSQL 2 php3_mssql.dll Cliente de MSSQL client (requiere las librerías de MSSQL DB php3_mysql.dll Funciones de MySQL php3_nsmail.dll Funciones de correo de Netscape php3_oci73.dll Funciones de Oracle php3_snmp.dll Funciones get y walk de SNMP (¡sólo en NT!) php3_zlib.dll Funciones de ZLib ¿Problemas? Lea las PMF (FAQ) Algunos problemas son más comunes que otros. Los más comunes están listados en las PMF (Preguntas Más Frecuentes) del PHP, que están en http://www.php.net/FAQ.php Informes de error Si cree que ha encontrado un error en el PHP, por favor infórmenos. Los desarrolladores del PHP probablemente no tengan conocimiento del mismo, y salvo si informa del mismo, pocas probabilidades habrá de que lo solucionen. Puede informar de los errores usando el sistema de rastreo de errores en http://bugs.php.net/. Otros problemas Si aún se encuentra atascado, alguien de la lista de correos del PHP puede ser capaz de ayudarle. Deberá buscar primero en los archivos, por si acaso alguien ya ha respondido a otra persona que tuvo el mismo problema que usted. Los archivos están disponibles desde la página de soporte en http://www.php.net/. 20
  • 93. Capítulo 2. Instalación Para suscribirse a la lista de correo de PHP, envíe un correo vacío a php-general-subscribe@lists.php.net (mailto:php-general-subscribe@lists.php.net). La dirección de la lista de correo es php-general@lists.php.net. Si desea ayuda sobre la lista de correo, intente ser preciso y de los detalles necesarios sobre su entorno (qué sistema operativo, qué versión de PHP, qué servidor web, si está ejecutando el PHP como CGI o como módulo de servidor, etc.) y también código suficiente para que otros puedan reproducir y comprobar su problema. 21
  • 95. Capítulo 3. Configuración El archivo de configuración El archivo de configuración (llamado php3.ini en PHP 3.0, y simplemente php.ini a partir del PHP 4.0) es leído cuando arranca el PHP. Para las versiones de PHP como módulo de servidor esto sólo ocurre una vez al arrancar el servidor web. Para la versión CGI, esto ocurre en cada llamada. Cuando se utiliza PHP como módulo Apache, también puede cambiar los ajustes de configuración utilizando directivas en los archivos de configuración del Apache y en los .htaccess. Con el PHP 3.0 hay directivas Apache que se corresponden a cada uno de los ajustes de configuración del php3.ini, con la excepción que su nombre va precedido de "php3_". Con el PHP 4.0 sólo hay unas pocas directivas de Apache que le permiten cambiar los ajustes de configuración del PHP. php_value nombre valor Fija el valor de la variable especificada. php_flag nombre on|off Fija una opción de configuración de tipo Boolean. php_admin_value nombre valor Fija el valor de la variable especificada. Los ajustes de configuración de tipo "Admin" sólo se pueden fijar desde los archivos principales de configuración del Apache, y no desde los .htaccess. php_admin_flag nombre on|off Fija una opción de configuración de tipo Boolean. Puede ver los ajustes de los valores de configuración en la salida de phpinfo(). También puede acceder a los valores individuales de los ajustes de configuración utilizando get_cfg_var(). Directivas Generales de Configuración asp_tags boolean Permite el uso de las etiquetas estilo ASP <% %> además de las habituales etiquetas <?php ?>. También se incluye el atajo para imprimir variables <%= $valor %>. Para más información, vea Escapando del HTML. Nota: El soporte para etiquetas estilo ASP se añadió en la 3.0.4. 23
  • 96. Capítulo 3. Configuración auto_append_file string Especifica el nombre de un archivo que es troceado automáticamente después del archivo principal. El archivo se incluye como si fuese llamado mediante la función include(), así que se utiliza include_path. El valor especial none desconecta la adición automática de archivos. Nota: Si el script es terminado con exit(), no tendrá lugar la adición automática. auto_prepend_file string Especifica el nombre de un archivo que es troceado automáticamente antes del archivo principal. Specifies the name of a file that is automatically parsed before the main file. El archivo se incluye como si fuese llamado mediante la función include(), así que se utiliza include_path. El valor especial none desconecta la adición automática de archivos. cgi_ext string display_errors boolean Determina si los errores se visualizan en pantalla como parte de la salida en HTML o no. doc_root string "Directorio raiz" del PHP en el servidor. Sólo se usa si no está vacío. Si el PHP se configura con safe mode, no se sirven archivos fuera de este directorio. engine boolean Esta directiva sólo es realmente útil en la versión de PHP como módulo Apache. Se utiliza por sitios que desean habilitar la ejecución del PHP directorio por directorio o en base a cada servidor virtual. Poniendo php3_engine off en los sitios apropiados del archivo httpd.conf, se puede habilitar o deshabilitar el PHP. error_log string Nombre del fichero para registrar los errores de un script. Si se utiliza el valor especial syslog, los errores se envían al registro de errores del sistema. En UNIX se refiere a syslog(3) y en Windows NT al registro de eventos. El registro de errores del sistema no es soportado bajo Windows 95. 24
  • 97. Capítulo 3. Configuración error_reporting integer Fija el nivel de informe de errores. El parámetro es un entero que representa un campo de bits. Sume los valores de los niveles de informe de error que desea. Tabla 3-1. Niveles de Informe de Errores valor de bit informe habilitado 1 errores normales 2 avisos normales 4 errores del troceador (parser) 8 avisos de estilo no críticos El valor por defecto para esta directiva es 7 (se muestran los errores normales, avisos normales y errores de parser). open_basedir string Limita los archivos que se pueden abrir por el PHP al árbol de directorios especificado. Cuando un script intenta abrir un archivo con, por ejemplo, fopen o gzopen, se comprueba su localización. Si el fichero está fuera del árbol de directorios especificado, PHP se negará a abrirlo. Todos los enlaces simbólicos son resueltos, de modo que no es posible evitar esta limitación usando uno de ellos. El valor especial . indica que el directorio base será aquel en el que reside el script. Bajo Windows, separe los directorios mediante punto y coma. En el resto de sistemas, sepárelos con dos puntos ":". Como módulo de Apache, los senderos para open_basedir de los directorios padre se heredan ahora automáticamente. Nota: El soporte para directorios múltiples se añadió en la 3.0.7. El valor por defecto es permitir abrir todos los archivos. gpc_order string Fija el order de troceo de variables GET/POST/COOKIE. El valor por defecto de esta directiva es "GPC". Fijándola, por ejemplo, a "GP", hará que el PHP ignore por completo las cookies y que sobreescriba las variables recibidas por GET con las que tengan el mismo nombre y vengan por POST. ignore_user_abort string Por defecto está a on. Si se cambia a off, los script terminarán tan pronto como intenten enviar algo después de que un cliente ha roto la conexión. ignore_user_abort(). include_path string Especifica una lista de directorios en los que las funciones require(), include() y fopen_with_path() buscan los archivos. El formato es similar a la variable de entorno de sistema 25
  • 98. Capítulo 3. Configuración PATH: una lista de directorios separados por dos puntos en UNIX o por punto y coma en Windows. Ejemplo 3-1. include_path en UNIX include_path=.:/home/httpd/php-lib Ejemplo 3-2. include_path en Windows include_path=".;c:wwwphplib" El valor por defecto para esta directiva es . (sólo el directorio actual). isapi_ext string log_errors boolean Dice si los mensajes de error de los script deben ser registrados o no en el registro del servidor. Esta opción, por tanto, es específica del mismo. magic_quotes_gpc boolean Fija el estado magic_quotes para operaciones GPC (Get/Post/Cookie). Si magic_quotes vale on, todas las ’ (comilla sencilla), " (comilla doble), (barra invertida) y los NUL son automáticamente marcados con una barra invertida. Si además magic_quotes_sybase vale on, la comilla sencilla es marcada con otra comilla sencilla en lugar de la barra invertida. magic_quotes_runtime boolean Si se habilita magic_quotes_runtime, muchas de las funciones que devuelven datos de algún tipo de fuente externa incluyendo bases de datos y archivos de texto devolverán las comillas marcadas con una barra invertida. Si también está activo magic_quotes_sybase, la comilla simple es marcada con una comilla simple en lugar de la barra invertida. magic_quotes_sybase boolean Si magic_quotes_sybase está a on, la comilla simple es marcada con una comilla simple en lugar de la barra invertida cuando están habilitados magic_quotes_gpc o magic_quotes_runtime. max_execution_time integer Fija el tiempo máximo en segundos que se le permite usar a un script antes de ser finalizado por el intérprete. Así se evita que scripts mal escritos puedan bloquear el servidor. memory_limit integer Fija el tamaño máximo de memoria en bytes que se permite reclamar a un script. Así se evita que script mal escritos se coman toda la memoria dispomible de un servidor. nsapi_ext string 26
  • 99. Capítulo 3. Configuración short_open_tag boolean Indica si se debe permitir el formato corto (<? ?>) de la etiqueta de apertura del PHP. Si desea utilizar PHP en combinación con XML, deberá desactivar esta opción. Si está desactivada, deberá utilizar el formato largo de la etiqueta de apertura (<?php ?>). sql.safe_mode boolean track_errors boolean Si está habilitada, el último mensaje de error estará siempre presente en la variable global $php_errormsg. track_vars boolean Si está activada, la información de entrada de GET, POST y de las cookies se puede encontrar en las matrices asociativas $HTTP_GET_VARS,$HTTP_POST_VARS y $HTTP_COOKIE_VARS respectivamente. upload_tmp_dir string El directorio temporal utilizado para almacenar archivos cuando se envían al servidor. Debe tener permiso de escritura para el usuario bajo el que corra el PHP. user_dir string El nombre base del directorio utilizado bajo el directorio inicial de un usuario para los archivos PHP. Por ejemplo: paginas_html. warn_plus_overloading boolean Si está activada, esta opción hace que el PHP muestre un aviso cuando el operador suma (+) se utiliza en cadenas. Así es más fácil encontrar scripts que necesitan ser reescritos utilizando en su lugar el concatenador de cadenas (.). Directivas de Configuración de Correo SMTP string Nombre DNS o dirección IP del servidor de SMTP que el PHP bajo Windows deberá usar para enviar correo con la función mail(). sendmail_from string La dirección del remitente ("De:") para los correos enviados desde PHP bajo Windows. sendmail_path string Localización del programa sendmail. Generalmente /usr/sbin/sendmail o /usr/lib/sendmail. configure intenta localizarle este archivo lo mejor que puede y fijar un valor por defecto, pero en caso de fallo, lo puede usted fijar aquí. 27
  • 100. Capítulo 3. Configuración Los sistemas que no usan sendmail deberán fijar esta directiva al nombre del programa alternativo que ofrezca su sistema de correo, si es que existe. Por ejemplo, los usuarios del Qmail (http://www.qmail.org/) pueden fijarlo normalmente a /var/qmail/bin/sendmail. Directivas de Configuración de Modo Seguro safe_mode boolean Para activar el modo seguro del PHP. Lea el Capítulo de seguridad para más información. safe_mode_exec_dir string Si el PHP se utiliza en modo seguro, la función system() y el resto de funciones que ejecutan programas del sistema se niegan a ejecutar programas que no estén en este directorio. Directivas de Configuración del Debugger debugger.host string Nombre DNS o dirección IP del servidor usado por el debugger. debugger.port string Número de puerto usado por el debugger. debugger.enabled boolean Indica si el debugger está habilitado o no. Directivas de Carga de Extensiones enable_dl boolean Esta directiva sólo es útil en la versión del PHP como módulo del Apache. Puede habilitar o deshabilitar para un servidor virtual o para un directorio la carga dinámica de extensiones de PHP mediante dl(). La razón principal para deshabilitar la carga dinámica es la seguridad. Con la carga dinámica es posible ignorar las restricciones safe_mode y open_basedir. El valor por defecto es permitir la carga dinámica, excepto cuando se usa el modo seguro. En modo seguro, siempre es imposible usar dl(). extension_dir string En qué directorio debe buscar el PHP las extensiones cargables dinámicamente. 28
  • 101. Capítulo 3. Configuración extension string Qué extensiones dinámicas debe cargar el PHP cuando arranca. Directivas de Configuración de MySQL mysql.allow_persistent boolean Si permitir o no conexiones MySQL persistentes. mysql.default_host string El servidor por defecto para utilizar cuando se conecte al servidor de bases de datos si no se especifica otro distinto. mysql.default_user string El nombre de usuario por defecto para utilizar cuando se conecta al servidor de base de datos si no se especifica otro. mysql.default_password string La clave por defecto para utilizar cuando se conecta al servidor de base de datos si no se especifica otro. mysql.max_persistent integer El número máximo de conexiones persistentes de MySQL por proceso. mysql.max_links integer El número máximo de conexiones de MySQL por proceso, incluyendo las persistentes. Directivas de Configuración de mSQL msql.allow_persistent boolean Si se permiten o no conexiones persistentes de mSQL. msql.max_persistent integer El número máximo de conexiones persistentes mSQL por proceso. msql.max_links integer El número máximo de conexiones de mSQL por proceso, incluyendo las persistentes. 29
  • 102. Capítulo 3. Configuración Directivas de Configuración de Postgres pgsql.allow_persistent boolean Si se permiten o no conexiones persistentes de Postgres. pgsql.max_persistent integer El número máximo de conexiones persistentes Postgres por proceso. pgsql.max_links integer El número máximo de conexiones de Postgres por proceso, incluyendo las persistentes. SESAM Configuration Directives sesam_oml string Name of BS2000 PLAM library containing the loadable SESAM driver modules. Required for using SESAM functions. The BS2000 PLAM library must be set ACCESS=READ,SHARE=YES because it must be readable by the apache server’s user id. sesam_configfile string Name of SESAM application configuration file. Required for using SESAM functions. The BS2000 file must be readable by the apache server’s user id. The application configuration file will usually contain a configuration like (see SESAM reference manual): CNF=B NAM=K NOTYPE sesam_messagecatalog string Name of SESAM message catalog file. In most cases, this directive is not neccessary. Only if the SESAM message file is not installed in the system’s BS2000 message file table, it can be set with this directive. The message catalog must be set ACCESS=READ,SHARE=YES because it must be readable by the apache server’s user id. 30
  • 103. Capítulo 3. Configuración Directivas de Configuración de Sybase sybase.allow_persistent boolean Si se permiten o no conexiones persistentes de Sybase. sybase.max_persistent integer El número máximo de conexiones persistentes Sybase por proceso. sybase.max_links integer El número máximo de conexiones de Sybase por proceso, incluyendo las persistentes. Directivas de Configuración de Sybase-CT sybct.allow_persistent boolean Si se permiten o no conexiones persistentes de Sybase-CT. El valor por defecto es on. sybct.max_persistent integer El número máximo de conexiones persistentes Sybase-CT por proceso. El valor por defecto es -1, que significa ilimitadas. sybct.max_links integer El número máximo de conexiones de Sybase-CT por proceso, incluyendo las persistentes. El valor por defecto es -1, que significa ilimitadas. sybct.min_server_severity integer Los mensajes de servidor con gravedad mayor o igual que sybct.min_server_severity serán reportados como avisos. Este valor también se puede cambiar desde un script usando la función sybase_min_server_severity(). El valor por defecto es 10, que reporta los errores de información con gravedad o mayores. sybct.min_client_severity integer Los mensajes de librería de cliente con gravedad mayor o igual que sybct.min_client_severity serán reportados como avisos. Este valor también se puede cambiar desde un script usando la función sybase_min_client_severity(). El valor por defecto es 10, que desconecta los avisos. sybct.login_timeout integer El número máximo de segundos de espera por un intento de conexión con éxito antes de indicar un fallo. Nótese que si se ha excedido max_execution_time cuando finaliza la espera de un intento de conexión, el script será finalizado antes de que se pueda tomar una acción en caso de fallo. El valor por defecto es 1 minuto. 31
  • 104. Capítulo 3. Configuración sybct.timeout integer El número máximo de segundos de espera por una operación de consulta o select_db con éxito antes de indicar un fallo. Nótese que si se ha excedido max_execution_time cuando finaliza la espera de un intento de conexión, el script será finalizado antes de que se pueda tomar una acción en caso de fallo. El valor por defecto es sin límite. sybct.hostname string El nombre de la máquina desde la que dice estarse conectando, para que se visualize con sp_who(). El valor por defecto es "none". Directivas de Configuración de Informix ifx.allow_persistent boolean Si se permiten o no conexiones persistentes de Informix. ifx.max_persistent integer El número máximo de conexiones persistentes de Informix por proceso. ifx.max_links integer El número máximo de conexiones Informix por proceso, incluyendo las persistentes. ifx.default_host string El servidor por defecto al que conectarse si no se especifica uno en ifx_connect() o en ifx_pconnect(). ifx.default_user string El id de usuario por defecto para utilizar si no se especifica uno en ifx_connect() o en ifx_pconnect(). ifx.default_password string La clave por defecto para utilizar si no se especifica uno en ifx_connect() o en ifx_pconnect(). ifx.blobinfile boolean Fíjelo a TRUE si desea recibir las columnas blob (objetos binarios grandes) en un archivo, y a FALSE si las desea en memoria. Puede cambiar el ajuste en tiempo de ejecución utilizando ifx_blobinfile_mode(). ifx.textasvarchar boolean Fíjelo a TRUE si desea recibir las columnas TEXT como cadenas normales en las instrucciones select, y a FALSE si quiere usar parámetros de identificador de blobs. Puede cambiar el ajuste en tiempo de ejecución utilizando ifx_textasvarchar(). 32
  • 105. Capítulo 3. Configuración ifx.byteasvarchar boolean Fíjelo a TRUE si desea devolver las columnas BYTE como cadenas normales en las instrucciones select, y a FALSE si quiere usar parámetros de identificador de blobs. Puede cambiar el ajuste en tiempo de ejecución utilizando ifx_byteasvarchar(). ifx.charasvarchar boolean Fíjelo a TRUE si desea suprimir los espacios a la derecha de las columnas CHAR cuando las solicita. ifx.nullformat boolean Fíjelo a TRUE si desea que las columnas NULL (nulas) se devuelvan como la cadena literal "NULL", y a FALSE si desea que se devuelvan como la cadena vacía "". Puede cambiar el ajuste en tiempo de ejecución utilizando ifx_nullformat(). Directivas de Configuración de Matemática BC bcmath.scale integer Número de dígitos decimales para todas las funciones de bcmath. Directivas de Configuración de Capacidades de los Navegadores browscap string Nombre del archivo de capacidades del navegador. Vea también get_browser(). Directivas Unificadas de Configuración de ODBC uodbc.default_db string Fuentes de datos ODBC a utilizar si no se especifica una en odbc_connect() o en odbc_pconnect(). uodbc.default_user string Nombre de usuario si no se especifica uno en odbc_connect() o en odbc_pconnect(). uodbc.default_pw string Clave para usar si no se especifica una en odbc_connect() o en odbc_pconnect(). uodbc.allow_persistent boolean Si se permiten o no conexiones persistentes de ODBC. uodbc.max_persistent integer El número máximo de conexiones persistentes de ODBC por proceso. 33
  • 106. Capítulo 3. Configuración uodbc.max_links integer El número máximo de conexiones ODBC por proceso, incluyendo las persistentes. 34
  • 108. Capítulo 4. Seguridad PHP es un potente lenguaje y el interprete, tanto incluido en el servidor web como modulo o ejecutado como un binario CGI, puede acceder a ficheros, ejecutar comandos y abrir comunicaciones de red en el servidor. Todas estas caracteristicas hacen que lo que se ejecute en el servidor web sea inseguro por defecto. PHP ha sido disenado especificamente, para ser un lenguaje mas seguro para escribir programas CGI, que Perl o C y con la correcta seleccion de las opciones de configuración del tiempo de compilación y ejecucion se consigue la exacta combinación de libertad y seguridad que se necesita. Ya que existen diferentes modos de utilizar PHP, existen multitud de opciones de configuración que permiten controlar su funcionamiento. Una gran selección de opciones garantiza que se pueda usar PHP para diferentes usos, pero tambien significa que existen combinaciones de estas opciones y configuraciones del servidor que producen instalaciones inseguras. Este capitulo explica las diferentes combinaciones de opciones de configuración y las situaciones donde pueden ser usadas de manera segura. Binarios CGI Posibles ataques Usando PHP como un binario CGI es una opción para instalaciones que por cualquier causa no quieren integrar PHP como modulo en el software servidor (p.ej: Apache), o usaran PHP con diferentes clases de CGI wrappers para crear entornos chroot y setuid seguros para los scripts. Esta configuración implica generalmente el instalar el binario ejecutable de PHP en el directorio cgi-bin del servidor web. El documento del CERT CA-96.11 (http://www.cert.org/advisories/CA-96.11.interpreters_in_cgi_bin_dir.html) recomienda no instalar interpretes en cgi-bin. Aunque el binario PHP puede ser usado como interprete independiente, PHP esta diseñado para prevenir los ataques que esta configuración hace posible. • Accediendo a ficheros del sistema: http://my.host/cgi-bin/php?/etc/passwd La información introducida despues del signo de interrogación (?) es transferida como argumento de la línea de comando al intérprete por el interfaz del CGI. Normalmente los interpretes abren y ejecutan el fichero especificado como el primer argumento en la línea de comando. Cuando se ejecuta como un CGI script, PHP rechaza interpretar los argumentos de la línea de comando. • Accediendo cualquier documento web en el servidor: http://my.host/cgi-bin/php/secret/doc.html La información con el camino (path) de la URL despues del nombre del binario PHP, /secret/doc.html es usada convencionalmente para especificar el nombre del fichero que sera abierto e interpretado por el programa CGI. Normalmente, algunas directivas del servidor web (Apache:Action) son usadas para redireccionar peticiones de documentos como http://my.host/secret/script.php3 al interprete PHP. Con esta configuración, el servidor web comprueba primero los permisos de acceso al directorio /secret, y despues crea la petición redireccionada http://my.host/cgi-bin/php/secret/script.php3. Desafortunadamente, si la petición es hecha de esta forma en un principio, el servidor web no comprueba los permisos de 36
  • 109. Capítulo 4. Seguridad acceso del fichero /secret/script.php3, sino solamente del fichero /cgi-bin/php. De esta manera cualquier usuario que pueda acceder /cgi-bin/php tambien puede acceder a cualquier documento protegido en el servidor web. En PHP, a la hora de compilar, la opción de configuracion --enable-force-cgi-redirect y las directivas de configuracion a la hora de ejecutar doc_root y user_dir pueden ser usadas para prevenir este ataque, si el arbol de documentos del servidor tiene cualquier directorio con acceso restringido. Ver mas adelante la explicacion de las diferentes combinaciones. Caso 1: solamente se sirven ficheros publicos Si tu servidor no contiene informacion que este protegida con clave o acceso de control de IPs, no se necesitan estas opciones de configuracion. Si tu servidor web no permite realizar redireccionamientos, o el servidor no tiene modo de comunicar al binario PHP que la peticion es una peticion segura redireccionada, podeis especificar la opcion --disable-force-cgi-redirect en el script de configuracion. De todas maneras, teneis que aseguraros que vuestros scripts PHP no confíen en la manera al llamar al script, ni de forma directa http://my.host/cgi-bin/php/dir/script.php3 o por redireccion http://my.host/dir/script.php3. Redireccionamiento puede ser configurado en Apache usando las directivas AddHandler y Action (ver mas abajo). Caso 2: usando --enable-force-cgi-redirect Esta opcion a la hora de compilar previene que alguien llame PHP directamente con una url como la siguiente http://my.host/cgi-bin/php/secretdir/script.php3. PHP solamente analizara en este modo si ha pasado por una regla de redireccionamiento en el servidor. Normalmente la redireccion en la configuracion de Apache es hecha con la siguientes directivas: Action php3-script /cgi-bin/php AddHandler php3-script .php3 Esta opcion ha sido solo comprobada con el servidor web Apache, y depende de Apache para fijar la variable de entorno CGI no estandar REDIRECT_STATUS en las peticiones de redireccionamiento. Si tu servidor web no soporta ningun modo para informar si una peticion es directa o redireccionada, no podeis usar esta opcion y debereis usar alguno de los otros modos de ejecucion de la version CGI documentados aqui. Caso 3: Usando doc_root or user_dir Incluir contenidos activos, como script y ejecutables, en el directorio de documentos del servidor web, es algunas veces considerada una practica insegura. Si por algun fallo de configuracion, los scripts no son ejecutados pero mostrados como documentos HTML, cualquiera podra conseguir codigo registrado o informacion de seguridad, como p.ej: claves de acceso. Por ello, muchos administradores prefieren 37
  • 110. Capítulo 4. Seguridad utilizar otra estructura de directorios que contenga solamente los scripts, los cuales seran solamente accesibles via PHP CGI, y por ello siempre seran interpretados y no mostrados. Habra que tener en cuenta que si el metodo que asegura que las peticiones no son redireccionadas, como hemos descrito en la seccion anterior, no esta disponible, sera necesario configurar un script doc_root que sea diferente del "web document root". Podeis definir el script PHP "document root" con la directiva de configuracion doc_root en el fichero de configuracion, o definir la variable de entorno PHP_DOCUMENT_ROOT. Si esta definida, la version CGI de PHP siempre obtendra el nombre del fichero a abrir con doc_root y el camino (path) utilizado en la peticion, asi podeis estar seguros que ningun script sera ejecutado fuera de este directorio (excepto para user_dir, ver a continuacion) Otra opcion que se puede usar aqui es user_dir. Cuando user_dir no esta definido, lo unico que controla la apertura del fichero es doc_root. Si intentamos abrir una url tal como esta http://my.host/~user/doc.php3 no se abrira un fichero en el directorio de usuarios, en su lugar se abrira un fichero llamado ~user/doc.php3 en el directorio doc_root. (si, un directorio que empieza por tilde [~]). Si user_dir esta definido por ejemplo como public_php, una peticion tal como http://my.host/~user/doc.php3, abrira un fichero llamado doc.php3 en el directorio llamado public_php del directorio "home" del usuario. Si el directorio del usuario es /home/user, el fichero ejecutado sera /home/user/public_php/doc.php3. La expansion de user_dir ocurre sin tener en cuenta la configuracion de doc_root, de este modo se puede controlar los accesos al directorio principal (document root) y al directorio de usuario separadamente. Caso 4: Analizador PHP fuera del arbol web. Una opcion muy segura es poner el analizador binario PHP, en algun lugar fuera del arbol de ficheros web. Por ejemplo en /usr/local/bin. La unica pega real de esta opcion es que habra que poner una linea similar a: #!/usr/local/bin/php como primera linea en cualquier fichero que contenga codigo PHP. Tambien sera necesario asignar al fichero permisos de ejecucion. De esta manera, es tratado de la misma manera que cualquier otro CGI script escrito en Perl o sh o otro lenguaje utilizado para scripts y que utilicen el mecanismo #! para ejecutarse. Para conseguir que PHP maneje correctamente con esta configuracion, la informacion de PATH_INFO y PATH_TRANSLATED, el analizador PHP deberia ser compilado con la opcion de configuracion --enable-discard-path. 38
  • 111. Capítulo 4. Seguridad Modulo Apache Cuando PHP es usado como modulo Apache, hereda los permisos de usuario de Apache (normalmente "nobody") 39
  • 112. Parte II. Referencia del Lenguaje Capítulo 5. Síntaxis básica 40
  • 113. Capítulo 5. Síntaxis básica Saliendo de HTML Para interpretar un archivo, php símplemente interpreta el texto del archivo hasta que encuentra uno de los carácteres especiales que delimitan el inicio de código PHP. El intérprete ejecuta entonces todo el código que encuentra, hasta que encuentra una etiqueta de fin de código, que le dice al intérprete que siga ignorando el código siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo que está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta como código. Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques de código PHP. De estas cuatro, sólo 2 (<?php. . .?> y <script language="php">. . .</script>) están siempre disponibles; el resto pueden ser configuradas en el fichero de php.ini para ser o no aceptadas por el intérprete. Mientras que el formato corto de etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no son portables como la versión de formato largo de etiquetas. Además, si se pretende embeber código PHP en XML o XHTML, será obligatorio el uso del formato <?php. . .?> para la compatibilidad con XML. Las etiquetas soportadas por PHP son: Ejemplo 5-1. Formas de escapar de HTML 1. <?php echo("si quieres servir documentos XHTML o XML, haz como aqu&iacute;n"); ?> 2. <? echo ("esta es la más simple, una instrucci&oacute;n de procesado SGML n"); ?> <?= expression ?> Esto es una abreviatura de "<? echo expression ?>" 3. <script language="php"> echo ("muchos editores (como FrontPage) no aceptan instrucciones de procesado"); </script> 4. <% echo ("Opcionalmente, puedes usar las etiquetas ASP"); %> <%= $variable; # Esto es una abreviatura de "<% echo . . ." %> El método primero, <?php. . .?>, es el más conveniente, ya que permite el uso de PHP en código XML como XHTML. El método segundo no siempre está disponible. El formato corto de etiquetas está disponible con la función short_tags() (sólo PHP 3), activando el parámetro del fichero de configuración de PHP short_open_tag, o compilando PHP con la opción --enable-short-tags del comando configure. Aunque esté activa por defecto en php.ini-dist, se desaconseja el uso del formato de etiquetas corto. El método cuarto sólo está disponible si se han activado las etiquetas ASP en el fichero de configuración: asp_tags. Nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4. 41
  • 114. Capítulo 5. Síntaxis básica Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen aplicaciones o librerías con intención de redistribuirlas, o cuando se desarrolle para servidores que no están bajo nuestro control, porque puede ser que el formato corto de etiquetas no esté soportado en el servidor. Para generar código portable y redistribuíble, asegúrate de no usar el formato corto de etiquetas. La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna presente. Además, la etiqueta de fin de bloque lleva implícito el punto y coma; no necesitas por lo tanto añadir el punto y coma final de la última línea del bloque PHP. PHP permite estructurar bloques como: Ejemplo 5-2. Métodos avanzados de escape <?php if ($expression) { ?> <strong>This is true.</strong> <?php } else { ?> <strong>This is false.</strong> <?php } ?> Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?> de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para escribir bloques grandes de texto generamente es más eficiente separalos del código PHP que enviar todo el texto mediante las funciones echo(), print() o similares. Separación de instrucciones Las separación de instrucciones se hace de la misma manera que en C o Perl - terminando cada declaración con un punto y coma. La etiqueta de fin de bloque (?>) implica el fin de la declaración, por lo tanto lo siguiente es equivalente: <?php echo "This is a test"; ?> <?php echo "This is a test" ?> 42
  • 115. Capítulo 5. Síntaxis básica Comentarios PHP soporta el estilo de comentarios de ’C’, ’C++’ y de la interfaz de comandos de Unix. Por ejemplo: <?php echo "This is a test"; // This is a one-line c++ style comment /* This is a multi line comment yet another line of comment */ echo "This is yet another test"; echo "One Final Test"; # This is shell-style style comment ?> Los estilos de comentarios de una linea actualmente sólo comentan hasta el final de la linea o el bloque actual de código PHP, lo primero que ocurra. <h1>This is an <?php # echo "simple";?> example.</h1> <p>The header above will say ’This is an example’. Hay que tener cuidado con no anidar comentarios de estilo ’C’, algo que puede ocurrir al comentar bloques largos de código. <?php /* echo "This is a test"; /* This comment will cause a problem */ */ ?> Los estilos de comentarios de una linea actualmente sólo comentan hasta el final de la linea o del bloque actual de código PHP, lo primero que ocurra. Esto implica que el código HTML tras // ?> SER??? impreso: ?> sale del modo PHP, retornando al modo HTML, el comentario // no le influye. 43
  • 117. Capítulo 6. Types PHP soporta los siguientes tipos: • array • números en punto flotante • entero • objeto • cadena El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide PHP en tiempo de ejecución dependiendo del contexto en el que se utilice esa variable. Si se quisiese obligar a que una variable se convierta a un tipo concreto, se podría forzar la variable o usar la función settype() para ello. Nótese que una variable se puede comportar de formas diferentes en ciertas situaciones, dependiendo de qué tipo sea en ese momento. Para más información, vea la sección Conversión de Tipos. Enteros Los enteros se puede especificar usando una de las siguientes sintaxis: $a = 1234; # número decimal $a = -123; # un número negativo $a = 0123; # número octal (equivalente al 83 decimal) $a = 0x12; # número hexadecimal (equivalente al 18 decimal) Números en punto flotante Los números en punto flotante ("double") se pueden especificar utilizando cualquiera de las siguientes sintaxis: $a = 1.234; $a = 1.2e3; Cadenas Las cadenas de caracteres se pueden especificar usando uno de dos tipos de delimitadores. 45
  • 118. Capítulo 6. Types Si la cadena está encerrada entre dobles comillas ("), las variables que estén dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación). Como en C y en Perl, el carácter de barra invertida ("") se puede usar para especificar caracteres especiales: Tabla 6-1. Caracteres protegidos secuencia significado n Nueva línea r Retorno de carro t Tabulación horizontal Barra invertida $ Signo del dólar " Comillas dobles [0-7]{1,3} la secuencia de caracteres que coincida con la expresión regular es un carácter en notación octal x[0-9A-Fa-f]{1,2} la secuencia de caracteres que coincida con la expresión regular es un carácter en notación hexadecimal Se puede proteger cualquier otro carácter, pero se producirá una advertencia en el nivel de depuración más alto. La segunda forma de delimitar una cadena de caracteres usa el carácter de comilla simple ("’"). Cuando una cadena va encerrada entre comillas simples, los únicos caracteres de escape que serán comprendidos son "" y "’". Esto es por convenio, así que se pueden tener comillas simples y barras invertidas en una cadena entre comillas simples. Las variables no se expandirán dentro de una cadena entre comillas simples. Otra forma de delimitar cadenas es usando la sintaxis de documento incrustado ("<<<"). Se debe proporcionar un identificador después de <<<, después la cadena, y después el mismo identificador para cerrar el entrecomillado. Ejemplo 6-1. He aquí un ejemplo de entrecomillado de cadenas con sintaxis de documento incrustado $str = <<<EOD Ejemplo de cadena Expandiendo múltiples líneas usando sintaxis de documento incrustado. EOD; Nota: La sintaxis de documento incristado fue añadida en PHP 4. 46
  • 119. Capítulo 6. Types Las cadenas se pueden concatenar usando el operador ’.’ (punto). Nótese que el operador ’+’ (suma) no sirve para esto. Por favor mire Operadores de cadena para más información. Se puede acceder a los caracteres dentro de una cadena tratándola como un array de caracteres indexado numéricamente, usando una sintaxis similar a la de C. Vea un ejemplo más abajo. Ejemplo 6-2. Algumos ejemplos de cadenas <?php /* Asignando una cadena. */ $str = "Esto es una cadena"; /* Añadiendo a la cadena. */ $str = $str . " con algo más de texto"; /* Otra forma de añadir, incluye un carácter de nueva línea protegido. */ $str .= " Y un carácter de nueva línea al final.n"; /* Esta cadena terminará siendo ’<p>Número: 9</p>’ */ $num = 9; $str = "<p>Número: $num</p>"; /* Esta será ’<p>Número: $num</p>’ */ $num = 9; $str = ’<p>Número: $num</p>’; /* Obtener el primer carácter de una cadena */ $str = ’Esto es una prueba.’; $first = $str[0]; /* Obtener el último carácter de una cadena. */ $str = ’Esto es aún una prueba.’; $last = $str[strlen($str)-1]; ?> Conversión de cadenas Cuando una cadena se evalúa como un valor numérico, el valor resultante y el tipo se determinan como sigue. La cadena se evaluará como un doble si contiene cualquiera de los caracteres ’.’, ’e’, o ’E’. En caso contrario, se evaluará como un entero. El valor viene dado por la porción inicial de la cadena. Si la cadena comienza con datos de valor numérico, este será el valor usado. En caso contrario, el valor será 0 (cero). Los datos numéricos válidos son un signo opcional, seguido por uno o más dígitos (que opcionalmente contengan un punto decimal), seguidos por un exponente opcional. El exponente es una ’e’ o una ’E’ seguidos por uno o más dígitos. Cuando la primera expresión es una cadena, el tipo de la variable dependerá de la segunda expresión. 47
  • 120. Capítulo 6. Types $foo = 1 + "10.5"; // $foo es doble (11.5) $foo = 1 + "-1.3e3"; // $foo es doble (-1299) $foo = 1 + "bob-1.3e3"; // $foo es entero (1) $foo = 1 + "bob3"; // $foo es entero (1) $foo = 1 + "10 Cerditos"; // $foo es entero (11) $foo = 1 + "10 Cerditos"; // $foo es entero (11) $foo = "10.0 cerdos " + 1; // $foo es entero (11) $foo = "10.0 cerdos " + 1.0; // $foo es double (11) Para más información sobre esta conversión, mire en la página del manual de Unix strtod(3). Si quisiera probar cualquiera de los ejemplos de esta sección, puede cortar y pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va ocurriendo: echo "$foo==$foo; el tipo es " . gettype( $foo ) . "<br>n"; Arrays Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como arrays indexados (vectores). Arrays unidimensionales PHP soporta tanto arrays escalares como asociativos. De hecho, no hay diferencias entre los dos. Se puede crear una array usando las funciones list() o array(), o se puede asignar el valor de cada elemento del array de manera explícita. $a[0] = "abc"; $a[1] = "def"; $b["foo"] = 13; También se puede crear un array simplemente añadiendo valores al array. Cuando se asigna un valor a una variable array usando corchetes vacíos, el valor se añadirá al final del array. $a[] = "hola"; // $a[2] == "hola" $a[] = "mundo"; // $a[3] == "mundo" Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), y uksort() dependiendo del tipo de ordenación que se desee. 48
  • 121. Capítulo 6. Types Se puede contar el número de elementos de un array usando la función count(). Se puede recorrer un array usando las funciones next() y prev(). Otra forma habitual de recorrer un array es usando la función each(). Arrays Multidimensionales Los arrays multidimensionales son bastante simples actualmente. Para cada dimensión del array, se puede añadir otro valor [clave] al final: $a[1] = $f; # ejemplos de una sola dimensión $a["foo"] = $f; $a[1][0] = $f; # bidimensional $a["foo"][2] = $f; # (se pueden mezclar índices numéricos y asociativos) $a[3]["bar"] = $f; # (se pueden mezclar índices numéricos y asociativos) $a["foo"][4]["bar"][0] = $f; # tetradimensional! En PHP3 no es posible referirse a arrays multidimensionales directamente dentro de cadenas. Por ejemplo, lo siguiente no tendrá el resultado deseado: $a[3][’bar’] = ’Bob’; echo "Esto no va a funcionar: $a[3][bar]"; En PHP3, lo anterior tendrá la salida Esto no va a funcionar: Array[bar]. De todas formas, el operador de concatenación de cadenas se puede usar para solucionar esto: $a[3][’bar’] = ’Bob’; echo "Esto no va a funcionar: " . $a[3][bar]; En PHP4, sin embargo, todo el problema se puede circunvenir encerrando la referencia al array (dentro de la cadena) entre llaves: $a[3][’bar’] = ’Bob’; echo "Esto va a funcionar: {$a[3][bar]}"; Se pueden "rellenar" arrays multidimensionales de muchas formas, pero la más difícil de comprender es cómo usar el comando array() para arrays asociativos. Estos dos trozos de código rellenarán el array unidimensional de la misma manera: 49
  • 122. Capítulo 6. Types # Ejemplo 1: $a["color"] = "rojo"; $a["sabor"] = "dulce"; $a["forma"] = "redondeada"; $a["nombre"] = "manzana"; $a[3] = 4; # Example 2: $a = array( "color" => "rojo", "sabor" => "dulce", "forma" => "redondeada", "nombre" => "manzana", 3 => 4 ); La función array() se puede anidar para arrays multidimensionales: <? $a = array( "manzana" => array( "color" => "rojo", "sabor" => "dulce", "forma" => "redondeada" ), "naranja" => array( "color" => "naranja", "sabor" => "ácido", "forma" => "redondeada" ), "plátano" => array( "color" => "amarillo", "sabor" => "paste-y", "forma" => "aplatanada" ) ); echo $a["manzana"]["sabor"]; # devolverá "dulce" ?> 50
  • 123. Capítulo 6. Types Objetos Inicialización de Objetos Para inicializar un objeto, se usa la sentencia new para instanciar el objeto a una variable. class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); Type juggling PHP no requiere (o soporta) la declaración explícita del tipo en la declaración de variables; el tipo de una variable se determina por el contexto en el que se usa esa variable. Esto quiere decir que si se asigna un valor de cadena a la variable var, var se convierte en una cadena. Si después se asigna un valor entero a la variable var, se convierte en una variable entera. Un ejemplo de conversión de tipo automática en PHP3 es el operador suma ’+’. Si cualquiera de los operandos es un doble, entonces todos los operandos se evalúan como dobles, y el resultado será un doble. En caso contrario, los operandos se interpretarán como enteros, y el resultado será también un entero. Nótese que esto NO cambia los tipos de los operandos propiamente dichos; el único cambio está en cómo se evalúan los operandos. $foo = "0"; // $foo es una cadena (ASCII 48) $foo++; // $foo es la cadena "1" (ASCII 49) $foo += 1; // $foo ahora es un entero (2) $foo = $foo + 1.3; // $foo ahora es un doble (3.3) $foo = 5 + "10 Cerditos Pequeñitos"; // $foo es entero (15) $foo = 5 + "10 Cerditos"; // $foo es entero (15) Si los últimos dos ejemplos anteriores parecen confusos, vea Conversión de cadenas. Si se desea obligar a que una variable sea evaluada con un tipo concreto, mire la sección Forzado de tipos. Si se desea cambiar el tipo de una variable, vea la función settype(). Si quisiese probar cualquiera de los ejemplos de esta sección, puede cortar y pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va ocurriendo: 51
  • 124. Capítulo 6. Types echo "$foo==$foo; el tipo es " . gettype( $foo ) . "<br>n"; Nota: La posibilidad de una conversión automática a array no está definida actualmente. $a = 1; // $a es un entero $a[0] = "f"; // $a se convierte en un array, en el que $a[0] vale "f" Aunque el ejemplo anterior puede parecer que claramente debería resultar en que $a se convierta en un array, el primer elemento del cual es ’f’, consideremos esto: $a = "1"; // $a es una cadena $a[0] = "f"; // ¿Qué pasa con los índices de las cadenas? ¿Qué ocurre? Dado que PHP soporta indexación en las cadenas vía offsets usando la misma sintaxis que la indexación de arrays, el ejemplo anterior nos conduce a un problema: ¿debería convertirse $a en un array cuyo primer elemento sea "f", o debería convertirse "f" en el primer carácter de la cadena $a? Por esta razón, tanto en PHP 3.0.12 como en PHP 4.0b3-RC4, el resultado de esta conversión automática se considera que no está definido. Los parches se están discutiendo, de todas formas. Forzado de tipos El forzado de tipos en PHP funciona como en C: el nombre del tipo deseado se escribe entre paréntesis antes de la variable a la que se pretende forzar. $foo = 10; // $foo es un entero $bar = (double) $foo; // $bar es un doble Los forzados de tipo permitidos son: • (int), (integer) - fuerza a entero (integer) • (real), (double), (float) - fuerza a doble (double) • (string) - fuerza a cadena (string) • (array) - fuerza a array (array) • (object) - fuerza a objeto (object) 52
  • 125. Capítulo 6. Types Nótese que las tabulaciones y espacios se permiten dentro de los paréntesis, así que los siguientes ejemplos son funcionalmente equivalentes: $foo = (int) $bar; $foo = ( int ) $bar; Puede no ser obvio que ocurrirá cuando se fuerce entre ciertos tipos. Por ejemplo, lo siguiente debería ser tenido en cuenta. Cuando se fuerza el cambio de un escalar o una variable de cadena a un array, la variable se convertirá en el primer elemento del array: $var = ’ciao’; $arr = (array) $var; echo $arr[0]; // produce la salida ’ciao’ Cuando se fuerza el tipo de una variable escalar o de una cadena a un objeto, la variable se convertirá en un atributo del objeto; el nombre del atributo será ’scalar’: $var = ’ciao’; $obj = (object) $var; echo $obj->scalar; // produce la salida ’ciao’ 53
  • 127. Capítulo 7. Variables Conceptos Básicos En PHP las variables se representan como un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas. $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // produce la salida "Bob, Joe" En PHP3, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a una variable, el valor íntegro de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después e asignar el valor de una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la otra. Para más información sobre este tipo de asignación, vea Expresiones. PHP4 ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, "se convierte en un alias de" o "apunta a") la variable original. Los cambios a la nueva variable afectan a la original, y viceversa. Esto también significa que no se produce una copia de valores; por tanto, la asignación ocurre más rápidamente. De cualquier forma, cualquier incremento de velocidad se notará sólo en los bucles críticos cuando se asignen grandes arrays u objetos. Para asignar por referencia, simplemente se antepone un ampersand (&) al comienzo de la variable cuyo valor se está asignando (la variable fuente). Por ejemplo, el siguiente trozo de código produce la salida ’Mi nombre es Bob’ dos veces: <?php $foo = ’Bob’; // Asigna el valor ’Bob’ a $foo $bar = &$foo; // Referencia $foo vía $bar. $bar = "Mi nombre es $bar"; // Modifica $bar... echo $foo; // $foo también se modifica. echo $bar; ?> Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por referencia. <?php $foo = 25; $bar = &$foo; // Esta es una asignación válida. $bar = &(24 * 7); // Inválida; referencia una expresión sin nombre. function test() { return 25; } $bar = &test(); // Inválida. 55
  • 128. Capítulo 7. Variables ?> Variables predefinidas PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se ejecute. De todas formas, muchas de esas variables no pueden estar completamente documentadas ya que dependen de sobre qué servidor se esté ejecutando, la versión y configuración de dicho servidor, y otros factores. Algunas de estas variables no estarán disponibles cuando se ejecute PHP desde la línea de comandos. A pesar de estos factores, aquí tenemos una lista de variables predefinidas disponibles en una instalación por defecto de PHP 3 corriendo como modulo de un Apache (http://www.apache.org/) 1.3.6 con su configuración también por defecto. Para una lista de variables predefinidas (y muchas más información útil), por favor, vea (y use) phpinfo(). Nota: Esta lista no es exhaustiva ni pretende serlo. Simplemente es una guía de qué tipo de variables predefinidas se puede esperar tener disponibles en un script. Variables de Apache Estas variables son creadas por el servidor web Apache (http://www.apache.org/). Si se está utilizando otro servidor web, no hay garantía de que proporcione las mismas variables; pueden faltar algunas, o proporcionar otras no listadas aquí. Dicho esto, también están presentes las variables de la especificación CGI 1.1 (http://hoohoo.ncsa.uiuc.edu/cgi/env.html), por lo que también se deben tener en cuenta. Tenga en cuenta que unas pocas, como mucho, de estas variables van a estar disponibles (o simplemente tener sentido) si se ejecuta PHP desde la línea de comandos. GATEWAY_INTERFACE Qué revisión de la especificación CGI está usando el servidor; por ejemplo ’CGI/1.1’. SERVER_NAME El nombre del equipo servidor en el que se está ejecutando el script. Si el script se está ejecutando en un servidor virtual, este será el valor definido para dicho servidor virtual. SERVER_SOFTWARE Una cadena de identificación del servidor, que aparece en las cabeceras al responderse a las peticiones. SERVER_PROTOCOL Nombre y revisión del protocolo a través del que se solicitó la página; p.ej. ’HTTP/1.0’; 56
  • 129. Capítulo 7. Variables REQUEST_METHOD Qué método de petición se usó para acceder a la página; p.ej. ’GET’, ’HEAD’, ’POST’, ’PUT’. QUERY_STRING La cadena de la petición, si la hubo, mediante la que se accedió a la página. DOCUMENT_ROOT El directorio raíz del documento bajo el que se ejecuta el script, tal y como está definido en el fichero de configuración del servidor. HTTP_ACCEPT Los contenidos de la cabecera Accept: de la petición actual, si hay alguna. HTTP_ACCEPT_CHARSET Los contenidos de la cabecera Accept-Charset: de la petición actual, si hay alguna. Por ejemplo: ’iso-8859-1,*,utf-8’. HTTP_ENCODING Los contenidos de la cabecera Accept-Encoding: de la petición actual, si la hay. Por ejemplo: ’gzip’. HTTP_ACCEPT_LANGUAGE Los contenidos de la cabecera Accept-Language: de la petición actual, si hay alguna. Por ejemplo: ’en’. HTTP_CONNECTION Los contenidos de la cabecera Connection: de la petición actual, si hay alguna. Por ejemplo: ’Keep-Alive’. HTTP_HOST Los contenidos de la cabecera Host: de la petición actual, si hay alguna. HTTP_REFERER La dirección de la página (si la hay) desde la que el navegador saltó a la página actual. Esto lo establece el navegador del usuario; no todos los navegadores lo hacen. HTTP_USER_AGENT Los contenidos de la cabecera User_Agent: de la petición actual, si hay alguna. Indica el navegador que se está utilizando para ver la página actual; p.ej. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre otras cosas, se puede usar este valor con get_browser() para adaptar la funcionalidad de la página a las posibilidades del navegador del usuario. REMOTE_ADDR La dirección IP desde la que el usuario está viendo la página actual. 57
  • 130. Capítulo 7. Variables REMOTE_PORT El puerto que se está utilizando en la máquina del usuario para comunicarse con el servidor web. SCRIPT_FILENAME La vía de acceso absoluta del script que se está ejecutando. SERVER_ADMIN El valor que se haya dado a la directiva SERVER_ADMIN (en Apache) en el fichero de configuración del servidor web. Si el script se está ejecutando en un servidor virtual, será el valor definido para dicho servidor virtual. SERVER_PORT El puerto del equipo servidor que está usando el servidor web para la comunicación. Para configuraciones por defecto, será ’80’; al usar SSL, por ejemplo, cambiará al puerto que se haya definido como seguro para HTTP. SERVER_SIGNATURE Una cadena que contiene la versión del servidor y el nombre del servidor virtual que es añadida a las páginas generadas por el servidor, si está característica está activa. PATH_TRANSLATED Vía de acceso basada en el sistema de ficheros- (no el directorio raíz del documento-) del script en cuestión, después de que el servidor haya hecho la conversión virtual-a-real. SCRIPT_NAME Contiene la vía de acceso del script actual. Es útil para páginas que necesitan apuntar a sí mismas. REQUEST_URI La URI que se dió para acceder a esta página; por ejemplo, ’/index.html’. Variables de entorno Estas variables se importan en el espacio de nombres global de PHP desde el entorno en el que se esté ejecutando el intérprete PHP. Muchas son proporcionadas por el intérprete de comandos en el que se está ejecutando PHP, y dado que a sistemas diferentes les gusta ejecutar diferentes tipos de intérpretes de comandos, es imposible hacer una lista definitiva. Por favor, mire la documentación de su intérprete de comandos para ver una lista de las variables de entorno definidas. Otras variables de entorno son las de CGI, que están ahí sin importar si PHP se está ejecutando como un módulo del servidor o como un intérprete CGI. Variables de PHP Estas variables son creadas por el propio PHP. 58
  • 131. Capítulo 7. Variables argv Array de argumentos pasados al script. Cuando el script se ejecuta desde la línea de comandos, esto da un acceso, al estilo de C, a los parámetros pasados en línea de comandos. Cuando se le llama mediante el método GET, contendrá la cadena de la petición. argc Contiene el número de parámetros de la línea de comandos pasados al script (si se ejecuta desde la línea de comandos). PHP_SELF El nombre del fichero que contiene el script que se esta ejecutando, relativo al directorio raíz de los documentos. Si PHP se está ejecutando como intérprete de línea de comandos, esta variable no está disponible. HTTP_COOKIE_VARS Un array asociativo de variables pasadas al script actual mediante cookies HTTP. Sólo está disponible si el seguimiento de variables ha sido activado mediante la directiva de configuración track_vars o la directiva <?php_track_vars?>. HTTP_GET_VARS Un array asociativo de variables pasadas al script actual mediante el método HTTP GET. Sólo está disponible si --variable tracking-- ha sido activado mediante la directiva de configuración track_vars o la directiva <?php_track_vars?>. HTTP_POST_VARS Un array asociativo de variables pasadas al script actual mediante el método HTTP POST. Sólo está disponible si --variable tracking-- ha sido activado mediante la directiva de configuración track_vars o la directiva <?php_track_vars?>. Ambito de las variables El ámbito de una variable es el contexto dentro del que la variable está definida. La mayor parte de las variables PHP sólo tienen un ámbito simple. Este ámbito simple también abarca los ficheros incluidos y los requeridos. Por ejemplo: $a = 1; include "b.inc"; Aquí, la variable $a dentro del script incluido b.inc. De todas formas, dentro de las funciones definidas por el usuario aparece un ámbito local a la función. Cualquier variables que se use dentro de una función está, por defecto, limitada al ámbito local de la función. Por ejemplo: 59
  • 132. Capítulo 7. Variables $a = 1; /* ámbito global */ Function Test () { echo $a; /* referencia a una variable de ámbito local */ } Test (); Este script no producirá salida, ya que la orden echo utiliza una versión local de la variable $a, a la que no se ha asignado ningún valor en su ámbito. Puede que usted note que hay una pequeña diferencia con el lenguaje C, en el que las variables globales están disponibles automáticamente dentro de la función a menos que sean expresamente sobreescritas por una definición local. Esto puede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente. En PHP, las variables globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro de dicha función. Veamos un ejemplo: $a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b; El script anterior producirá la salida "3". Al declarar $a y $b globales dentro de la función, todas las referencias a tales variables se referirán a la versión global. No hay límite al número de variables globales que se pueden manipular dentro de una función. Un segundo método para acceder a las variables desde un ámbito global es usando el array $GLOBALS propio de PHP3. El ejemplo anterior se puede reescribir así: $a = 1; $b = 2; Function Sum () { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b; El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array. 60
  • 133. Capítulo 7. Variables Otra característica importante del ámbito de las variables es la variable static. Una variable estática existe sólo en el ámbito local de la función, pero no pierde su valor cuando la ejecución del programa abandona este ámbito. Consideremos el siguiente ejemplo: Function Test () { $a = 0; echo $a; $a++; } Esta función tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 y representa un "0". La sentencia $a++, que incrementa la variable, no sirve para nada, ya que en cuanto la función termina la variable $a desaparece. Para hacer una función útil para contar, que no pierda la pista del valor actual del conteo, la variable $a debe declararse como estática: Function Test () { static $a = 0; echo $a; $a++; } Ahora, cada vez que se llame a la función Test(), se representará el valor de $a y se incrementará. Las variables estáticas también proporcionan una forma de manejar funciones recursivas. Una función recursiva es la que se llama a sí misma. Se debe tener cuidado al escribir una función recursiva, ya que puede ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse de implementar una forma adecuada de terminar la recursión. La siguiente función cuenta recursivamente hasta 10, usando la variable estática $count para saber cuándo parar: Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; } Variables variables A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de variables que se pueden establecer y usar dinámicamente. Una variable normal se establece con una sentencia como: 61
  • 134. Capítulo 7. Variables $a = "hello"; Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hello, se puede usar como el nombre de una variable utilizando dos signos de dólar. p.ej. $$a = "world"; En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que contiene "hello", y $hello, que contiene "world". Es más, esta sentencia: echo "$a ${$a}"; produce el mismo resultado que: echo "$a $hello"; p.ej. ambas producen el resultado: hello world. Para usar variables variables con arrays, hay que resolver un problema de ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambiguedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo. Variables externas a PHP Formularios HTML (GET y POST) Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar automáticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente formulario: Ejemplo 7-1. Variables de formulario simples <form action="foo.php3" method="post"> Name: <input type="text" name="name"><br> <input type="submit"> </form> Cuando es enviado, PHP creará la variable $name, que contendrá lo que sea que se introdujo en el campo Name: del formulario. 62
  • 135. Capítulo 7. Variables PHP también maneja arrays en el contexto de variables de formularios, pero sólo en una dimensión. Se puede, por ejemplo, agrupar juntas variables relacionadas, o usar esta característica para recuperar valores de un campo select input múltiple: Ejemplo 7-2. Variables de formulario más complejas <form action="array.php" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness <option value="stuttgarter">Stuttgarter Schwabenbräu </select> <input type="submit"> </form> Si la posibilidad de PHP de track_vars está activada, ya sea mediante la opción de configuración track_vars o mediante la directiva <?php_track_vars?>, las variables enviadas con los métodos POST o GET también se encontrarán en los arrays asociativos globales $HTTP_POST_VARS y $HTTP_GET_VARS. IMAGE SUBMIT variable names Cuando se envía un formulario, es posible usar una imagen en vez del botón submit estándar con una etiqueta como: <input type=image src="image.gif" name="sub"> Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña se transmitirá al servidor con dos variables adicionales, sub_x y sub_y. Estas contienen las coordenadas del click del usuario dentro de la imagen. Los más experimentados puede notar que los nombres de variable enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte el guión en subrayado automáticamente. Cookies HTTP PHP soporta cookies de HTTP de forma transparente tal y como están definidas en en las Netscape’s Spec (http://www.netscape.com/newsref/std/cookie_spec.html). Las cookies son un mecanismo para almacenar datos en el navegador y así rastrear o identificar a usuarios que vuelven. Se pueden crear cookies usando la función SetCookie(). Las cookies son parte de la cabecera HTTP, así que se debe llamar a la función SetCookie antes de que se envíe cualquier salida al navegador. Es la misma 63
  • 136. Capítulo 7. Variables restricción que para la función header(). Cualquier cookie que se reciba procedente del cliente será convertida automáticamente en una variable de PHP como con los datos en los métodos GET y POST. Si se quieren asignar múltiples valores a una sola cookie, basta con añadir [] al nombre de la. Por ejemplo: SetCookie ("MyCookie[]", "Testing", time()+3600); Nótese que una cookie reemplazará a una cookie anterior que tuviese el mismo nombre en el navegador a menos que el camino (path) o el dominio fuesen diferentes. Así, para una aplicación de carro de la compra se podría querer mantener un contador e ir pasándolo. P.ej. Ejemplo 7-3. SetCookie Example $Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600); Variables de entorno PHP hace accesibles las variables de entorno automáticamente tratándolas como variables normales. echo $HOME; /* Shows the HOME environment variable, if set. */ Dado que la información que llega vía mecanismos GET, POST y Cookie crean automáticamente variables de PHP, algunas veces es mejor leer variables del entorno explícitamente para asegurarse de que se está trabajando con la versión correcta. La función getenv() se puede usar para ello. También se puede asignar un valor a una variable de entorno con la función putenv(). Puntos en los nombres de variables de entrada Típicamente, PHP no altera los nombres de las variables cuando se pasan a un script. De todas formas, hay que notar que el punto no es un carácter válido en el nombre de una variable PHP. Por esta razón, mire esto: $varname.ext; /* nombre de variable no válido */ Lo que el intérprete ve es el nombre de una variable $varname, seguido por el operador de concatenación, y seguido por la prueba (es decir, una cadena sin entrecomillar que no coincide con ninguna palabra clave o reservada conocida) ’ext’. Obviamente, no se pretendía que fuese este el resultado. Por esta razón, es importante hacer notar que PHP reemplazará automáticamente cualquier punto en los nombres de variables de entrada por guiones bajos (subrayados). 64
  • 137. Capítulo 7. Variables Determinando los tipos de variables Dado que PHP determina los tipos de las variables y los convierte (generalmente) según necesita, no siempre resulta obvio de qué tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qué tipo es una variable. Son gettype(), is_long(), is_double(), is_string(), is_array(), y is_object(). 65
  • 139. Capítulo 8. Constantes Una constante es un identificador para expresar un valor simple. Como el nombre sugiere, este valor no puede variar durante la ejecución del script. (Las constantes especiales __FILE__ y __LINE__ son una excepción a esto, ya que actualmente no lo soin). Una constante es sensible a mayúsculas por defecto. Por convención, los identificadores de constantes suelen declararse en mayúsculas El nombre de una constante sigue las mismas reglas que cualquier etiqueta en PHP. Un nombre de constante válido empieza con una letra o un caracter de subrayado, seguido por cualquier número de letras, números, o subrayados. Se podrían expresar mediante la siguiente expresión regular: [a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]* Nota: Para nuestros propósitos , entenderemos como letra los carácteres a-z, A-Z, y los ASCII del 127 hasta el 255 (0x7f-0xff). El alcanze de una constante es global, Es decir, es posible acceder a ellas sin preocuparse por el ámbito de alcance. Sintaxis Se puede definir una constante usando la función define(). Una vez definida, no puede ser modificada ni eliminada . Solo se puede definir como constantes valores escalares (boolean, integer, float y string ). Para obtener el valor de una constante solo es necesario especificar su nombre. A diferencia de las variables, no se tiene que especificar el prefijo $. Tambien se puede utilizar la función constant(), para obtener el valor de una constante, en el caso de que queramos expresarla de forma dinámica Usa la función get_defined_constants() parar obtener una lista de todas las constantes definidas. Nota: Las contantes y las variables (globales) se encuentran en un espacio de nombres distinto. Esto implica que por ejemplo TRUE y $TRUE son diferentes. Si usas una constante todavia no definida, PHP asume que estás refiriéndote al nombre de la constante en si. Se lanzará un aviso si esto sucede. Usa la función defined() para comprobar la existencia de dicha constante. Estas son las diferencias entre constantes y variables: • Las constantes no son precedidas por un símbolo de dolar ($) • Las contantes solo pueden ser definidas usando la función() define , nunca por simple asignación • Las constantes pueden ser definidas y accedidas sin tener en cuenta las reglas de alcanze del ámbito. • Las constantes no pueden ser redefinidas o eliminadas despues de establecerse; y • Las constantes solo puede albergar valores escalares 67
  • 140. Capítulo 8. Constantes Ejemplo 8-1. Definiendo constantes <?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." echo Constant; // outputs "Constant" and issues a notice. ?> Constantes predefinidas PHP ofrece un largo número de constantes predefinidas a cualquier script en ejecución. Muchas de estas constantes, sin embargo, son creadas por diferentes extensiones, y solo estarán presentes si dichas extensiones están disponibles, bien por carga dinámica o porque has sido compiladas. Se puede encontrar una lista de constantes predefinidas en la seccion Constantes predefinidas. 68
  • 142. Capítulo 9. Expresiones Las expresiones son la piedra angular de PHP. En PHP, casi cualquier cosa que escribes es una expresión. La forma más simple y ajustada de definir una expresión es "cualquier cosa que tiene un valor". Las formas más básicas de expresiones son las constantes y las variables. Cuando escribes "$a = 5", estás asignando ’5’ a $a. ’5’, obviamente, tiene el valor 5 o, en otras palabras ’5’ es una expresión con el valor 5 (en este caso, ’5’ es una constante entera). Después de esta asignación, esperarás que el valor de $a sea 5 también, de manera que si escribes $b = $a, esperas que se comporte igual que si escribieses $b = 5. En otras palabras, $a es una expresión también con el valor 5. Si todo va bien, eso es exactamente lo que pasará. Las funciones son un ejemplo algo más complejo de expresiones. Por ejemplo, considera la siguiente función: function foo () { return 5; } Suponiendo que estés familiarizado con el concepto de funciones (si no lo estás échale un vistazo al capítulo sobre funciones), asumirás que teclear $c = foo() es esencialmente lo mismo que escribir $c = 5, y has acertado. Las funciones son expresiones que valen el valor que retornan. Como foo() devuelve 5, el valor de la expresión ’foo()’ es 5. Normalmente las funciones no devuelven un valor fijo, sino que suele ser calculado. Desde luego, los valores en PHP no se limitan a enteros, y lo más normal es que no lo sean. PHP soporta tres tipos escalares: enteros, punto flotante y cadenas (los tipos escalares son aquellos cuyos valores no pueden ’dividirse’ en partes menores, no como los arrays, por ejemplo). PHP también soporta dos tipos compuestos (no escalares): arrays y objetos. Se puede asignar cada uno de estos tipos de valor a variables o bien retornarse de funciones, sin ningún tipo de limitación. Hasta aquí, los usuarios de PHP/FI 2 no deberían haber notado ningún cambio. Sin embargo, PHP lleva las expresiones mucho más allá, al igual que otros lenguajes. PHP es un lenguaje orientado a expresiones, en el sentido de que casi todo es una expresión. Considera el ejemplo anterior ’$a = 5’. Es sencillo ver que hay dos valores involucrados, el valor de la constante entera ’5’, y el valor de $a que está siendo actualizado también a 5. Pero la verdad es que hay un valor adicional implicado aquí, y es el valor de la propia asignación. La asignación misma se evalúa al valor asignado, en este caso 5. En la práctica, quiere decir que ’$a = 5’, independientemente de lo que hace, es una expresión con el valor 5. De esta manera, escribir algo como ’$b = ($a = 5)’ es como escribir ’$a = 5; $b = 5;’ (un punto y coma marca el final de una instrucción). Como las asignaciones se evalúan de derecha a izquierda, puedes escribir también ’$b = $a = 5’. Otro buen ejemplo de orientación a expresiones es el pre y post incremento y decremento. Los usuarios de PHP/FI 2 y los de otros muchos lenguajes les sonará la notación variable++ y variable--. Esto son las operaciones de incremento y decremento. En PHP/FI 2, la instrucción ’$a++’ no tiene valor (no es una expresión), y no puedes asignarla o usarla de ningún otro modo. PHP mejora las características del incremento/decremento haciéndolos también expresiones, como en C. En PHP, como en C, hay dos tipos de incremento - pre-incremento y post-incremento. Ambos, en esencia, incrementan la variable y el efecto en la variable es idéntico. La diferencia radica en el valor de la propia expresion incremento. El preincremento , escrito ’++$variable’, se evalúa al valor incrementado (PHP incrementa la variable antes de leer su valor, de ahí el nombre ’preincremento’). El postincremento, escrito ’$variable++’, se evalúa al 70
  • 143. Capítulo 9. Expresiones valor original de $variable antes de realizar el incremento (PHP incrementa la variable después de leer su valor, de ahí el nombre ’postincremento’). Un tipo muy corriente de expresiones son las expresiones de comparación. Estas expresiones se evalúan a 0 o 1, significando FALSO (FALSE) o CIERTO (TRUE), respectivamente. PHP soporta > (mayor que), >= (mayor o igual que), == (igual que), != (distinto), < (menor que) y <= (menor o igual que). Estas expresiones se usan frecuentemente dentro de la ejecución condicional como la instrucción if. El último tipo de expresiones que trataremos, es la combinación operador-asignación. Ya sabes que si quieres incrementar $a en 1, basta con escribir ’$a++’ o ++$a’. Pero qué pasa si quieres añadir más de 1, por ejemplo 3? Podrías escribir ’$a++’ múltiples veces, pero no es una forma de hacerlo ni eficiente ni cómoda. Una práctica mucho más corriente es escribir ’$a = $a + 3’. ’$a + 3’ se evalúa al valor de $a más 3, y se asigna de nuevo a $a, lo que resulta en incrementar $a en 3. En PHP, como en otros lenguajes como C, puedes escribir esto de una forma más concisa, que con el tiempo será más clara y también fácil de entender. Añadir 3 al valor actual de $a se puede escribir como ’$a += 3’. Esto quiere decir exactamente "toma el valor de $a, súmale 3, y asígnalo otra vez a $a". Además de ser más corto y claro, también resulta en una ejecución más rápida. El valor de ’$a += 3’, como el valor de una asignación normal y corriente, es el valor asignado. Ten en cuenta que NO es 3, sino el valor combinado de $a más 3 (ése es el valor asignado a $a). Cualquier operación binaria puede ser usada en forma de operador-asignación, por ejemplo ’$a -= 5’ (restar 5 del valor de $a), ’$b *= 7’ (multiplicar el valor de $b por 5), etc. Hay otra expresión que puede parecer extraña si no la has visto en otros lenguaes, el operador condicional ternario: $first ? $second : $third Si el valor de la primera subexpresión es verdadero (distinto de cero), entonces se evalúa la segunda subexpresión, si no, se evalúa la tercera y ése es el valor. El siguiente ejemplo te ayudará a comprender un poco mejor el pre y post incremento y las expresiones en general: function double($i) { return $i*2; } $b = $a = 5; /* asignar el valor cinco a las variables $a y $b */ $c = $a++; /* postincremento, asignar el valor original de $a (5) a $c */ $e = $d = ++$b; /* preincremento, asignar el valor incrementado de $b (6) a $d y a $e */ /* en este punto, tanto $d como $e son iguales a 6 */ $f = double($d++); /* asignar el doble del valor de $d antes del incremento, 2*6 = 12 a $f */ $g = double(++$e); /* asignar el doble del valor de $e después del incremento, 2*7 = 14 a $g */ $h = $g += 10; /* primero, $g es incrementado en 10 y termina valiendo 24. después el valor de la asignación (24) se asigna a $h, y $h también acaba valiendo 24. */ 71
  • 144. Capítulo 9. Expresiones Al principio del capítulo hemos dicho que describiríamos los distintos tipos de instrucciones y, como prometimos, las expresiones pueden ser instrucciones. Sin embargo, no todas las expresiones son instrucciones. En este caso, una instrucción tiene la forma ’expr’ ’;’, es decir, una expresión seguida de un punto y coma. En ’$b=$a=5;’, $a=5 es una expresión válida, pero no es una instrucción en sí misma. Por otro lado ’$b=$a=5:’ sí es una instrucción válida. Una última cosa que vale la pena mencionar, es el valor booleano de las expresiones. En muchas ocasiones, principalmente en condicionales y bucles, no estás interesado en el valor exacto de la expresión, sino únicamente si es CIERTA (TRUE) o FALSA (FALSE) (PHP no tiene un tipo booleano específico). El valor de verdad de las expresiones en PHP se calcula de forma similar a perl. Cualquier valor numérico distinto de cero es CIERTO (TRUE), cero es FALSO (FALSE). Fíjate en que los valores negativos son distinto de cero y considerados CIERTO (TRUE)! La cadena vacía y la cadena "0" son FALSO (FALSE); todas las demás cadenas son TRUE. Con los tipos no escalares (arrays y objetos) - si el valor no contiene elementos se considera FALSO (FALSE), en caso contrario se considera CIERTO (TRUE). PHP te brinda una completa y potente implementación de expresiones, y documentarla enteramente está más allá del objetivo de ete manual. Los ejemplos anteriores, deberían darte una buena idea de qué son las expresiones y cómo construir expresiones útiles. A lo largo del resto del manual, escribiremos expr para indicar una expresión PHP válida. 72
  • 146. Capítulo 10. Operadores Operadores Aritméticos ¿Recuerdas la aritmética básica del colegio? Pues estos operadores funcionan exactamente igual. Tabla 10-1. Operadores Aritméticos ejemplo nombre resultado $a + $b Adición Suma de $a y $b. $a - $b Substracción Diferencia entre $a y $b. $a * $b Multiplicación Producto de $a and $b. $a / $b División Cociente de $a entre $b. $a % $b Módulo Resto de $a dividido entre $b. Operadores de Asignación El operador básico de asignación es "=". A primera vista podrías pensar que es el operador de comparación "igual que". Pero no. Realmente significa que el operando de la izquierda toma el valor de la expresión a la derecha, (esto es, "toma el valor de"). El valor de una expresión de asignación es el propio valor asignado. Esto es, el valor de "$a = 3" es 3. Esto permite hacer cosas curiosas como $a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4. Además del operador básico de asignación, existen los "operadores combinados" para todas las operaciones aritméticas y de cadenas que sean binarias. Este operador combinado te permite, de una sola vez, usar una variable en una expresión y luego establecer el valor de esa variable al resultado de la expresión. Por ejemplo: $a = 3; $a += 5; // establece $a a 8, como si hubiésemos escrito: $a = $a + 5; $b = "Hola "; $b .= "Ahí!"; // establece $b a "Hola Ahí!", igual que si hiciésemos $b = $b . "Ahí!"; Fíjate en que la asignación realiza una nueva copia de la variable original (asignación por valor), por lo que cambios a la variable original no afectan a la copia. Esto puede tener interés si necesitas copiar algo como un array con muchos elementos dentro de un bucle que se repita muchas veces (cada vez se realizará una nueva copia del array). PHP4 soporta asignación por referencia, usando la sintaxis $var = &$othervar;, pero esto no es posible en PHP3. ’Asignación por referencia’ quiere decir que ambas variables acabarán apuntando al mismo dato y que nada es realmente copiado. 74
  • 147. Capítulo 10. Operadores Operadores Bit a bit Los operadores bit a bit te permiten activar o desactivar bits individuales de un entero. Tabla 10-2. Operadores Bit a bit ejemplo nombre resultado $a & $b Y Se activan los bits que están activos tanto en $a como $b. $a | $b O Se activan los bits que están activos en $a o que lo están en $b. $a ^ $b Xor ("o exclusiva") Se activan los bits que están activos en $a o en $b pero no en ambos a la vez. ~ $a No Se activan los bits que no están activos en $a. $a << $b Desplazamiento a la izquierda Desplaza los bits de $a, $b posiciones hacia la izquierda (por aritmética binaria, cada posición desplazada equivale a multiplicar por dos el valor de $a) $a >> $b Desplazamiento a la derecha Desplaza los bits de $a, $b posiciones hacia la derecha (por aritmética binaria, cada posición desplazada equivale a dividir entre dos el valor de $a) Operadores de Comparación Los operadores de comparación, como su nombre indica, permiten comparar dos valores. Tabla 10-3. Operadores de Comparación ejemplo nombre resultado $a == $b Igualdad Cierto si $a es igual a $b. $a === $b Identidad Cierto si $a es igual a $b y si son del mismo tipo (sólo PHP4) $a != $b Desigualdad Cierto si $a no es igual a $b. $a < $b Menor que Cierto si $a es estrictamente menor que $b. $a > $b Mayor que Cierto si $a es estrictamente mayor que $b. 75
  • 148. Capítulo 10. Operadores ejemplo nombre resultado $a <= $b Menor o igual que Cierto si $a es menor o igual que $b. $a >= $b Mayor o igual que Cierto si $a es mayor o igual que $b. Otro operador condicional es el operador "?:" (o ternario), que funciona como en C y otros muchos lenguajes. (expr1) ? (expr2) : (expr3); La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se evalúa a falso. Operador de ejecución PHP soporta un operador de ejecución: el apóstrofe invertido (“). ¡Fíjate que no son apostrofes normales! PHP intentará ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un comando del shell; y su salida devuelta como el valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida; puede asignarse a una variable). $output = ‘ls -al‘; echo "<pre>$output</pre>"; Ver también system(), passthru(), exec(), popen(), y escapeshellcmd(). Operadores de Incremento/decremento PHP soporta los operadores de predecremento y post incremento al estilo de C. Tabla 10-4. Operadores de Incremento/decremento ejemplo nombre efecto ++$a Preincremento Incrementa $a en uno y después devuelve $a. $a++ Postincremento Devuelve $a y después incrementa $a en uno. --$a Predecremento Decrementa $a en uno y después devuelve $a. $a-- Postdecremento Devuelve $a y después decrementa $a en uno. 76
  • 149. Capítulo 10. Operadores He aquí un listado de ejemplo: <?php echo "<h3>Postincremento</h3>"; $a = 5; echo "Debería ser 5: " . $a++ . "<br>n"; echo "Debería ser 6: " . $a . "<br>n"; echo "<h3>Preincremento</h3>"; $a = 5; echo "Debería ser 6: " . ++$a . "<br>n"; echo "Debería ser 6: " . $a . "<br>n"; echo "<h3>Postdecremento</h3>"; $a = 5; echo "Debería ser 5: " . $a-- . "<br>n"; echo "Debería ser 4: " . $a . "<br>n"; echo "<h3>Predecremento</h3>"; $a = 5; echo "Debería ser 4: " . --$a . "<br>n"; echo "Debería ser 4: " . $a . "<br>n"; ?> Operadores Lógicos Tabla 10-5. Operadores Lógicos ejemplo nombre resultado $a and $b Y Cierto si tanto $a como $b son ciertos. $a or $b O Cierto si $a o $b son ciertos. $a xor $b O exclusiva Cierto si $a es cierto o $b es cierto, pero no ambos a la vez. ! $a Negación Cierto si $a no es cierto. $a && $b Y Cierto si tanto $a como $b son ciertos. $a || $b O Cierto si $a o $b son ciertos. La razón de las dos variaciones de "y" y "o" es que operan con distinta precedencia (ver Precedencia de Operadores.) 77
  • 150. Capítulo 10. Operadores Precedencia de Operadores La precedencia de operadores especifica cómo se agrupan las expresiones. Por ejemplo, en la expresión 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una mayor precedencia que el de adición ("+"). La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia. Tabla 10-6. Precedencia de Operadores Asociatividad Operadores izquierda , izquierda or izquierda xor izquierda and derecha print izquierda = += -= *= /= .= %= &= |= ^= ~= <<= >>= izquierda ?: izquierda || izquierda && izquierda | izquierda ^ izquierda & no asociativo == != === no asociativo < <= > >= izquierda << >> izquierda +-. izquierda */% derecha ! ~ ++ -- (int) (double) (string) (array) (object) @ derecha [ no asociativo new Operadores de Cadenas Hay dos operadores de cadenas. El primero es el operador de concatenación (’.’), que devuelve el resultado de concatenar sus operandos izquierdo y derecho. El segundo es el operador de concatenación y asignación (’.=’). Consulta Operadores de Asignación para más información. $a = "Hola "; $b = $a . "Mundo!"; // ahora $b contiene "Hola Mundo!" 78
  • 151. Capítulo 10. Operadores $a = "Hola "; $a .= "Mundo!"; // ahora $a contiene "Hola Mundo!" 79
  • 152. Capítulo 11. Estructuras de Control 80
  • 153. Capítulo 11. Estructuras de Control Todo archivo de comandos PHP se compone de una serie de sentencias. Una sentencia puede ser una asignación, una llamada a función, un bucle, una sentencia condicional e incluso una sentencia que no haga nada (una sentencia vacía). Las sentencias normalmente acaban con punto y coma. Además, las sentencias se pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con llaves. Un grupo de sentencias es también una sentencia. En este capítulo se describen los diferentes tipos de sentencias. if La construcción if es una de las más importantes características de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código. PHP caracteriza una estructura if que es similar a la de C: if (expr) sentencia Como se describe en la sección sobre expresiones, expr se evalúa a su valor condicional. Si expr se evalúa como TRUE, PHP ejecutará la sentencia, y si se evalúa como FALSE - la ignorará. El siguiente ejemplo mostraría a es mayor que b si $a fuera mayor que $b: if ($a > $b) print "a es mayor que b"; A menudo, se desea tener más de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con una cláusula if. En vez de eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este código mostraría a es mayor que b si $a fuera mayor que $b, y entonces asignaría el valor de $a a $b: if ($a > $b) { print "a es mayor que b"; $b = $a; } Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes partes de tu programa. 81
  • 154. Capítulo 11. Estructuras de Control else A menudo queremos ejecutar una sentencia si se cumple una cierta condicion, y una sentencia distinta si la condición no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresión en la sentencia if se evalúe como FALSE. Por ejemplo, el siguiente código mostraría a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso: if ($a > $b) { print "a es mayor que b"; } else { print "a NO es mayor que b"; } La sentencia else se ejecuta solamente si la expresión if se evalúa como FALSE, y si hubiera alguna expresión elseif - sólo si se evaluaron también a FALSE (Ver elseif). elseif elseif, como su nombre sugiere, es una combinación de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresión if original se evalúa como FALSE. No obstante, a diferencia de else, ejecutará esa expresión alternativa solamente si la expresión condicional elseif se evalúa como TRUE. Por ejemplo, el siguiente código mostraría a es mayor que b, a es igual a b o a es menor que b: if ($a > $b) { print "a es mayor que b"; } elseif ($a == $b) { print "a es igual que b"; } else { print "a es mayor que b"; } Puede haber varios elseifs dentro de la misma sentencia if. La primera expresión elseif (si hay alguna) que se evalúe como TRUE se ejecutaría. En PHP, también se puede escribir ’else if’ (con dos palabras) y el comportamiento sería idéntico al de un ’elseif’ (una sola palabra). El significado sintáctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la línea básica es que ambos resultarían tener exactamente el mismo comportamiento. La sentencia elseif se ejecuta sólo si la expresión if precedente y cualquier expresión elseif precedente se evalúan como FALSE, y la expresión elseif actual se evalúa como TRUE. 82
  • 155. Capítulo 11. Estructuras de Control Sintaxis Alternativa de Estructuras de Control PHP ofrece una sintaxis altenativa para alguna de sus estructuras de control; a saber, if, while, for, y switch. En cada caso, la forma básica de la sintaxis alternativa es cambiar abrir-llave por dos puntos (:) y cerrar-llave por endif;, endwhile;, endfor;, or endswitch;, respectivamente. <?php if ($a==5): ?> A es igual a 5 <?php endif; ?> En el ejemplo de arriba, el bloque HTML "A = 5" se anida dentro de una sentencia if escrita en la sintaxis alternativa. El bloque HTML se mostraría solamente si $a fuera igual a 5. La sintaxis alternativa se aplica a else y también a elseif. La siguiente es una estructura if con elseif y else en el formato alternativo: if ($a == 5): print "a es igual a 5"; print "..."; elseif ($a == 6): print "a es igual a 6"; print "!!!"; else: print "a no es ni 5 ni 6"; endif; Mirar también while, for, e if para más ejemplos. while Los bucles while son los tipos de bucle más simples en PHP. Se comportan como su contrapartida en C. La forma básica de una sentencia while es: while (expr) sentencia El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s) sentencia(s) anidada(s) repetidamente, mientras la expresión while se evalúe como TRUE. El valor de la expresión es comprobado cada vez al principio del bucle, así que incluso si este valor cambia durante la ejecución de la(s) sentencia(s) anidada(s), la ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta las sentencias en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarán ni siquiera una vez. 83
  • 156. Capítulo 11. Estructuras de Control Como con la sentencia if, se pueden agrupar multiples sentencias dentro del mismo bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis alternativa: while (expr): sentencia ... endwhile; Los siguientes ejemplos son idénticos, y ambos imprimen números del 1 al 10: /* ejemplo 1 */ $i = 1; while ($i <= 10) { print $i++; /* el valor impreso sería $i antes del incremento (post-incremento) */ } /* ejemplo 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile; do..while Los bucles do..while son muy similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteración en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecución de la primera iteración de un bucle do..while (la condición se comprueba sólo al final de la iteración), mientras que puede no ser necesariamente ejecutada con un bucle while regular (la condición se comprueba al principio de cada iteración, si esta se evalúa como FALSE desde el principio la ejecución del bucle finalizará inmediatamente). Hay una sola sintaxis para los bucles do..while: $i = 0; do { print $i; } while ($i>0); 84
  • 157. Capítulo 11. Estructuras de Control El bucle de arriba se ejecutaría exactamente una sola vez, después de la primera iteración, cuando la condición se comprueba, se evalúa como FALSE ($i no es más grande que 0) y la ejecución del bucle finaliza. Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do..while, para permitir parar la ejecución en medio de los bloques de código, encapsulandolos con do..while(0), y usando la sentencia break. El siguiente fragmento de código demuestra esto: do { if ($i < 5) { print "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i es correcto"; ...procesa i... } while(0); No se preocupes si no entiende esto completamente o en absoluto. Se pueden codificar archivos de comandos e incluso archivos de comandos potentes sin usar esta ’propiedad’. for Los bucles for son los bucles más complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es: for (expr1; expr2; expr3) sentencia La primera expresión (expr1) se evalúa (ejecuta) incondicionalmente una vez al principio del bucle. Al comienzo de cada iteración, se evalúa expr2 . Si se evalúa como TRUE, el bucle continúa y las sentencias anidadas se ejecutan. Si se evalúa como FALSE, la ejecución del bucle finaliza. Al final de cada iteración, se evalúa (ejecuta) expr3. Cada una de las expresiones puede estar vacía. Que expr2 esté vacía significa que el bucle debería correr indefinidamente (PHP implicitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan inútil como se podría pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condición de for. Considera los siguientes ejemplos. Todos ellos muestran números del 1 al 10: /* ejemplo 1 */ 85
  • 158. Capítulo 11. Estructuras de Control for ($i = 1; $i <= 10; $i++) { print $i; } /* ejemplo 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } /* ejemplo 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* ejemplo 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; Por supuesto, el primer ejemplo parece ser el mas elegante (o quizás el cuarto), pero uno puede descubrir que ser capaz de usar expresiones vacías en bucles for resulta útil en muchas ocasiones. PHP también soporta la "sintaxis de dos puntos" alternativa para bucles for. for (expr1; expr2; expr3): sentencia; ...; endfor; Otros lenguajes poseen una sentencia foreach para traducir un array o una tabla hash. PHP3 no posee tal construcción; PHP4 sí (ver foreach). En PHP3, se puede combinar while con las funciones list() y each() para conseguir el mismo efecto. Mirar la documentación de estas funciones para ver un ejemplo. 86
  • 159. Capítulo 11. Estructuras de Control foreach PHP4 (PHP3 no) incluye una construcción foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fácil de iterar sobre arrays. Hay dos sintaxis; la segunda es una extensión menor, pero útil de la primera: foreach(expresion_array as $value) sentencia foreach(expresion_array as $key => $value) sentencia La primera forma recorre el array dado por expresion_array. En cada iteración, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (así en el siguiente paso, se estará mirando el elemento siguiente). La segunda manera hace lo mismo, salvo que la clave del elemento actual será asignada a la variable $key en cada iteración. Nota: Cuando foreach comienza su primera ejecución, el puntero interno a la lista (array) se reinicia automáticamente al primer elemento del array. Esto significa que no se necesita llamar a reset() antes de un bucle foreach. Nota: Hay que tener en cuanta queforeach con una copia de la lista (array) especificada y no la lista en si, por ello el puntero de la lista no es modificado como en la construcción each. Puede haber observado que las siguientes son funcionalidades idénticas: reset( $arr ); while( list( , $value ) = each( $arr ) ) { echo "Valor: $value<br>n"; } foreach( $arr as $value ) { echo "Valor: $value<br>n"; } Las siguientes también son funcionalidades idénticas: reset( $arr ); while( list( $key, $value ) = each( $arr ) ) { echo "Key: $key; Valor: $value<br>n"; } 87
  • 160. Capítulo 11. Estructuras de Control foreach( $arr as $key => $value ) { echo "Key: $key; Valor: $value<br>n"; } Algunos ejemplos más para demostrar su uso: /* foreach ejemplo 1: sólo valor*/ $a = array(1, 2, 3, 17); foreach($a as $v) { print "Valor actual de $a: $v.n"; } /* foreach ejemplo 2: valor (con clave impresa para ilustrar) */ $a = array(1, 2, 3, 17); $i = 0; /* sólo para propósitos demostrativos */ foreach($a as $v) { print "$a[$i] => $k.n"; } /* foreach ejemplo 3: clave y valor */ $a = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($a as $k => $v) { print "$a[$k] => $v.n"; } break break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch. break accepta un parámetro opcional, el cual determina cuantas estructuras de control hay que escapar. $arr = array (’one’, ’two’, ’three’, ’four’, ’stop’, ’five’); while (list (, $val) = each ($arr)) { if ($val == ’stop’) { break; /* You could also write ’break 1;’ here. */ 88
  • 161. Capítulo 11. Estructuras de Control } echo "$val<br>n"; } /* Using the optional argument. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br>n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting<br>n"; break 2; /* Exit the switch and the while. */ default: break; } } continue continue se usa dentro de la estructura del bucle para saltar el resto de la iteración actual del bucle y continuar la ejecución al comienzo de la siguiente iteración. continue accepta un parámetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecución. while (list($key,$value) = each($arr)) { if ($key % 2) { // salta los miembros impares continue; } do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer<br>n"; while (1) { echo " Middle<br>n"; while (1) { echo " Inner<br>n"; continue 3; } echo "This never gets output.<br>n"; } echo "Neither does this.<br>n"; } 89
  • 162. Capítulo 11. Estructuras de Control switch La sentencia switch es similar a una serie de sentencias IF en la misma expresión. En muchas ocasiones, se quiere comparar la misma variable (o expresión) con nuchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a qué valor es igual. Para ello sirve la sentencia switch. Los siguientes dos ejemplos son dos modos distintos de escribir la misma cosa, uno usa una serie de sentencias if, y el otro usa la sentencia switch: if ($i == 0) { print "i es igual a 0"; } if ($i == 1) { print "i es igual a 1"; } if ($i == 2) { print "i es igual a 2"; } switch ($i) { case 0: print "i es igual a 0"; break; case 1: print "i es igual a 1"; break; case 2: print "i es igual a 2"; break; } Es importante entender cómo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta línea por línea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta código. Sólo cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresión switch PHP comienza a ejecutar las sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguirá ejecutando las sentencias del siguiente case. Por ejemplo: switch ($i) { case 0: print "i es igual a 0"; case 1: print "i es igual a 1"; 90
  • 163. Capítulo 11. Estructuras de Control case 2: print "i es igual a 2"; } Aquí, si $i es igual a 0, ¡PHP ejecutaría todas las sentecias print! Si $i es igual a 1, PHP ejecutaría las últimas dos sentencias print y sólo si $i es igual a 2, se obtendría la conducta ’esperada’ y solamente se mostraría ’i es igual a 2’. Así, es importante no olvidar las sentencias break (incluso aunque pueda querer evitar escribirlas intencionadamente en ciertas circunstancias). En una sentencia switch, la condición se evalúa sólo una vez y el resultado se compara a cada sentencia case. En una sentencia elseif, la condición se evalúa otra vez. Si tu condición es más complicada que una comparación simple y/o está en un bucle estrecho, un switch puede ser más rápido. La lista de sentencias de un case puede también estar vacía, lo cual simplemente pasa el control a la lista de sentencias del siguiente case. switch ($i) { case 0: case 1: case 2: print "i es menor que 3, pero no negativo"; break; case 3: print "i es 3"; } Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Por ejemplo: switch ($i) { case 0: print "i es igual a 0"; break; case 1: print "i es igual a 1"; break; case 2: print "i es igual a 2"; break; default: print "i no es igual a 0, 1 o 2"; } 91
  • 164. Capítulo 11. Estructuras de Control La expresión case puede ser cualquier expresión que se evalúe a un tipo simple, es decir, números enteros o de punto flotante y cadenas de texto. No se pueden usar aquí ni arrays ni objetos a menos que se conviertan a un tipo simple. La sintaxis alternativa para las estructuras de control está también soportada con switch. Para más información, ver Sintaxis alternativa para estructuras de control. switch ($i): case 0: print "i es igual 0"; break; case 1: print "i es igual a 1"; break; case 2: print "i es igual a 2"; break; default: print "i no es igual a 0, 1 o 2"; endswitch; require() La sentencia require() se sustituye a sí misma con el archivo especificado, tal y como funciona la directiva #include de C. Un punto importante sobre su funcionamiento es que cuando un archivo se incluye con include() o se requiere con require()), el intérprete sale del modo PHP y entra en modo HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al final. Por esta razón, cualquier código dentro del archivo referenciado que debiera ser ejecutado como código PHP debe ser encerrado dentro de etiquetas válidas de comienzo y fin de PHP. require() no es en realidad una función de PHP; es más una construcción del lenguaje. Está sujeta a algunas reglas distintas de las de funciones. Por ejemplo, require() no esta sujeto a ninguna estructura de control contenedora. Por otro lado, no devuelve ningún valor; intentar leer un valor de retorno de una llamada a un require() resulta en un error del intérprete. A diferencia de include(), require() siempre leerá el archivo referenciado, incluso si la línea en que está no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo, se usa include(). La sentencia conditional no afecta a require(). No obstante, si la línea en la cual aparece el require() no se ejecuta, tampoco se ejecutará el código del archivo referenciado. De forma similar, las estructuras de bucle no afectan la conducta de require(). Aunque el código contenido en el archivo referenciado está todavía sujeto al bucle, el propio require() sólo ocurre una vez. Esto significa que no se puede poner una sentencia require() dentro de una estructura de bucle y esperar que incluya el contenido de un archivo distinto en cada iteración. Para hacer esto, usa una sentencia include(). 92
  • 165. Capítulo 11. Estructuras de Control require( ’header.inc’ ); When a file is require()ed, the code it contains inherits the variable scope of the line on which the require() occurs. Any variables available at that line in the calling file will be available within the called file. If the require() occurs inside a function within the calling file, then all of the code contained in the called file will behave as though it had been defined inside that function. If the require()ed file is called via HTTP using the fopen wrappers, and if the target server interprets the target file as PHP code, variables may be passed to the require()ed file using an URL request string as used with HTTP GET. This is not strictly speaking the same thing as require()ing the file and having it inherit the parent file’s variable scope; the script is actually being run on the remote server and the result is then being included into the local script. /* This example assumes that someserver is configured to parse .php * files and not .txt files. Also, ’works’ here means that the variables * $varone and $vartwo are available within the require()ed file. */ /* Won’t work; file.txt wasn’t handled by someserver. */ require ("http://someserver/file.txt?varone=1&vartwo=2"); /* Won’t work; looks for a file named ’file.php?varone=1&vartwo=2’ * on the local filesystem. */ require ("file.php?varone=1&vartwo=2"); /* Works. */ require ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; $vartwo = 2; require ("file.txt"); /* Works. */ require ("file.php"); /* Works. */ En PHP3, es posible ejecutar una sentencia return dentro de un archivo referenciado con require(), en tanto en cuanto esa sentencia aparezca en el ámbito global del archivo requerido (require()). No puede aparecer dentro de ningún bloque (lo que siginifica dentro de llaves({})). En PHP4, no obstante, esta capacidad ha sido desestimada. Si se necesita esta funcionalidad, véase include(). Ver tambien include(), require_once(), include_once(), readfile(), y virtual(). include() La sentencia include() incluye y evalúa el archivo especificado. Si "URL fopen wrappers" esta activada en PHP (como está en la configuración inicial), se puede especificar el fichero que se va a incluir usando una URL en vez de un fichero local (con su Path) Ver Ficheros remotos y fopen() para más información. 93
  • 166. Capítulo 11. Estructuras de Control Un punto importante sobre su funcionamiento es que cuando un archivo se incluye con include() o se requiere con require(), el intérprete sale del modo PHP y entra en modo HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al final. Por esta razón, cualquier código dentro del archivo referenciado que debiera ser ejecutado como código PHP debe ser encerrado dentro de etiquetas válidas de comienzo y fin de PHP. Esto sucede cada vez que se encuentra la sentencia include(), así que se puede usar una sentencia include() dentro de una estructura de bucle para incluir un número de archivos diferentes. $archivos = array (’primero.inc’, ’segundo.inc’, ’tercero.inc’); for ($i = 0; $i < count($archivos); $i++) { include $archivos[$i]; } include() difiere de require() en que la sentencia include se re-evalúa cada vez que se encuentra (y sólo cuando está siendo ejecutada), mientras que la sentencia require() se reemplaza por el archivo referenciado cuando se encuentra por primera vez, se vaya a evaluar el contenido del archivo o no (por ejemplo, si está dentro de una sentencia if cuya condición evaluada es falsa). Debido a que include() es una construcción especial del lenguaje, se debe encerrar dentro de un bloque de sentencias si está dentro de un bloque condicional. /* Esto es ERRÓNEO y no funcionará como se desea. */ if ($condicion) include($archivo); else include($otro); /* Esto es CORRECTO. */ if ($condicion) { include($archivo); } else { include($otro); } En ambos, PHP3 y PHP4, es posible ejecutar una sentencia return dentro de un archivo incluido con include(), para terminar el procesado de ese archivo y volver al archivo de comandos que lo llamó. Existen algunas diferencias en el modo en que esto funciona, no obstante. La primera es que en PHP3, return no puede aparecer dentro de un bloque a menos que sea un bloque de función, en el cual return se aplica a esa función y no al archivo completo. En PHP4, no obstante, esta restricción no existe. También, PHP4 permite devolver valores desde archivos incluidos con include(). Se puede capturar el valor de la llamada a include() como se haría con una función normal. Esto genera un error de intérprete en PHP3. 94
  • 167. Capítulo 11. Estructuras de Control Ejemplo 11-1. include() en PHP3 y PHP4 Asumamos la existencia del siguiente archivo (llamado test.inc) en el mismo directorio que el archivo principal: <?php echo "Antes del return <br>n"; if ( 1 ) { return 27; } echo "Después del return <br>n"; ?> Asumamos que el archivo principal (main.html) contiene lo siguiente: <?php $retval = include( ’test.inc’ ); echo "El archivo devolvió: ’$retval’<br>n"; ?> Cuando se llama a main.html en PHP3, generará un error del intérprete en la linea 2; no se puede capturar el valor de un include() en PHP3. En PHP4, no obstante, el resultado será: Antes del return El archivo devolvió: ’27’ Ahora, asumamos que se ha modificado main.html para que contenga lo siguiente: <?php include( ’test.inc’ ); echo "De vuelta en main.html<br>n"; ?> En PHP4, la salida será: Antes del return De vuelta en main.html No obstante, PHP3 dará la siguiente salida: Antes del return 27De vuelta en main.html Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5 El error del intérprete es resultado del hecho de que la sentencia return está encerrada en un bloque de no-función dentro de test.inc. Cuando el return se mueve fuera del bloque, la salida es: Antes del return 27De vuelta en main.html El ’27’ espúreo se debe al hecho de que PHP3 no soporta devolver valores con return desde archivos como ese. 95
  • 168. Capítulo 11. Estructuras de Control When a file is include()ed, the code it contains inherits the variable scope of the line on which the include() occurs. Any variables available at that line in the calling file will be available within the called file. If the include() occurs inside a function within the calling file, then all of the code contained in the called file will behave as though it had been defined inside that function. If the include()ed file is called via HTTP using the fopen wrappers, and if the target server interprets the target file as PHP code, variables may be passed to the include()ed file using an URL request string as used with HTTP GET. This is not strictly speaking the same thing as include()ing the file and having it inherit the parent file’s variable scope; the script is actually being run on the remote server and the result is then being included into the local script. /* This example assumes that someserver is configured to parse .php * files and not .txt files. Also, ’works’ here means that the variables * $varone and $vartwo are available within the include()ed file. */ /* Won’t work; file.txt wasn’t handled by someserver. */ include ("http://someserver/file.txt?varone=1&vartwo=2"); /* Won’t work; looks for a file named ’file.php?varone=1&vartwo=2’ * on the local filesystem. */ include ("file.php?varone=1&vartwo=2"); /* Works. */ include ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; $vartwo = 2; include ("file.txt"); /* Works. */ include ("file.php"); /* Works. */ See also require(), require_once(), include_once(), readfile(), and virtual(). require_once() The require_once() statement replaces itself with the specified file, much like the C preprocessor’s #include works, and in that respect is similar to the require() statement. The main difference is that in an inclusion chain, the use of require_once() will assure that the code is added to your script only once, and avoid clashes with variable values or function names that can happen. For example, if you create the following 2 include files utils.inc and foolib.inc Ejemplo 11-2. utils.inc <?php define(PHPVERSION, floor(phpversion())); echo "GLOBALS ARE NICEn"; 96
  • 169. Capítulo 11. Estructuras de Control function goodTea() { return "Oolong tea tastes good!"; } ?> Ejemplo 11-3. foolib.inc <?php require ("utils.inc"); function showVar($var) { if (PHPVERSION == 4) { print_r($var); } else { dump_var($var); } } // bunch of other functions ... ?> And then you write a script cause_error_require.php Ejemplo 11-4. cause_error_require.php <?php require("foolib.inc"); /* the following will generate an error */ require("utils.inc"); $foo = array("1",array("complex","quaternion")); echo "this is requiring utils.inc again which is alson"; echo "required in foolib.incn"; echo "Running goodTea: ".goodTea()."n"; echo "Printing foo: n"; showVar($foo); ?> When you try running the latter one, the resulting ouptut will be (using PHP 4.01pl2): GLOBALS ARE NICE GLOBALS ARE NICE Fatal error: Cannot redeclare causeerror() in utils.inc on line 5 By modifying foolib.inc and cause_errror_require.php to use require_once() instead of require() and renaming the last one to avoid_error_require_once.php, we have: 97
  • 170. Capítulo 11. Estructuras de Control Ejemplo 11-5. foolib.inc (fixed) ... require_once("utils.inc"); function showVar($var) { ... Ejemplo 11-6. avoid_error_require_once.php ... require_once("foolib.inc"); require_once("utils.inc"); $foo = array("1",array("complex","quaternion")); ... And when running the latter, the output will be (using PHP 4.0.1pl2): GLOBALS ARE NICE this is requiring globals.inc again which is also required in foolib.inc Running goodTea: Oolong tea tastes good! Printing foo: Array ( [0] => 1 [1] => Array ( [0] => complex [1] => quaternion ) ) Also note that, analogous to the behavior of the #include of the C preprocessor, this statement acts at "compile time", e.g. when the script is parsed and before it is executed, and should not be used for parts of the script that need to be inserted dynamically during its execution. You should use include_once() or include() for that purpose. For more examples on using require_once() and include_once(), look at the PEAR code included in the latest PHP source code distributions. See also: require(), include(), include_once(), get_required_files(), get_included_files(), readfile(), and virtual(). 98
  • 171. Capítulo 11. Estructuras de Control include_once() The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the important difference that if the code from a file has already been included, it will not be included again. As mentioned in the require_once() description, the include_once() should be used in the cases in which the same file might be included and evaluated more than once during a particular execution of a script, and you want to be sure that it is included exactly once to avoid problems with function redefinitions, variable value reassignments, etc. For more examples on using require_once() and include_once(), look at the PEAR code included in the latest PHP source code distributions. See also: require(), include(), require_once(), get_required_files(), get_included_files(), readfile(), and virtual(). 99
  • 173. Capítulo 12. Funciones Funciones definidas por el usuario Una función se define con la siguiente sintaxis: function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Función de ejemplo.n"; return $retval; } Cualquier instrucción válida de PHP puede aparecer en el cuerpo de la función, incluso otras funiones y definiciones de clases. En PHP3, las funciones deben definirse antes de que se referencien. En PHP4 no existe tal requerimiento. PHP no soporta la sobrecarga de funciones, y tampoco es posible redefinir u ocultar funciones previamente declaradas. PHP3 no soporta un número variable de parámetros, aunque sí soporta parámetros por defecto (ver Valores por defecto de de los parámetros para más información). PHP4 soporta ambos: ver Listas de longitud variable de parámetros y las referencias de las funciones func_num_args(), func_get_arg(), y func_get_args() para más información. Parámetros de las funciones La información puede suministrarse a las funciones mediante la lista de parámetros, una lista de variables y/o constantes separadas por comas. PHP soporta pasar parámetros por valor (el comportamiento por defecto), por referencia, y parámetros por defecto. Listas de longitud variable de parámetros sólo están soportadas en PHP4 y posteriores; ver Listas de longitud variable de parámetros y la referencia de las funciones func_num_args(), func_get_arg(), y func_get_args() para más información. Un efecto similar puede conseguirse en PHP3 pasando un array de parámetros a la función: function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; } Pasar parámetros por referencia Por defecto, los parámetros de una función se pasan por valor (de manera que si cambias el valor del argumento dentro de la función, no se ve modificado fuera de ella). Si deseas permitir a una función modificar sus parámetros, debes pasarlos por referencia. 101
  • 174. Capítulo 12. Funciones Si quieres que un parámetro de una función siempre se pase por referencia, puedes anteponer un ampersand (&) al nombre del parámetro en la definición de la función: function add_some_extra(&$string) { $string .= ’ y algo más.’; } $str = ’Esto es una cadena, ’; add_some_extra($str); echo $str; // Saca ’Esto es una cadena, y algo más.’ Si deseas pasar una variable por referencia a una función que no toma el parámetro por referencia por defecto, puedes anteponer un ampersand al nombre del parámetro en la llamada a la función: function foo ($bar) { $bar .= ’ y algo más.’; } $str = ’Esto es una cadena, ’; foo ($str); echo $str; // Saca ’Esto es una cadena, ’ foo (&$str); echo $str; // Saca ’Esto es una cadena, y algo más.’ Parámetros por defecto Una función puede definir valores por defecto para los parámetros escalares estilo C++: function makecoffee ($type = "cappucino") { return "Hacer una taza de $type.n"; } echo makecoffee (); echo makecoffee ("espresso"); La salida del fragmento anterior es: Hacer una taza de cappucino. Hacer una taza de espresso. El valor por defecto tiene que ser una expresión constante, y no una variable o miembro de una clase. 102
  • 175. Capítulo 12. Funciones En PHP 4.0 también es posible especificar unset como parámetro por defecto. Esto significa que el argumento no tomará ningún valor en absoluto si el valor no es suministrado. Destacar que cuando se usan parámetros por defecto, estos tienen que estar a la derecha de cualquier parámetro sin valor por defecto; de otra manera las cosas no funcionarán de la forma esperada. Considera el siguiente fragmento de código: function makeyogurt ($type = "acidophilus", $flavour) { return "Haciendo un bol de $type $flavour.n"; } echo makeyogurt ("mora"); // No funcionará de la manera esperada La salida del ejemplo anterior es: Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Haciendo un bol de mora. Y ahora, compáralo con: function makeyogurt ($flavour, $type = "acidophilus") { return "Haciendo un bol de $type $flavour.n"; } echo makeyogurt ("mora"); // funciona como se esperaba La salida de este ejemplo es: Haciendo un bol de acidophilus mora. Lista de longitud variable de parámetros PHP4 soporta las listas de longitud variable de parámetros en las funciones definidas por el usuario. Es realmente fácil, usando las funciones func_num_args(), func_get_arg(), y func_get_args(). No necesita de ninguna sintaxis especial, y las listas de parámetros pueden ser escritas en la llamada a la función y se comportarán de la manera esperada. 103
  • 176. Capítulo 12. Funciones Devolver valores Los valores se retornan usando la instrucción opcional return. Puede devolverse cualquier tipo de valor, incluyendo listas y objetos. function square ($num) { return $num * $num; } echo square (4); // saca ’16’. No puedes devolver múltiples valores desde una función, pero un efecto similar se puede conseguir devolviendo una lista. function small_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers(); old_function La instrucción old_function permite declarar una función usando una sintaxis idéntica a la de PHP/FI2 (excepto que debes reemplazar ’function’ por ’old_function’). Es una característica obsoleta, y debería ser usada únicamente por el conversor PHP/FI2->PHP3. Aviso Las funciones declaradas como old_function no pueden llamarse desde el código interno de PHP. Entre otras cosas, esto significa que no puedes usarlas en funciones como usort(), array_walk(), y register_shutdown_function(). Puedes solventar esta limitación escribiendo un "wrapper" (en PHP3 normal) que a su vez llame a la función declarada como old_function. Funciones variable PHP soporta el concepto de funciones variable, esto significa que si una variable tiene unos paréntesis añadidos al final, PHP buscará una función con el mismo nombre que la evaluación de la variable, e intentará ejecutarla. Entre otras cosas, esto te permite implementar retrollamadas (callbacks), tablas de funciones y demás. 104
  • 177. Capítulo 12. Funciones Ejemplo 12-1. Ejemplo de función variable <?php function foo() { echo "Dentro de foo()<br>n"; } function bar( $arg = ” ) { echo "Dentro de bar(); el parámetro fue ’$arg’.<br>n"; } $func = ’foo’; $func(); $func = ’bar’; $func( ’test’ ); ?> 105
  • 178. Capítulo 13. Clases y Objetos 106
  • 179. Capítulo 13. Clases y Objetos class Una clase es una colección de variables y de funciones que acceden a esas variables. Una clase se define con la siguiente sintaxis: <?php class Cart { var $items; // Items en nuestro carro de la compra // Añadir $num artículos de tipo $artnr al carro function add_item ($artnr, $num) { $this->items[$artnr] += $num; } // Sacar $num artículos del tipo $artnr del carro function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?> El ejemplo define una clase llamada Cart que consiste en un array asociativo de artículos en el carro y dos funciones para meter y sacar ítems del carro Las clases son tipos, es decir, son plantillas para variables. Tienes que crear una variable del tipo deseado con el operador new. $cart = new Cart; $cart->add_item("10", 1); Este ejemplo crea un objeto $cart de clase Cart. La función add_item() de ese objeto se llama para añadir un item del artículo número 10 al carro. Las Clases pueden ser extensiones de otras clases. Las clases extendidas o derivadas tienen todas las variables y funciones de la clase base y lo que les añadas al extender la definición. La herencia múltiple no está soportada. class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; 107
  • 180. Capítulo 13. Clases y Objetos } } Ese ejemplo define una clase Named_Cart (carro con nombre o dueño) que tiene todas las variables y funciones de Cart, y además añade la variable $owner y una función adicional set_owner(). Un carro con nombre se crea de la forma habitual y, una vez hecho, puedes acceder al propietario del carro. En los carros con nombre también puedes acceder a las funciones normales del carro: $ncart = new Named_Cart; // Creamos un carro con nombre $ncart->set_owner ("kris"); // Nombramos el carro print $ncart->owner; // Imprimimos el nombre del propietario $ncart->add_item ("10", 1); // Funcionalidad heredada de Cart Entre funciones de una clase, la variable $this hace referencia al propio objeto. Tienes que usar $this->loquesea para acceder a una variable o función llamada loquesea del objeto actual. Los constructores son funciones de una clase que se llaman automáticamente al crear una nueva instancia (objeto) de una clase. Una función se convierte en constructor cuando tiene el mismo nombre que la clase. class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); } } Este ejemplo define una clase Auto_Cart que es un Cart junto con un constructor que inicializa el carro con un item del tipo de artículo "10" cada vez que se crea un nuevo Auto_Cart con "new". Los constructores también pueden recibir parámetros y estos parámetros pueden ser opcionales, lo que los hace más útiles. class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Compramos las mismas cosas aburridas de siempre $default_cart = new Constructor_Cart; // Compramos las cosas interesantes $different_cart = new Constructor_Cart ("20", 17); 108
  • 181. Capítulo 13. Clases y Objetos Atención Para las clases derivadas, el constructor de la clase padre no es llamado automáticamente cuando se llama al constructor de la clase derivada. 109
  • 182. Capítulo 14. References Explained 110
  • 183. Capítulo 14. References Explained What References Are References in PHP are a means to access the same variable content by different names. They are not like C pointers, they are symbol table aliases. Note that in PHP, variable name and variable content are different, so the same content can have different names. The most close analogy is with Unix filenames and files - variable names are directory entries, while variable contents is the file itself. References can be thought of as hardlinking in Unix filesystem. What References Do PHP references allow you to make two variables to refer to the same content. Meaning, when you do: $a =& $b it means that $a and $b point to the same variable. Nota: $a and $b are completely equal here, that’s not $a is pointing to $b or vice versa, that’s $a and $b pointing to the same place. The same syntax can be used with functions, that return references, and with new operator (in PHP 4.0.4 and later): $bar =& new fooclass(); $foo =& find_var ($bar); Nota: Not using the & operator causes a copy of the object to be made. If you use $this in the class it will operate on the current instance of the class. The assignment without & will copy the instance (i.e. the object) and $this will operate on the copy, which is not always what is desired. Usually you want to have a single instance to work with, due to performance and memory consumption issues. While you can use the @ operator to mute any errors in the constructor when using it as @new, this does not work when using the &new statement. This is a limitation of the Zend Engine and will therefore result in a parser error. The second thing references do is to pass variables by-reference. This is done by making a local variable in a function and a variable in the calling scope reference to the same content. Example: 111
  • 184. Capítulo 14. References Explained function foo (&$var) { $var++; } $a=5; foo ($a); will make $a to be 6. This happens because in the function foo the variable $var refers to the same content as $a. See also more detailed explanations about passing by reference. The third thing reference can do is return by reference. What References Are Not As said before, references aren’t pointers. That means, the following construct won’t do what you expect: function foo (&$var) { $var =& $GLOBALS["baz"]; } foo($bar); What happens is that $var in foo will be bound with $bar in caller, but then it will be re-bound with $GLOBALS["baz"]. There’s no way to bind $bar in the calling scope to something else using the reference mechanism, since $bar is not available in the function foo (it is represented by $var, but $var has only variable contents and not name-to-value binding in the calling symbol table). Passing by Reference You can pass variable to function by reference, so that function could modify its arguments. The syntax is as follows: function foo (&$var) { $var++; } 112
  • 185. Capítulo 14. References Explained $a=5; foo ($a); // $a is 6 here Note that there’s no reference sign on function call - only on function definition. Function definition alone is enough to correctly pass the argument by reference. Following things can be passed by reference: • Variable, i.e. foo($a) • New statement, i.e. foo(new foobar()) • Reference, returned from a function, i.e.: function &bar() { $a = 5; return $a; } foo(bar()); See also explanations about returning by reference. Any other expression should not be passed by reference, as the result is undefined. For example, the following examples of passing by reference are invalid: function bar() // Note the missing & { $a = 5; return $a; } foo(bar()); foo($a = 5) // Expression, not variable foo(5) // Constant, not variable These requirements are for PHP 4.0.4 and later. 113
  • 186. Capítulo 14. References Explained Returning References Returning by-reference is useful when you want to use a function to find which variable a reference should be bound to. When returning references, use this syntax: function &find_var ($param) { ...code... return $found_var; } $foo =& find_var ($bar); $foo->x = 2; In this example, the property of the object returned by the find_var function would be set, not the copy, as it would be without using reference syntax. Nota: Unlike parameter passing, here you have to use & in both places - to indicate that you return by-reference, not a copy as usual, and to indicate that reference binding, rather than usual assignment, should be done for $foo. Unsetting References When you unset the reference, you just break the binding between variable name and variable content. This does not mean that variable content will be destroyed. For example: $a = 1; $b =& $a; unset ($a); won’t unset $b, just $a. Again, it might be useful to think about this as analogous to Unix unlink call. Spotting References Many syntax constructs in PHP are implemented via referencing mechanisms, so everything told above about reference binding also apply to these constructs. Some constructs, like passing and returning by-reference, are mentioned above. Other constructs that use references are: 114
  • 187. Capítulo 14. References Explained global References When you declare variable as global $var you are in fact creating reference to a global variable. That means, this is the same as: $var =& $GLOBALS["var"]; That means, for example, that unsetting $var won’t unset global variable. $this In an object method, $this is always reference to the caller object. 115
  • 188. Parte III. Características Capítulo 15. Manejando errores 116
  • 189. Capítulo 15. Manejando errores Existen diferentes tipos de errores y advertencias en PHP. Son los siguientes: Tabla 15-1. Tipos de error PHP Valor Constante Descripción Nota 1 E_ERROR errores fatales en tiempo de ejecución 2 E_WARNING advertencias en tiempo de ejecución (no errores fatales) 4 E_PARSE errores fatales en tiempo de compilación 8 E_NOTICE avisos en tiempo de ejecución (no tan importante como una advertencia) 16 E_CORE_ERROR errores fatales que Solo en PHP 4 ocurren durante el proceso inicial de arranque de PHP 32 E_CORE_WARNING advertencias fatales que Solo en PHP 4 ocurren durante el proceso inicial de arranque de PHP 64 E_COMPILE_ERROR errores fatales en tiempo solo en PHP 4 de compilación 128 E_COMPILE_WARNINGadvertencias en tiempo de Solo en PHP 4 compilación (no errores fatales) 256 E_USER_ERROR mensaje de error Solo en PHP 4 generado por el usuario 512 E_USER_WARNING mensaje de advertencia solo en PHP 4 generado por el usuario 1024 E_USER_NOTICE mensaje de aviso Solo en PHP 4 generado por el usuario E_ALL todos los anteriores, all of the above, según lo soportado Los valores indicados arriba (tanto num$eacute;ricos como simbólicos) son usados para crear una máscara de bits (bitmask) que especifica de los errores que hay que informar. Podeis usar los operadores bitwise para combinar estos valores ó aplicar una máscara a ciertos tipos de errores. Tener en cuenta que que solamente ’|’, ’~’, ’!’, y ’&’ seran interpretados dentro de php.ini y que ningún operador bitwise será interpretado dentro de php3.ini. 117
  • 190. Capítulo 15. Manejando errores En PHP 4, el valor por defecto de error_reporting es E_ALL & ~E_NOTICE, esto siginifica que todos los errores y advertencias que no pertenecen al nivel E_NOTICE, serán presentados cuando ocurran. En PHP 3, el valor por defecto es (E_ERROR | E_WARNING | E_PARSE), teniendo el mismo significado. Tener en cuenta que al no soportar constantes en el fichero de configuración de PHP php3.ini, el valor de error_reporting debe ser numérico, por lo tanto es 7. La configuración inicial puede cambiarse, en el fichero ini con la directiva error_reporting, en el fichero httpd.conf de Apache con la directiva php_error_reporting (php3_error_reporting en PHP 3) y finalmente en tiempo de ejecución desde el script PHP que se este ejecutando, usando la función error_reporting(). Aviso Cuando actualiceis código o servidores de PHP 3 a PHP 4, deberiais comprobar los valores y llamadas a error_reporting() para no deshabilitar los nuevos tipos de mensajes de error, especialmente E_COMPILE_ERROR. Si esto ocurriese podriais obtener documentos vacios sin ningún tipo de mensaje de error ó donde buscar el fallo. Todas las expresioness PHP pueden también ser llamadas con el prefijo "@", el cual desactiva el aviso de errores para esa expresión en particular. Si ocurre un error en una expresión en tal situación y la característica track_errors está habilitada, podrás encontrar el mensaje de error en la variable global $php_errormsg. Nota: El operador de control de errores @ no desactivará mensajes producidos por errores en el parseador. Aviso Actualmente el operador de control de errores @ incluso desactivará mensajes producidos por errores críticos que terminarán la ejecución del script. Entre otras cosas, esto significa que si utilizais @ para suprimir mensajes de error de alguna función, tanto si no está disponible como si contiene algún error, el script quedará interumpido sin ningún tipo de indicación de porque. A continuación tenemos un ejemplo de como manejar errores en PHP. Definimos una función de manejo de errores, la cual registra el error en un fichero (usando el formato XML) y manda un e-mail al programador si un error crítico ocurre. Ejemplo 15-1. Usando el manejo de errores en un script <?php // Los errores los manejamos nosotros error_reporting(0); // funcion de manejos de errores definida por el usuario function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) { 118
  • 191. Capítulo 15. Manejando errores // timestamp for the error entry $dt = date("Y-m-d H:i:s (T)"); // Define una array con los valores de errores // en realidad solamente deberiamos de tener // en cuenta los valores 2,8,256,512 y 1024 $errortype = array ( 1 => "Error", 2 => "Warning", 4 => "Parsing Error", 8 => "Notice", 16 => "Core Error", 32 => "Core Warning", 64 => "Compile Error", 128 => "Compile Warning", 256 => "User Error", 512 => "User Warning", 1024=> "User Notice" ); // errores a tener en cuenta $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); $err = "<errorentry>n"; $err .= "t<datetime>".$dt."</datetime>n"; $err .= "t<errornum>".$errno."</errornum>n"; $err .= "t<errortype>".$errortype[$errno]."</errortype>n"; $err .= "t<errormsg>".$errmsg."</errormsg>n"; $err .= "t<scriptname>".$filename."</scriptname>n"; $err .= "t<scriptlinenum>".$linenum."</scriptlinenum>n"; if (in_array($errno, $user_errors)) $err .= "t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>n"; $err .= "</errorentry>nn"; // Para comprobar // echo $err; // grabar en el fichero de errores y mandar un e-mail si ocurre un error critico de usua error_log($err, 3, "/usr/local/php4/error.log"); if ($errno == E_USER_ERROR) mail("phpdev@example.com","Critical User Error",$err); } function distance ($vect1, $vect2) { if (!is_array($vect1) || !is_array($vect2)) { trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); return NULL; } if (count($vect1) != count($vect2)) { 119
  • 192. Capítulo 15. Manejando errores trigger_error("Vectors need to be of the same size", E_USER_ERROR); return NULL; } for ($i=0; $i<count($vect1); $i++) { $c1 = $vect1[$i]; $c2 = $vect2[$i]; $d = 0.0; if (!is_numeric($c1)) { trigger_error("Coordinate $i in vector 1 is not a number, using zero", E_USER_WARNING); $c1 = 0.0; } if (!is_numeric($c2)) { trigger_error("Coordinate $i in vector 2 is not a number, using zero", E_USER_WARNING); $c2 = 0.0; } $d += $c2*$c2 - $c1*$c1; } return sqrt($d); } $old_error_handler = set_error_handler("userErrorHandler"); //constante no definida, genera una advertencia $t = I_AM_NOT_DEFINED; // definimos algunos vectores $a = array(2,3,"foo"); $b = array(5.5, 4.3, -1.6); $c = array (1,-3); // genera un error de usuario $t1 = distance($c,$b)."n"; // genera otro error de usuario $t2 = distance($b,"i am not an array")."n"; // genera una advertencia $t3 = distance($a,$b)."n"; ?> Este es un ejemplo simple que muestra como utilizar las funciones de manejo de errores y registro. Consultar tambien error_reporting(), error_log(), set_error_handler(), restore_error_handler(), trigger_error(), user_error() 120
  • 193. Capítulo 16. Creando y manipulando imágenes 121
  • 194. Capítulo 16. Creando y manipulando imágenes PHP no está limitado a crear solo salidas de HTML. Puede ser usado también para crear y manipular ficheros de imágenes en diferentes formatos, incluyendo gif, png, jpg, wbmp, y xpm. PHP puede incluso mandar flujos de imágenes directamente al navegador. Necesitais compilar PHP con la biblioteca de funciones de imágenes GD para esta tarea. GD y PHP puede que necesiten otras bibliotecas, dependiendo del formato de imagen con el que querais trabajar. GD dejo de soportar imagenes Gif en la versión 1.6. Ejemplo 16-1. Creación de PNGs con PHP <?php Header("Content-type: image/png"); $string=implode($argv," "); $im = ImageCreateFromPng("images/button1.png"); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImagePng($im); ImageDestroy($im); ?> Este ejemplo será llamado desde una página con una línea como esta: <imgsrc="button.php?text"> Este script de arriba button.php toma esta cadena "text" la situa sobre la imagen base, en este caso es "images/button1.png" y muestra la imagen resultante. Esta es una forma muy conveniente para evitar tener que dibujar un nuevo botón cada vez que quiera cambiar el texto del mismo. Con este método los botones son generados dinámicamente. 122
  • 195. Capítulo 17. Autentificación HTTP con PHP 123
  • 196. Capítulo 17. Autentificación HTTP con PHP Las caracteríticas de autentificación HTTP en PHP solo estan disponibles cuando se está ejecutando como un módulo en Apache y hasta ahora no lo estan en la versión CGI. En un script PHP como módulo de Apache, se puede usar la función header() para enviar un mensaje de "Autentificación requerida" al navegador cliente haciendo que muestre una ventana de entrada emergente con nombre de usuario y contraseña. Una vez que el usuario ha rellenado el nombre y la contraseña, la URL que contiene el script PHP vuelve a ser llamada con las variables $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE rellenas con el nombre de usuario, la contraseña y el tipo de autentificación respectivamente. Sólo autentificación "Básica" esta soportada en este momento. Consulte la función header() para más información. Un fragmento de script de ejmplo que fuerce la autentificación del cliente en una página sería como el siguiente: Ejemplo 17-1. Ejemplo de autentificación HTTP <?php if (!isset($_SERVER[’PHP_AUTH_USER’])) { header("WWW-Authenticate: Basic realm="My Realm""); header("HTTP/1.0 401 Unauthorized"); echo "Text to send if user hits Cancel buttonn"; exit; } else { echo "<p>Hello {$_SERVER[’PHP_AUTH_USER’]}.</p>"; echo "<p>You entered {$_SERVER[’$PHP_AUTH_PW’]} as your password.</p>"; } ?> Nota: Por favor tener cuidado cuando esteis programando las lines de cabecera HTTP. Para garantizar la maxima compatibilidad con todos los clientes, la palabra clave "Basic" debe de ser escrita con "B" mayúscula, la cadena de texto debe estar incluida entre comillas dobles (no simples) y un espacio debe preceder el código "401" en la linea de cabecera "HTTP/1.0 401" En vez de, sencillamente, mostrar $PHP_AUTH_USER y $PHP_AUTH_PW, seguramente querais comprobar la validez del nombre de usuario y la contraseña. Tal vez enviando una consulta a una base de datos o buscando el usuario en un fichero dbm. Vigilar aquí los navegadores Interner Explorer con bugs. Parecen muy quisquillosos con el orden de las cabeceras. Enviar la cabecera WWW-Autentificación antes que la cabecera HTTP/1.0 401 parece ser el truco por ahora. Para prevenir que alguien escriba un script que revele la contraseña de una página que ha sido autentificada a través de algún mecanismo externo tradicional, las variables PHP_AUTH no serán rellenadas si algún tipo de autentificación externo ha sido activado para una página en particular. En este caso, la variable $REMOTE_USER puede ser usada para identificar al usuario autentificado externamente. 124
  • 197. Capítulo 17. Autentificación HTTP con PHP Configuration Note: PHP usa la directiva AuthType para determinar si una autentificación externa esta en uso. Recordar no usar esta directiva cuando querais usar la autentificación de PHP (si no todo intentento de autentificación fallará) Nota, a pesar de todo, lo ya dicho no proteje de que alguien que controle una URL no autentificada robe contraseñas de URLs autentificadas en el mismo servidor. Tanto Netscape como Internet Explorer borrarán la caché de la ventana de autentificación en el navegador local después de recibir una respuesta 401 del servidor. Esto puede usarse, de forma efectiva, para "desconectar" a un usuario, forzandole a reintroducir su nombre y contraseña. Algunas personas usan esto para "hacer caducar" entradas, o para proveer un botón de "desconectar". Ejemplo 17-2. Ejemplo de autentificación HTTP forzando una reentrada <?php function authenticate() { header( "WWW-Authenticate: Basic realm="Test Authentication System""); header( "HTTP/1.0 401 Unauthorized"); echo "You must enter a valid login ID and password to access this resourcen" ; exit; } if (!isset($_SERVER[’PHP_AUTH_USER’]) || ($SeenBefore == 1 && $OldAuth == $_SER VER[’$PHP_AUTH_USER’]))) { authenticate(); } else { echo "<p>Welcome: {$_SERVER[’$PHP_AUTH_USER’]}<br>"; echo "Old: {$_REQUEST[’$OldAuth’]}"; echo "<form action=’{$_SERVER[’$PHP_SELF’]}’ METHOD=’POST’>n"; echo "<input type=’hidden’ name=’SeenBefore’ value=’1’>n"; echo "<input type=’hidden’ name=’OldAuth’ value=’{$_SERVER[’$PHP_AUTH_USER’]}’ >n"; echo "<input type=’submit’ value=’Re Authenticate’>n"; echo "</form></p>n"; } ?> Este comportamiento no es requerido por el estándar de autentificación básica de HTTP, por lo que nunca debe depender de esto. Pruebas con Lynx han demostrado que Lynx no borra las credenciales de autentificación con una respuesta 401 del servidor, por lo que pulsando atrás y después adelante abriría el recurso de nuevo (siempre que los requerimientos de contraseña no hayan cambiado). Además tener en cuanta que esto no funciona usando el servidor IIS de Microsoft y la versión CGI de PHP debido a una limitación del IIS 125
  • 199. Capítulo 18. Cookies PHP soporta transparentemente cookies HTTP. Las Cookies son un mecanismo que sirve para almacenar datos en el navegador del usuario remoto, para así poder identificar al usuario cuando vuelva. Se pueden poner cookies usando la función setcookies(). Las Cookies son parte de la cabecera HTTP, por tanto la función setcookie() debe ser llamada antes de que se produzca cualquier salida al navegador. Esta limitación es la misma a la de la función header(). Se pueden usar las funciones de almacenamiento intermedio del resultado para retrasar el resultado del script hasta que hayas decidido mandar o no una cookie o cabecera. Cualquier cookie enviada a ti desde el cliente, automáticamente se convertirá en una variable PHP igual como ocurre con los métodos de datos GET y POST, dependiendo de las variables de configuración register_globals y variables_order. Si deseas asignar multiples valores a una cookie simple, añade simplemente [] a el nombre de la cookie. En PHP 4.1.0 y posteriores, la array auto-global $_COOKIE será siempre actualizada con cualquier cookie mandada por el cliente. $HTTP_COOKIE_VARS es tambien actualizada en versiones anteriores de PHP cuando la variable de configuración track_vars esté activada. Para más detalles ver la función setcookie(). 127
  • 200. Capítulo 19. Manejo de envío de ficheros 128
  • 201. Capítulo 19. Manejo de envío de ficheros Envío de archivos con el método POST PHP es capaz de recibir envíos de archivo de cualquier navegador que cumpla la norma RFC-1867 (entre los que se incluyen Netscape Navigator 3 o posterior, Microsoft Internet Explorer 3 con un parche o posterior sin éste). Ésta característica permite que los usuarios envien archivos de texto y binarios. Mediante la autentificación y funciones de manejo de archivos de PHP, es posible un control total de quién puede enviar archivos y que se hace con éstos una vez recibidos. Es importante destacar que PHP también soporta el método PUT para envío de archivos tal y como lo utiliza Netscape Composer y el cliente Amaya de W3C. Consulte Soporte del método PUT para más detalles. Una página de envío de archivos se puede crear mediante un formulario parecido a éste: Ejemplo 19-1. Formulario de envío de archivo <form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> La _URL_ debe tener como destino un script PHP. El input oculto MAX_FILE_SIZE debe encontrarse antes del input de tipo "file" para indicar el tamaño máximo de archivo que se puede enviar en bytes Aviso MAX_FILE_SIZE debe ser consultado por el navegador; aun así es sencillo saltarse este máximo por lo tanto no se debe presuponer que el navegador siempre lo respetará. En contrapartida, la configuracion de PHP relativa al tamaño maximo no puede ser obviada. Las variables definidas para los archivos enviados varian en función de la versión y configuración de PHP que se utilice. Las variables de las que hablamos a continuación serán definidas en la página destino despues de una recepción de fichero correcta. Cuando track_vars este activado, el array $HTTP_POST_FILES/$_FILES se inicializará. Por ultimo, las variables relacionadas seran inicializadas como globales cuando register_globals esté habilitado. Cabe señalar que el uso de las variables globales no esta recomendado en ningún caso. Nota: track_vars esta activado siempre desde PHP 4.0.3. A partir de PHP 4.1.0 , $_FILES puede ser utilizado alternativamente a $HTTP_POST_FILES. $_FILES es siempre global asi que global no debe ser usado con $_FILES en el ámbito de función. $HTTP_POST_FILES/$_FILES contienen la información sobre el fichero recibido. 129
  • 202. Capítulo 19. Manejo de envío de ficheros A continuación se describe el contenido de $HTTP_POST_FILES. Se ha tomado el nombre ’userfile’ para el fichero recibido tal y como se usaba en el script de ejemplo anterior: $HTTP_POST_FILES[’userfile’][’name’] El nombre original del fichero en la máquina cliente. $HTTP_POST_FILES[’userfile’][’type’] El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser "image/gif". $HTTP_POST_FILES[’userfile’][’size’] El tamaño en bytes del fichero recibido. $HTTP_POST_FILES[’userfile’][’tmp_name’] El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido. Nota: A partir de PHP 4.1.0 se puede utilizar el variable corta $_FILES. PHP 3 no soporta $HTTP_POST_FILES. Cuando register_globals se activa en el php.ini las siguientes variables son accesibles. Se ha tomado el nombre ’userfile’ para el fichero recibido tal y como se usaba en el script de ejemplo del principio: • $userfile - El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido. • $userfile_name - El nombre original del fichero en la máquina cliente. • $userfile_size - El tamaño en bytes del fichero recibido. • $userfile_type - El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser "image/gif". Se puede ver que "$userfile" (en las variables anteriores) toma el valor del atributo "name" que contenga el campo <input> de tipo "file" del formulario de envio. En el ejemplo anterior, elegimos llamarlo "userfile". Nota: register_globals = On se desaconseja por razones de seguridad y rendimiento. Por defecto, los ficheros serán almacenados en el directorio temporal por defecto del servidor a no ser que se especifique otra localizacion con la directiva upload_tmp_dir en php.ini. El directorio temporal por defecto del servidor puede ser modificado cambiando el valor de la variable de entorno TMPDIR en el contexto en que se ejecuta PHP La configuración de las variables de entorno no se puede realizar en PHP a través de la función putenv(). Esta variable de entorio puede ser utilizada también para asegurarnos que otras operaciones con archivos recibidos están funcionando correctamente. 130
  • 203. Capítulo 19. Manejo de envío de ficheros Ejemplo 19-2. Verificando los archivos recibidos Los siguientes ejemplos son validos para versiones de PHP 4 superiores a la 4.0.2. Veanse las funciones is_uploaded_file() y move_uploaded_file(). <?php // In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES. if (is_uploaded_file($HTTP_POST_FILES[’userfile’][’tmp_name’])) { copy($HTTP_POST_FILES[’userfile’][’tmp_name’], "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES[’userfile’][’name’]; } /* ...or... */ move_uploaded_file($HTTP_POST_FILES[’userfile’][’tmp_name’], "/place/to/put/uploaded/file"); ?> El script PHP que recibe el fichero, debe implementar la lógica necesaria para determinar que debe ser realizado con el fichero. Se puede utilizar, por ejemplo, la variable $HTTP_POST_FILES[’userfile’][’size’] para descartar los ficheros demasiado chicos o demasiado grandes; por otro lado, se puede usar la variable $HTTP_POST_FILES[’userfile’][’type’] para descartar los que no se ajusten a algun criterio de tipo. Cualquiera que sea la logica que utilicemos, se debe borrar o mover el archivo del directorio temporal. El archivo será borrado del directorio temporal al final de la petición si no se ha movido o renombrado. Errores comunes A MAX_FILE_SIZE no se le puede dar un valor mayor que el valor que se haya especificado en la directivaupload_max_filesize. Por defecto se tiene un límite de 2 MegaBytes. Si se ha activado el límite de memoria, se deben especificar un valor alto para memory_limit. En cualquier caso, se debe asegurar un valor suficientemente grande para memory_limit. Si max_execution_time tiene un valor muy pequeño, la ejecución del script puede exceder este valor. De esta forma, se debe asegurar un valor suficientemente grande para max_execution_time. Si post_max_size< tiene un valor muy pequeño, los ficheros mas grandes a este valor, no podrán ser enviados. Por ello, se debe asegurar un valor suficientemente grande para post_max_size. No verificar que ficheros se estan manipulando puede tener como consecuencia que los usuarios puedan acceder a información sensible en otros directorios. Cabe señalar que el httpd de CERN parece cortar todo a partir del primer espacio en blanco en el "content-type" de la cabecera mime que obtiene del cliente. Si este es el caso, con el httpd de CERN no se soporta la funcionalidad de envío de ficheros. 131
  • 204. Capítulo 19. Manejo de envío de ficheros Envío de multiples ficheros Se pueden enviar multiples ficheros usando diferentes nombres (name) para los input. Así mismo, es posible enviar varios archivos simultaneamente y tener organizada en arrays la información. Para hacer esto, se utiliza la misma sintáxis que cuando tenemos multiples "selects" o "checkboxes" en el formulario HTML: Nota: El soporte para envío multiple de ficheros fue añadido en la versión 3.0.10. Ejemplo 19-3. Envío de multiples ficheros <form action="file-upload.php" method="post" enctype="multipart/form-data"> Send these files:<br> <input name="userfile[]" type="file"><br> <input name="userfile[]" type="file"><br> <input type="submit" value="Send files"> </form> Cuando el formulario del ejemplo es enviado, los arrays $HTTP_POST_FILES[’userfile’], $HTTP_POST_FILES[’userfile’][’name’] y $HTTP_POST_FILES[’userfile’][’size’] son inicializados. Así mismo pasa con $_FILES en PHP 4.1.0 o superiores y $HTTP_POST_VARS en PHP 3. Cuando register_globals esta activa, las variables globales para los archivos recibidos también son inicializadas. Cada uno de estos arrays tendrá en los índices numericos correspondientes los valores para cada fichero recibido. Por ejemplo, si tomamos como nombres de archivo enviados /home/test/review.html y /home/test/xwp.out. Tendríamos en $HTTP_POST_FILES[’userfile’][’name’][0] el valor de review.html, y en $HTTP_POST_FILES[’userfile’][’name’][1] tendríamos xwp.out; analogamente, $HTTP_POST_FILES[’userfile’][’size’][0] contendría el tamaño del fichero review.html, y asi sucesivamente... $HTTP_POST_FILES[’userfile’][’name’][0], $HTTP_POST_FILES[’userfile’][’tmp_name’][0], $HTTP_POST_FILES[’userfile’][’size’][0] y $HTTP_POST_FILES[’userfile’][’type’][0] tambien son asignadas. 132
  • 205. Capítulo 19. Manejo de envío de ficheros Soporte del método PUT PHP soporta el metodo HTTP PUT que usan aplicaciones como Netscape Composer y Amaya del W3C. Las peticiones PUT son más sencillas que el método POST. Un ejemplo: PUT /path/filename.html HTTP/1.1 Esto normalmente significaría que el cliente remoto quiere salvar el contenido como: /path/filename.html en tu árbol web. Lógicamente no una buena idea que la gente pueda escribir en tu árbol web. Para manipular esta petición debes decirle al servidor que esta petición sea atendida por un script PHP. En Apache, por ejemplo, se utiliza para esto la directiva Script en los alguno de los archivos de configuración del servidor. Un sitio típico de uso es dentro del bloque &lt;Directory&gt; o quizás en el bloque &lt;Virtualhost&gt;. Una linia así deberia hacer ésta función: Script PUT /put.php Ésto le dice a Apache que envíe todas peticiones PUT para URIs que contengan esta linia al script put.php. Se asume que PHP se encuentra activo y con la extensión .php enlazada a él. Dentro del script put.php3 se podría implementar algo así: <?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?> Esto copiaría el archivo a la localización requerida por el cliente remoto. Aqui se pueden ejecutar funciones de autentificación de usuario o cualquier otro tipo de chequeo. El archivo se guarda en el archivo temporal del sistema servidor de la misma manera que el Método POST. Cuando la petición finaliza, el archivo temporal es eliminado. En consequencia el script dede proceder al trato de éste inmediatamente, ya sea para copiarlo, renombrarlo, etc. El archivo se encuentra en la variable $PHP_PUT_FILENAME, y el destino sugerido por el cliente en la variable $REQUEST_URI (puede variar en servidores web que no sean Apache). No es necesario hacer caso al destino sugerido por el cliente. Por ejemplo se podrían copiar los archivos enviados a directorios especialmente designados para esta tarea. 133
  • 206. Capítulo 20. Usando archivos remotos 134
  • 207. Capítulo 20. Usando archivos remotos Siempre que el soporte para la "envoltura URL fopen" esté habilitado cuando se configura PHP (lo cual ocurre a menos que se pasa explícitamente la opción --disable-url-fopen-wrapper a configure (para versiones hasta la 4.0.3), ó configurar como "off" el parámetro allow_url_fopen en php.ini (para las nuevas versiones)) se pueden usar URLs HTTP y FTP con la mayoría de las funciones que toman un archivo como parámetro, incluyendo las sentencias require() e include(). Nota: La versión actual de PHP para Windows no soporta el acceso remoto a ficheros en las siguientes funciones: include(), include_once(), require() y require_once(). Por ejemplo, se puede usar este para abrir un archivo en un servidor web remoto, analizar en la salida la información que se quiera, y entonces, usar la información en una consulta a base de datos, o simplemente para sacarlas en un estilo que coincida con el resto de su sitio web. Ejemplo 20-1. Obtener el título de una página remota <?php $file = fopen ("http://www.example.com/", "r"); if (!$file) { echo "<p>Unable to open remote file.n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); /* This only works if the title and its tags are on one line */ if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?> También se puede escribir a archivos en un FTP siempre que se conecte como un usuario con los correctos derechos de acceso, y el archivo no exista ya.Para conectar como un usuario distinto de ’anonymous’, se necesita especificar el nombre de usuario (y posiblemente contraseña) dentro de la URL, tales como ’ftp://usuario:clave@ftp.ejemplo.com/camino/a/archivo’. (Se puede usar la misma clase de sintaxis para acceder a archivos via HTTP cuando se requería una autenticació de same sort of syntax to access files via HTTP when they require Basic authentication.) 135
  • 208. Capítulo 20. Usando archivos remotos Ejemplo 20-2. Almacenando datos en un servidor remoto <?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) { echo "<p>Unable to open remote file for writing.n"; exit; } /* Write the data here. */ fputs ($file, $HTTP_SERVER_VARS[’HTTP_USER_AGENT’] . "n"); fclose ($file); ?> Nota: Podeis captar la idea en el ejemplo anterior de como escribir en un registro remoto, pero como ya hemos comentado antes, solamente se puede escribir a un fichero nuevo usando la "envoltura URL fopen" Para registros distribuidos, consultar la función syslog(). 136
  • 209. Capítulo 21. Manejando conexiones 137
  • 210. Capítulo 21. Manejando conexiones Nota: Todo lo siguiente se aplica a partir de la versión 3.0.7 y posterior. Internamente en PHP se mantiene el estado de la conexión. Hay 3 posibles estados: • 0 - NORMAL • 1 - ABORTED (Abortado) • 2 - TIMEOUT (Fuera de tiempo) Cuando un script PHP se está ejecutando se activa el estado NORMAL. Si el cliente remoto se desconecta, se pasa al estado ABORTED. Esto suele ocurrir cuando el usuario pulsa en el botón STOP del navegador. Si se alcanza el límite de tiempo impuesto por PHP (ver set_time_limit()), se pasa al estado TIMEOUT. Puedes decidir si quieres que la desconexión de un cliente cause que tu script sea abortado. Algunas veces es cómodo que tus scripts se ejecuten por completo, incluso si no existe ya un navegador remoto que reciba la salida. El comportamiento por defecto es sin embargo, que tu script se aborte cuando el cliente remoto se desconecta. Este comportamiento puede ser configurado vía la directiva ignore_user_abort en el fichero php3.ini, o también con la función ignore_user_abort(). Si no le espeficicas al PHP que cuando un usuario aborte lo ignore, tu script terminará su ejecución. La única excepción es si tienes registrada un función de desconexión usando la función register_shutdown_function(). Con una función de desconexión, cuando un usuario remoto pulsa en el botón STOP, la próxima vez que tu script intenta mostrar algo, PHP detecta que la conexión ha sido abortada y se llama a la función de desconexión. Esta función de desconexión también se llama al final de la ejecución de tu script cuando se ha ejecutado normalmente, de manera que si quieres hacer algo diferente en caso de que un cliente se haya desconectado, puedes usar la función connection_aborted(). Esta función devuelve TRUE si la conexión fue abortada. Vuestro script también se puede terminar por un temporizador interno. El timeout por defecto es de 30 segundos. Se puede cambiar usando la directiva max_execution_time en el fichero php.ini o la correspondiente directiva php_max_execution_time en la configuración del servidor de páginas Apache, como también con la función set_time_limit(). Cuando el temporizador expira, el script se aborta como en el caso de la desconexión del cliente, de manera que si se ha definido una función de desconexión, esta se llamará. Dentro de esta función de desconexión, puedes comprobar si fue el timeout el que causó que se llamara a la función de desconexión, llamando a la función connection_timeout(). Esta función devolverá verdadero si el timeout causa que se llame a la función de desconexión. Hay que destacar que ambos, el estado ABORTED y el TIMEOUT, se pueden activar al mismo tiempo. Esto es posible si le dices a PHP que ignore las desconexiones intencionadas de los usuarios. PHP aún notará el hecho de que el usuario puede haberse desconectado, pero el script continuará ejecutándose. Si se alcanza el tiempo límite de ejecución será abortado y, si se ha definido una función de desconexión, esta será llamada. En este punto, encontrarás que las funciones connection_timeout() y connection_aborted() devuelven verdadero. Puedes comprobar ambos estados de una manera simple usando la función connection_status(). Esta función devuelve un campo de bit de los estados activos. De este modo, si ambos estados están activos devolvería por ejemplo un valor 3. 138
  • 211. Capítulo 22. Conexiones persistentes a bases de datos 139
  • 212. Capítulo 22. Conexiones persistentes a bases de datos Las conexiones persistentes son enlaces SQL que no se cierran cuando termina la ejecución del archivo de comandos. Cuando se pide una conexión persistente, PHP comprueba si hay ya una conexión persistente idéntica (que permanecía abierta desde antes) - y si existe, la usa. Si no existe, crea un enlace. Una conexión ’idéntica’ es una conexión que se abrió hacia el mismo "host", con el mismo nombre de usuario y la misma contraseña (donde sea aplicable). Nota: Existen otras extensiones que proporcionan conexiones persistentes, tal como la extensión IMAP La gente que no está familiarizada con el modo como trabajan y distribuyen la carga los servidores "web" puede confundir que significa conexiones persistentes. En particular, no te dan la habilidad de abrir ’sesiones de usuario’ en el mismo enlace SQL, no dan la habilidad de construir una transacción de forma eficiente, y no hacen un montón de otras cosas. De hecho, para ser extremadamente claros sobre el tema las conexiones persistentes no te dan ninguna functionalidad que no fuera posible con sus hermanas no-persistentes. ¿Por qué? Esto tiene que ver con el modo como funcionan los servidores "web". Hay tres modos en que un servidor "web" puede utilizar PHP para generar páginas web. El primer método es usar PHP como una capa CGI. Cuando corre de este modo, se crea y destruye una instancia del intérprete PHP por cada página solicitada (para una página PHP) a tu servidor. Debido a que se destruye después de cada petición, cualquier recurso que adquiera (como un enlace a un servidor de base de datos SQL) se cierra cuando es destruido. En este caso, no se gana nada si se intentan usar conexiones persistentes, ya que simplemente no persisten. El segundo, y más popular, método es correr PHP como un módulo en un servidor web multiproceso, lo cual actualmente sólo incluye Apache. Un servidor multiproceso tiene típicamente un proceso (el padre) que coordina un conjunto de procesos (sus hijos) que realmente hacen el trabajo se servir las páginas web. Cuando entra cada petición de un cliente, es entregada a uno de los hijos que no esté ya sirviendo a otro cliente. Esto significa que cuando el mismo cliente hace una segunda petción al servidor, puede ser atendido por un proceso hijo distinto del de la primera vez. Lo que una conexión persistente hace por ti en este caso es hacerlo de tal modo que cada proceso hijo sólo necesita conectar a tu SQL server la primera vez que sirve una página que hace uso de una conexión así. Cuando otra página solicita una conexión a SQL server, puede reutilizar la conexión que el hijo estableció previamente. El último método es usar PHP como un "plug-in" para un servidor web multihilo. En la actualidad es solamente teórico -- PHP no funciona aún como "plug-in" para ningún servidor web multihilo. Actualmente PHP 4 soporta ISAPI, WSAPI y NSAPI (en Windows), lo cual permite a PHP ser utilizado como "plug-in" para servidores web multihilo como Netscape FastTrack, Internet Information Server (IIS) de Microsoft, y O’Reilly’s WebSite Pro. El comportamiento es exactamente el mismo que para el modelo de multiprocesador descrito anteriormente. Tener en cuanta que el soporte para SAPI no está disponible en PHP 3. Si las conexiones persistentes no aportan ninguna funcionalidad añadida, ¿para qué son buenas? La respuesta aqui es extremadamente simple -- eficiencia. Las conexiones persistentes son buenas si las cabeceras de control para crear un enlace a tu servidor SQL es alta. Que estas cabeceras sean o no realmente altas depende de muchos factores. Como, qué clase de base de datos es, si esta o no situada en el mismo ordenador que el servidor web, cómo está de cargada la máquina donde se encuentre el 140
  • 213. Capítulo 22. Conexiones persistentes a bases de datos servidor SQL, y otras así. El hecho fundamental es que si la cabecera de conexión es alta, las conexiones persistentes te ayudan considerablemente . Ellas hacen que el proceso hijo simplemente conecte solamente una vez durante todo su intervalo de vida, en vez de cada vez que procesa una pagina que requiere conectar al servidor SQL. Esto significa que por cada hijo que abrió una conexión persistente tendrá su propia conexión persistente al servidor. Por ejemplo, si tienes 20 procesos hijos distintos que corran un archivo de comandos que cree una conexión persistente a tu servidor SQL, tendrías 20 conexiones diferentes a ti servidor SQL, una por cada hijo. No obstante, hay que tener en cuenta que esto puede tener desventajas si estais utilizando una base de datos con límites de conexión, por debajo del numero de procesos hijo con conexiones persistentes. Si tu base de datos tiene un límite de 16 conexiones simultaneas y en el curso de una sesión de servidor, 17 procesos hijo intentan conectarse, uno de ellos no podrá hacerlo. Si existen errores en los scripts, que no permitan terminar la conexion (p.ej.bucles infinitos), una base de datos con solo 32 conexiones puede ser rápidamente hundida. Comprobar la documentacion de vuestra base de datos para obtener información sobre que hacer con conexiones abandonadas ó libres. Aviso Un par de advertencias más a tener en cuenta cuando utiliceis conexiones persistentes. La primera, si utilizais bloqueos en una tabla desde una conexión persistente y por cualquier causa el script no puede desbloquear la tabla, todos los scripts posteriores que usen esta conexión, quedarán bloqueados indefinídamente y se requerirá que, ó bien el servidor httpd ó la base de datos sean arrancados de nuevo. La segunda, cuando utiliceis transacciones, un bloqueo por transacción será heredado por el próximo script usando la conexión, si la ejecución del primer script termina antes que el bloqueo. en ambos caso podeis utilizar register_shutdown_function() para registrar una funcion simple de limpieza que desbloquee las tablas ó deshaga la transacción. Lo mejor para evitar problemas es no usar conexiones persistentes en scripts que usen bloqueos de tablas ó transacciones (para todolo demás pueden ser usadas sin problemas) Un resumen importante. Las conexiones persistentes fueron diseñadas para tener una equivalencia uno-a-uno con las conexiones normales. Eso significa que deberíais siempre ser capaz de reemplazar las conexiones persistentes por conexiones no persistentes y no cambiará, el modo como se comporta el archivo de comandos. Puede cambiar la eficiencia del archivo de comandos (y probablemete lo hará), ¡pero no su comportamiento! 141
  • 214. Capítulo 23. Modo Seguro (Safe Mode) 142
  • 215. Capítulo 23. Modo Seguro (Safe Mode) El Modo Seguro de PHP es un intento para resolver el problema de la seguridad en un servidor compartido. Tratar de resolver este problema al nivel de PHP es arquitectónicamente incorrecto, pero ya que las alternativas en un servidor web y a niveles de sistemas operativos no son tan realistas, mucha gente, especialmente la de proveedores de Internet (ISP), usa el Modo Seguro por ahora. Tabla 23-1. Las directivas de Configuración que controlan el Modo Seguro son: Directiva Valor por Omisión safe_mode Off safe_mode_gid 0 safe_mode_include_dir "" safe_mode_exec_dir 1 open_basedir "" safe_mode_allowed_env_vars PHP_ safe_mode_protected_env_vars LD_LIBRARY_PATH disable_functions "" Cuando safe_mode está en On, el PHP verifica si el dueño del script actual coincide con el dueño del fichero a ser operado por una función de fichero. Por ejemplo: -rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd Corriendo este script.php <?php readfile(’/etc/passwd’); ?> resulta in este error cuando Modo Seguro está habilitado: Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2 Sin embargo, pueden haber ambientes donde una estricta verificación del UID no es apropiada, y una relajada verificación del GID es suficiente. Esto es soportado por medio del switch safe_mode_gid. 143
  • 216. Capítulo 23. Modo Seguro (Safe Mode) Seteándolo a On hace la verificación relajada GID, seteándolo a Off (el valor por omisión) hace la verificación del UID. Si en vez del safe_mode, Ud. setea un directorio open_basedir, entonces todas las operaciones de fichero estarán limitadas a los ficheros bajo ese directorio especificado. Por ejemplo (ejemplo de httpd.conf de Apache): <Directory /docroot> php_admin_value open_basedir /docroot </Directory> Si Ud. corre el mismo script.php con este seteo open_basedir, entonces este es el resultado: Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2 Ud. también puede inhabilitar funciones individuales. Note que la directiva disable_functions no puede ser usada fuera del fichero php.ini lo que significa que Ud. no puede inhabilitar funciones en los principios per-virtualhost o per-directory en su fichero httpd.conf. Si agregamos esto a nuestro fichero php.ini: disable_functions readfile,system Entonces obtenemos esta salida: Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2 Funciones restringidas/inhabilitadas por Modo Seguro Esta es una lista probablemente incompleta y posiblemente incorrecta de las funciones limitadas por safe mode. Tabla 23-2. Funciones limitadas por Modo Seguro 144
  • 217. Capítulo 23. Modo Seguro (Safe Mode) Función Limitaciones dbmopen() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. dbase_open() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. filepro() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. filepro_rowcount() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. filepro_retrieve() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. ifx_*() restricciones sql_safe_mode, (!= safe mode) ingres_*() restricciones sql_safe_mode, (!= safe mode) mysql_*() restricciones sql_safe_mode, (!= safe mode) pg_loimport() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. posix_mkfifo() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. putenv() Obecede las ini-directivas safe_mode_protected_env_vars y safe_mode_allowed_env_vars. Vea también la documentación de putenv() move_uploaded_file() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. chdir() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. 145
  • 218. Capítulo 23. Modo Seguro (Safe Mode) Función Limitaciones dl() Esta función no está activada en safe-mode (modo-seguro) backtick operator Esta función no está activada en safe-mode (modo-seguro) shell_exec() (equivalencia funcional de backticks) Esta función no está activada en safe-mode (modo-seguro) exec() Ud. puede correr sólo ejecutables dentro delsafe_mode_exec_dir. Por razones prácticas, no está actualmente permitido tener componentes .. en la ruta del fichero ejecutable. system() Ud. puede correr sólo ejecutatables dentro delsafe_mode_exec_dir. Por razones prácticas, no está actualmente permitido tener componentes .. en la ruta del fichero ejecutable. passthru() Ud. puede correr sólo ejecutatables dentro delsafe_mode_exec_dir. Por razones prácticas, no está actualmente permitido tener componentes .. en la ruta del fichero ejecutable. popen() Ud. puede correr sólo ejecutatables dentro delsafe_mode_exec_dir. Por razones prácticas, no está actualmente permitido tener componentes .. en la ruta del fichero ejecutable. mkdir() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. rmdir() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. rename() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. 146
  • 219. Capítulo 23. Modo Seguro (Safe Mode) Función Limitaciones unlink() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. copy() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. (en source y target) chgrp() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. chown() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. chmod() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Además, Ud. no puede setear los bits de SUID, SGID y sticky touch() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. 147
  • 220. Capítulo 23. Modo Seguro (Safe Mode) Función Limitaciones symlink() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. (Nota: sólo el target es comprobado) link() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. (Nota: sólo the target es comprobado) getallheaders() En Modo Seguro, las cabeceras que empiezan con ’authorization’ (insensitivo al tipo de letra) no serán retornadas. Advertencia: esto está roto por la implementación de aol-server de getallheaders()! header() En Modo Seguro, el UID del script está agregado a la parte realm de la cabecera WWW-Authenticate si Ud. setea esta cabecera (usado por HTTP Authentication). highlight_file(), show_source() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. (Nota: sólo afectado desde PHP 4.2.1) parse_ini_file() Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si el fichero(s)/directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. Nota: Cuando safe-mode (modo-seguro) está activado, PHP comprueba si los directorios que vas a utilizar, tienen la misma UID que el script que está siendo ejecutado. (Nota: sólo afectado desde PHP 4.2.1) Cualquier función que usa ?? php4/main/fopen_wrappers.c 148
  • 221. Capítulo 24. Using PHP from the command line 149
  • 222. Capítulo 24. Using PHP from the command line Since version 4.3, PHP supports a new SAPI type (Server Application Programming Interface) named CLI which means Command Line Interface. As the name implies, this SAPI type main focus is on developing shell (or desktop as well) applications with PHP. There are quite some differences between the CLI SAPI and other SAPIs which are further explained throughout this chapter. The CLI SAPI was released for the first time with PHP 4.2.0, but was still experimental back then and had to be explicitely enabled with --enable-cli when running ./configure. Since PHP 4.3.0 the CLI SAPI is no longer experimental and is therefore always built and installed as the php (called php.exe on Windows) binary. Remarkable differences of the CLI SAPI compared to other SAPIs: • Unlikely the CGI SAPI, no headers are written to the output. Though the CGI SAPI provies a way to suppress HTTP headers, there’s not equivalent switch to enable them in the CLI SAPI. • The are certain php.ini directives which are overriden by the CLI SAPI because the do not make sense in shell environments: Tabla 24-1. Overriden php.ini directives Directive CLI SAPI default value Comment html_errors FALSE It can be quite hard to read the error message in your shell when it’s cluttered with all those meaningless HTML tags, therefore this directive defaults to FALSE. implicit_flush TRUE It is desired that any output coming from print(), echo() and friends is immidiately written to the output and not cached in any buffer. You still can use output buffering if you want to defer or manipulate standard output. max_execution_time 0 (unlimited) Due to endless possibilities of using PHP in shell environments, the maximum execution time has been set to unlimited. Whereas applications written for the web are executed within splits of a seconds, shell application tend to have a much longer execution time. 150
  • 223. Capítulo 24. Using PHP from the command line Directive CLI SAPI default value Comment register_argc_argv TRUE The global PHP variables $argc (number of arguments passed to the application) and $argv (array of the actual arguments) are always registered and filled in with the appropriate values when using the CLI SAPI. Nota: These directives cannot be initialzied with another value from the configuration file php.ini or a custom one (if specified). This is a limitation because those default values are applied after all configuration files have been parsed. However, their value can be changed during runtime (which does not make sense for all of those directives, e.g. register_argc_argv). • To ease working in the shell environment, the following constants are defined: Tabla 24-2. CLI specific Constants Constant Description STDIN An already opened stream to stdin. This saves open- ing it with $stdin = fopen(’php://stdin’, ’r’); STDOUT An already opened stream to stdout. This saves opening it with $stdout = fopen(’php://stdout’, ’w’); STDERR An already opened stream to stdout. This saves opening it with $stderr = fopen(’php://stderr’, ’w’); Given the above, you don’t need to open e.g. a stream for stderr yourself but simply use the constant instead of the stream resource: php -r ’fwrite(STDERR, "stderrn");’ You do not need to explicitly close these streams, this is automatically done by PHP. • The CLI SAPI does not change the current directory to the directory of the executed script ! Example showing the difference to the CGI SAPI: <?php /* Our simple test application */ 151
  • 224. Capítulo 24. Using PHP from the command line echo getcwd(), "n"; ?> When using the CGI version, the output is $ pwd /tmp $ php-cgi -f another_directory/test.php /tmp/another_directory This clearly shows that PHP changes its current directory to the one of the executed script. Using the CLI SAPI yields: $ pwd /tmp $ php -f another_directory/test.php /tmp This allows greater flexibility when writing shell tools in PHP. Nota: The CGI SAPI supports the CLI SAPI behaviour by means of the -C switch when ran from the command line. The list of command line options provided by the PHP binary can be queried anytime by running PHP with the -h switch: Usage: php [options] [-f] <file> [args...] php [options] -r <code> [args...] php [options] [-- args...] -s Display colour syntax highlighted source. -w Display source with stripped comments and whitespace. -f <file> Parse <file>. -v Version number -c <path>|<file> Look for php.ini file in this directory -a Run interactively -d foo[=bar] Define INI entry foo with value ’bar’ -e Generate extended information for debugger/profiler -z <file> Load Zend extension <file>. 152
  • 225. Capítulo 24. Using PHP from the command line -l Syntax check only (lint) -m Show compiled in modules -i PHP information -r <code> Run PHP <code> without using script tags <?..?> -h This help args... Arguments passed to script. Use -- args when first argument starts with - or script is read from stdin The CLI SAPI has three different ways of getting the PHP code you want to execute: 1. Telling PHP to execute a certain file. php my_script.php php -f my_script.php Both ways (using the -f switch or not) execute the given file my_script.php. You can choose any file to execute, your PHP scripts do not have to end with the .php extension but can give them any name or extension you want them to have. 2. Pass the PHP code to execute directly on the command line. php -r ’print_r(get_defined_constants());’ Special care has to be taken in regards of shell variable substitution and quoting usage. Nota: Read the example carefully, thera are no beginning or ending tags! The -r switch simply does not need them. Using them will lead to a parser error. 3. Provide the PHP code to execute via standard input (stdin). This gives the powerful ability to dynamically create PHP code and feed it to the binary, as shown in this (fictional) example: $ some_application | some_filter | php | sort -u >final_output.txt 153
  • 226. Capítulo 24. Using PHP from the command line You cannot combine any of the three ways to execute code. Like every shell application, the PHP binary accepts a number of arguments but also your PHP script can receive them. The number of arguments which can be passed to your script is not limited by PHP (the shell has a certain size limit in numbers of characters which can be passed; usually you won’t hit this limit). The arguments passed to your script are available in the global array $argv. The zero index always contains the script name (which is - in case the PHP code is coming from either standard input or from the command line switch -r). The second registered global variable is $argc which contains the number of elements in the $argv array (not the number of arguments passed to the script). As long as the arguments you want to pass to your script do not start with the - character, there’s nothing special to watch out for. Passing an argument to your script which starts with a - will cause trouble because PHP itself thinks it has to handle it. To prevent this use the argument list separator --. After the argument has been parsed by PHP, every argument following it is passed untoched/unparsed to your script. # This will not execute the given code but will show the PHP usage $ php -r ’var_dump($argv);’ -h Usage: php [options] [-f] <file> [args...] [...] # This will pass the ’-h’ argument to your script and prevent PHP from showing it’s usage $ php -r ’var_dump($argv);’ -- -h array(2) { [0]=> string(1) "-" [1]=> string(2) "-h" } However, there’s another way of using PHP for shell scripting. You can write a script where the first line starts with #!/usr/bin/php and then following the normal PHP code included within the PHP starting and end tags and set the execution attributes of the file appropriately. This way it can be executed like a normal shell or perl script: #!/usr/bin/php <?php var_dump($argv); ?> Assuming this file is named test in the current directory, we can now do the following: $ chmod 755 test $ ./test -h -- foo 154
  • 227. Capítulo 24. Using PHP from the command line array(4) { [0]=> string(6) "./test" [1]=> string(2) "-h" [2]=> string(2) "--" [3]=> string(3) "foo" } As you see no care has to be taken when passing parameters to your script which start with -. Tabla 24-3. Command line options Option Description -s Display colour syntax highlighted source. This option uses the internal mechanism to parse the file and produces a HTML highlighted version of it and writes it to standard output. Note that all it does it to generate a block of <code> [...] </code> HTML tags, no HTML headers. Nota: This option does not work together with the -r option. -w Display source with stripped comments and whitespace. Nota: This option does not work together with the -r option. -f Parses and executed the given filename to the -f option. This switch is optional and can be left out. Only providing the filename to execute is sufficient. -v Writes the PHP, PHP SAPI, and Zend version to stan- dard output, e.g. $ php -v PHP 4.3.0-dev (cli), Copyright (c) 1997- 2002 The PHP Group Zend Engine v1.2.1, Copyright (c) 1998- 2002 Zend Technologies 155
  • 228. Capítulo 24. Using PHP from the command line Option Description -c With this option one can either specify a directory where to look for php.ini or you can specify a custom INI file directly (which does not need to be named php.ini), e.g.: $ php -c /custom/directory/ my_script.php $ php -c /custom/directory/custom-file.ini my_script -a Runs PHP interactively. -d This option allows to set a custom value for any of the configuration directives allowed in php.ini. The syn- tax is: -d configuration_directive[=value] Examples: # Ommiting the value part will set the given con- figuration directive to "1" $ php -d max_execution_time -r ’$foo = ini_get("max_e string(1) "1" # Passing an empty value part will set the con- figuration directive to "" php -d max_execution_time= -r ’$foo = ini_get("max_ex string(0) "" # The configuration directive will be set to any- thing passed after the ’=’ character $ php -d max_execution_time=20 -r ’$foo = ini_get("m string(2) "20" $ php -d max_execution_time=doesntmakesense - r ’$foo = ini_get("max_execution_time"); var_dump($fo string(15) "doesntmakesense" -e Generate extended information for debugger/profiler. 156
  • 229. Capítulo 24. Using PHP from the command line Option Description -z Load Zend extension. If only a filename is given, PHP tries to load this extension from the current default library path on your system (usually specified /etc/ld.so.conf on Linux systems). Passing a filename with an absolute path information will not use the systems library search path. A relative filename with a directory information will tell PHP only to try to load the extension relative to the current directory. -l This option provides a convenient way to only perform a syntax check on the given PHP code. On succes, the text No syntax errors detected in <filename> is written to standard output and the shell return code is 0. On failure, the text Errors parsing <filename> in addition to the internal parser error message is written to standard output and the shell return code is set to 255. This option won’t find fatal errors (like undefined functions). Use -f if you would like to test for fatal errors too. Nota: This option does not work together with the -r option. -m Using this option, PHP prints out the built in (and loaded) PHP and Zend modules: $ php -m [PHP Modules] xml tokenizer standard session posix pcre overload mysql mbstring ctype [Zend Modules] 157
  • 230. Capítulo 24. Using PHP from the command line Option Description -i This command line option calls phpinfo(), and prints out the results. If PHP is not working well, it is advisable to make a php -i and see if any error messages are printed out before or in place of the information tables. Beware that the output is in HTML and therefore quite huge. 158
  • 231. Capítulo 24. Using PHP from the command line Option Description -r This option allows execution of PHP right from within the command line. The PHP start and end tags (<?php and ?>) are not needed and will cause a parser errors. Nota: Care has to be taken when using this form of PHP to not collide with command line variable substitution done by the shell. Example showing a parser error $ php -r "$foo = get_defined_constants();" Command line code(1) : Parse error - parse er- ror, unexpected ’=’ The problem here is that the sh/bash performs variable substritution even when using double quotes ". Since the variable $foo is unlikely to be defined, it expands to nothing which results in being the code passed to PHP for executin in fact reads: $ php -r " = get_defined_constants();" The correct way would be to use single quotes ’. variables in strings quoted with single quotes are not expanded by sh/bash. $ php -r ’$foo = get_defined_constants(); var_dump($fo array(370) { ["E_ERROR"]=> int(1) ["E_WARNING"]=> int(2) ["E_PARSE"]=> int(4) ["E_NOTICE"]=> int(8) ["E_CORE_ERROR"]=> [...] If you are using a shell different from sh/bash, you might experience further issues. Feel free to open a bug report or send a mail to phpdoc@lists.php.net. One still can easily run intro troubles when trying to get shell variables into the code or using backslashes for escaping. You’ve been warned. 159
  • 232. Capítulo 24. Using PHP from the command line Option Description -h With this option, you can get information about the actual list of command line options and some one line descriptions about what they do. The PHP executable can be used to run PHP scripts absolutely independent from the web server. If you are on a Unix system, you should add a special first line to your PHP script, and make it executable, so the system will know, what program should run the script. On a Windows platform you can associate php.exe with the double click option of the .php files, or you can make a batch file to run the script through PHP. The first line added to the script to work on Unix won’t hurt on Windows, so you can write cross platform programs this way. A simple example of writing a command line PHP program can be found below. Ejemplo 24-1. Script intended to be run from command line (script.php) #!/usr/bin/php <?php if ($argc != 2 || in_array($argv[1], array(’--help’, ’-help’, ’-h’, ’-?’))) { ?> This is a command line PHP script with one option. Usage: <?php echo $argv[0]; ?> <option> <option> can be some word you would like to print out. With the --help, -help, -h, or -? options, you can get this help. <?php } else { echo $argv[1]; } ?> In the script above, we used the special first line to indicate, that this file should be run by PHP. We work with a CLI version here, so there will be no HTTP header printouts. There are two variables you can use while writing command line applications with PHP: $argc and $argv. The first is the number of arguments plus one (the name of the script running). The second is an array containing the arguments, starting with the script name as number zero ($argv[0]). In the program above we checked if there are less or more than one arguments. Also if the argument was --help, -help, -h or -?, we printed out the help message, printing the script name dynamically. If we received some other argument we echoed that out. 160
  • 233. Capítulo 24. Using PHP from the command line If you would like to run the above script on Unix, you need to make it executable, and simply call it as script.php echothis or script.php -h. On Windows, you can make a batch file for this task: Ejemplo 24-2. Batch file to run a command line PHP script (script.bat) @c:phpphp.exe script.php %1 %2 %3 %4 Assuming, you named the above program as script.php, and you have your php.exe in c:phpphp.exe this batch file will run it for you with your added options: script.bat echothis or script.bat -h. See also the Readline extension documentation for more functions you can use to enhance your command line applications in PHP. 161
  • 234. Parte IV. Referencia de las Funciones I. Funciones específicas de Apache Estas funciones están disponibles solamente si ejecutamos PHP como módulo de Apache. 162
  • 235. Apache apache_child_terminate (PHP 4 >= 4.0.5) Terminate apache process after this request bool apache_child_terminate ( void) linebreak apache_child_terminate() will register the Apache process executing the current PHP request for termination once execution of PHP code it is completed. It may be used to terminate a process after a script with high memory consumption has been run as memory will usually only be freed internally but not given back to the operating system. Nota: The availability of this feature is controlled by the php.ini directive apache.child_terminate, which is set to off by default. This feature is also not available on multithreaded versions of apache like the win32 version. See also exit(). apache_lookup_uri (PHP 3>= 3.0.4, PHP 4 ) Efectua una petición parcial a la URI especificada y devuelve toda la información sobre ella. class apache_lookup_uri ( string filename) linebreak Esta función efectua una llamada parcial a URI. Esta llamada no hace sino obtener toda la información importante sobre el recurso pedido y la devuelve en un tipo clase .Las propiedades de esa clase son: status the_request status_line method content_type handler uri filename path_info args boundary no_cache no_local_copy allowed send_bodyct bytes_sent byterange clength unparsed_uri mtime request_time Nota: Nota: apache_lookup_uri solo funciona cuando el PHP está instalado como módule del Apache. 163
  • 236. Apache apache_note (PHP 3>= 3.0.2, PHP 4 ) Recibe y establece los valores de una petición en una tabla de notas del Apache string apache_note ( string note_name [, string note_value]) linebreak apache_note() es una función específica del Apache que recibe y establece valores de la petición en una tabla de notas. Si se llama con un solo parámetro,devuelve el valor de note_name. Si se llama con dos parámetros, establece el valor de note_value en note_value y devuelve el valor que había en note_name. apache_setenv (PHP 4 >= 4.2.0) Set an Apache subprocess_env variable int apache_setenv ( string variable, string value [, bool walk_to_top]) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ascii2ebcdic (PHP 3>= 3.0.17) Translate string from ASCII to EBCDIC int ascii2ebcdic ( string ascii_str) linebreak ascii2ebcdic() is an Apache-specific function which is available only on EBCDIC based operating systems (OS/390, BS2000). It translates the ASCII encoded string ascii_str to its equivalent EBCDIC representation (binary safe), and returns the result. See also the reverse function ebcdic2ascii() 164
  • 237. Apache ebcdic2ascii (PHP 3>= 3.0.17) Translate string from EBCDIC to ASCII int ebcdic2ascii ( string ebcdic_str) linebreak ebcdic2ascii() is an Apache-specific function which is available only on EBCDIC based operating systems (OS/390, BS2000). It translates the EBCDIC encoded string ebcdic_str to its equivalent ASCII representation (binary safe), and returns the result. See also the reverse function ascii2ebcdic() getallheaders (PHP 3, PHP 4 ) Recibe todas las cabeceras de una petición HTTP array getallheaders ( void) linebreak Esta función devuelve asociados en un vector todas las cabeceras de la actual petición HTTP. Nota: También puedes obtener los valores de las variables de los CGIs mediante variables de entorno, que funcionan, esté o no el PHP funcionando como módulo del Apache. Utiliza phpinfo()para ver una lista de todas las variables de entorno definidas de esta forma. Ejemplo 1. ObtenerTodaslasCabeceras() Ejemplo $cabeceras = getallheaders(); while (list($cabecera, $valor) = each($cabeceras)) { echo "$cabecera: $valor<br>n"; } Este ejemplo visualiza todas las cabeceras de la petición actual. Nota: ObtenerTodaslasCabeceras() actualmente solo funcionará si el PHP es cargado como módulo del Apache . virtual (PHP 3, PHP 4 ) Ejecuta una sub-petición al Apache 165
  • 238. Apache int virtual ( string filename) linebreak virtual() es una función específica del Apache que es equivalente a <!--#include virtual...--> en mod_include. Esto ejecuta una sup-petición al Apache .Esto, es util para incluir CGI-scripts o páginas .shtml o cualquier tipo de fichero que puedas procesar mediante el Apache. Los CGI-scripts deberán generar cabeceras válidas. Esto, implica como mínimo un include() ó un require(); La función virtual() no puede ser usada para incluir un documento que sea por si mismo un documento PHP. 166
  • 239. II. Funciones de matrices Introducción Estas funciones permiten trabajar y manipular matrices (arrays) de diferentes maneras. Las matrices se utilizan para guardar, manejar y operar grupos de variables. Matrices simples y multi-dimensionales están soportadas y pueden ser creadas por el usuario u otras funciones. Existen funciones específicas de manejo de bases de datos que actualizan matrices con el resultado devuelto por la base de datos, numerosas otras funciones devuelven matrices como resultado. Consultar la sección del manual Matrices si quereis una explicación detallada de como las matrices están implementadas en PHP. Requerimientos Estas funciones están disponibles como parte del módulo estandar, el cual está siempre disponible. Instalación No se necesita ninguna instalación para usar estas funciones, son parte del núcleo de PHP. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión no define ningún tipo de recurso. Constantes predefinidas CASE_UPPER y CASE_LOWER son usadas con la función array_change_key_case(). Son usadas 167
  • 240. Matrices respectivamente para cambiar una cadena literal de mayúsculas a minúsculas. Ver tambien Ver tambien is_array(), explode(), implode(), split(), y join(). 168
  • 241. Matrices array_change_key_case (PHP 4 >= 4.2.0) Returns an array with all string keys lowercased or uppercased array array_change_key_case ( array input [, int case]) linebreak array_change_key_case() changes the keys in the input array to be all lowercase or uppercase. The change depends on the last optional case parameter. You can pass two constants there, CASE_UPPER and CASE_LOWER. The default is CASE_LOWER. The function will leave number indices as is. Ejemplo 1. array_change_key_case() example $input_array = array("FirSt" => 1, "SecOnd" => 4); print_r(array_change_key_case($input_array, CASE_UPPER)); The printout of the above program will be: Array ( [FIRST] => 1 [SECOND] => 2 ) array_chunk (PHP 4 >= 4.2.0) Split an array into chunks array array_chunk ( array input, int size [, bool preserve_keys]) linebreak array_chunk() splits the array into several arrays with size values in them. You may also have an array with less values at the end. You get the arrays as members of a multidimensional array indexed with numbers starting from zero. By setting the optional preserve_keys parameter to TRUE, you can force PHP to preserve the original keys from the input array. If you specify FALSE new number indices will be used in each resulting array with indices starting from zero. The default is FALSE. Ejemplo 1. array_chunk() example $input_array = array(’a’, ’b’, ’c’, ’d’, ’e’); print_r(array_chunk($input_array, 2)); print_r(array_chunk($input_array, 2, TRUE)); 169
  • 242. Matrices The printout of the above program will be: Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) ) Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [2] => c [3] => d ) [2] => Array ( [4] => e ) ) 170
  • 243. Matrices array_count_values (PHP 4 ) Cuenta todos los valores de una matriz array array_count_values ( array entrada) linebreak array_count_values() devuelve una matriz usando los valores de la matriz entrada como claves y su frecuencia de aparición en la entrada como valores. Ejemplo 1. Ejemplo de array_count_values() $matriz = array(1, "hola", 1, "mundo", "hola"); array_count_values($matriz); // devuelve array(1=>2, "hola"=>2, "mundo"=>1) Nota: Esta función fue añadida en el PHP 4.0. array_diff (PHP 4 >= 4.0.1) Computes the difference of arrays array array_diff ( array array1, array array2 [, array ...]) linebreak array_diff() returns an array containing all the values of array1 that are not present in any of the other arguments. Note that keys are preserved. Ejemplo 1. array_diff() example $array1 = array ("a" => "green", "red", "blue", "red"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_diff ($array1, $array2); This makes $result have array ("blue");. Multiple occurrences in $array1 are all treated the same way. Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same. 171
  • 244. Matrices Aviso This was broken in PHP 4.0.4! See also array_intersect(). array_fill (PHP 4 >= 4.2.0) Fill an array with values array array_fill ( int start_index, int num, mixed value) linebreak array_fill() fills an array with num entries of the value of the value parameter, keys starting at the start_index parameter. Ejemplo 1. array_fill() example $a = array_fill(5, 6, ’banana’); $a now has the following entries using print_r(): Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana ) array_filter (PHP 4 >= 4.0.6) Filters elements of an array using a callback function array array_filter ( array input [, mixed callback]) linebreak 172
  • 245. Matrices array_filter() returns an array containing all the elements of input filtered according a callback function. If the input is an associative array the keys are preserved. Ejemplo 1. array_filter() example function odd($var) { return ($var % 2 == 1); } function even($var) { return ($var % 2 == 0); } $array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); $array2 = array (6, 7, 8, 9, 10, 11, 12); echo "Odd :n"; print_r(array_filter($array1, "odd")); echo "Even:n"; print_r(array_filter($array2, "even")); The printout of the program above will be: Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 ) Nota: En lugar de un nombre de función, se pueden proporcionar una matriz que contenga una referencia a un objeto o el nombre de un método. 173
  • 246. Matrices Users may not change the array itself from the callback function. e.g. Add/delete an element, unset the array that array_filter() is applied to. If the array is changed, the behavior of this function is undefined. See also array_map() and array_reduce(). array_flip (PHP 4 ) Intercambia los valores de una matriz array array_flip ( array trans) linebreak array_flip() devuelve una matriz con los valores intercambiados. Ejemplo 1. Ejemplo de array_flip() $trans = array_flip ($trans); $original = strtr ($str, $trans); Nota: Esta función fue añadida en el PHP 4.0. array_intersect (PHP 4 >= 4.0.1) Computes the intersection of arrays array array_intersect ( array array1, array array2 [, array ...]) linebreak array_intersect() returns an array containing all the values of array1 that are present in all the arguments. Note that keys are preserved. Ejemplo 1. array_intersect() example $array1 = array ("a" => "green", "red", "blue"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_intersect ($array1, $array2); This makes $result have Array ( 174
  • 247. Matrices [a] => green [0] => red ) Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same. Aviso This was broken in PHP 4.0.4! See also array_diff(). array_key_exists (PHP 4 >= 4.1.0) Checks if the given key or index exists in the array bool array_key_exists ( mixed key, array search) linebreak array_key_exists() returns TRUE if the given key is set in the array. key can be any value possible for an array index. Ejemplo 1. array_key_exists() example $search_array = array("first" => 1, "second" => 4); if (array_key_exists("first", $search_array)) { echo "The ’first’ element is in the array"; } Nota: The name of this function is key_exists() in PHP version 4.0.6. See also isset(). 175
  • 248. Matrices array_keys (PHP 4 ) Devuelve todas las claves de una matriz array array_keys ( array entrada [, mixed val_a_buscar]) linebreak array_keys() devuelve las claves, numéricas y de cadena, de la matriz entrada. Si se especifica el parámetro opcional val_a_buscar, sólo se devuelven las claves para dicho valor. De otro modo, se devuelven todas las claves de la entrada. Ejemplo 1. Ejemplo de array_keys() $matriz = array(0 => 100, "color" => "rojo"); array_keys ($matriz); // devuelve array (0, "color") $matriz = array(1, 100, 2, 100); array_keys ($matriz, 100); // devuelve array (0, 2) Vea también: array_values(). Nota: Esta función fue añadida en el PHP 4.0. array_map (PHP 4 >= 4.0.6) Applies the callback to the elements of the given arrays array array_map ( mixed callback, array arr1 [, array arr2...]) linebreak array_map() returns an array containing all the elements of arr1 after applying the callback function to each one. The number of parameters that the callback function accepts should match the number of arrays passed to the array_map() Ejemplo 1. array_map() example function cube($n) { return $n*$n*$n; } $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); print_r($b); 176
  • 249. Matrices This makes $b have: Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 ) Ejemplo 2. array_map() - using more arrays function show_Spanish($n, $m) { return "The number $n is called $m in Spanish"; } function map_Spanish($n, $m) { return array ($n => $m); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); $c = array_map("show_Spanish", $a, $b); print_r($c); $d = array_map("map_Spanish", $a , $b); print_r($d); This results: // printout of $c Array ( [0] => The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish ) 177
  • 250. Matrices // printout of $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) ) Usually when using two or more arrays, they should be of equal length because the callback function is applied in parallel to the corresponding elements. If the arrays are of unequal length, the shortest one will be extended with empty elements. An interesting use of this function is to construct an array of arrays, which can be easily performed by using NULL as the name of the callback function Ejemplo 3. Creating an array of arrays $a = array(1, 2, 3, 4, 5); $b = array("one", "two", "three", "four", "five"); $c = array("uno", "dos", "tres", "cuatro", "cinco"); $d = array_map(null, $a, $b, $c); print_r($d); 178
  • 251. Matrices The printout of the program above will be: Array ( [0] => Array ( [0] => 1 [1] => one [2] => uno ) [1] => Array ( [0] => 2 [1] => two [2] => dos ) [2] => Array ( [0] => 3 [1] => three [2] => tres ) [3] => Array ( [0] => 4 [1] => four [2] => cuatro ) [4] => Array ( [0] => 5 [1] => five [2] => cinco ) ) See also array_filter() and array_reduce(). 179
  • 252. Matrices array_merge_recursive (PHP 4 >= 4.0.1) Merge two or more arrays recursively array array_merge_recursive ( array array1, array array2 [, array ...]) linebreak array_merge_recursive() merges the elements of two or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays have the same string keys, then the values for these keys are merged together into an array, and this is done recursively, so that if one of the values is an array itself, the function will merge it with a corresponding entry in another array too. If, however, the arrays have the same numeric key, the later value will not overwrite the original value, but will be appended. Ejemplo 1. array_merge_recursive() example $ar1 = array ("color" => array ("favorite" => "red"), 5); $ar2 = array (10, "color" => array ("favorite" => "green", "blue")); $result = array_merge_recursive ($ar1, $ar2); The $result will be: Array ( [color] => Array ( [favorite] => Array ( [0] => red [1] => green ) [0] => blue ) [0] => 5 [1] => 10 ) See also array_merge(). 180
  • 253. Matrices array_merge (PHP 4 ) Combina dos o más matrices array array_merge ( array matriz1, array matriz2 [, ...]) linebreak array_merge() combina los elementos de dos o más matrices conjuntamente de modo que los valores de una son agregados al final de los valores de la anterior. Devuelve la matriz resultante. Si las matrices de entrada tienen las mismas claves de cadena, el último valor para cada clave reemplazará el valor previo de la misma. Si, por el contrario, las matrices tienen la misma clave numérica, esto no pasa y los valores son simplemente agregados. Ejemplo 1. Ejemplo de array_merge() $matriz1 = array ("color" => "rojo", 2, 4); $matriz2 = array ("a", "b", "color" => "verde", "forma" => "trapezoide"); array_merge ($matriz1, $matriz2); La matriz resultante sería array("color" => "verde", 2, 4, "a", "b", "forma" => "trapezoide"). Nota: Esta función fue añadida en el PHP 4.0. array_multisort (PHP 4 ) Sort multiple or multi-dimensional arrays bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]]) linebreak array_multisort() can be used to sort several arrays at once or a multi-dimensional array according by one of more dimensions. It maintains key association when sorting. The input arrays are treated as columns of a table to be sorted by rows - this resembles the functionality of SQL ORDER BY clause. The first array is the primary one to sort by. The rows (values) in that array that compare the same are sorted by the next input array, and so on. The argument structure of this function is a bit unusual, but flexible. The very first argument has to be an array. Subsequently, each argument can be either an array or a sorting flag from the following lists. Sorting order flags: • SORT_ASC - sort in ascending order • SORT_DESC - sort in descending order 181
  • 254. Matrices Sorting type flags: • SORT_REGULAR - compare items normally • SORT_NUMERIC - compare items numerically • SORT_STRING - compare items as strings No two sorting flags of the same type can be specified after each array. The sorting flags specified after an array argument apply only to that array - they are reset to default SORT_ASC and SORT_REGULAR after before each new array argument. Devuelve TRUE si todo fue bien, FALSE en caso de fallo. Ejemplo 1. Sorting multiple arrays $ar1 = array ("10", 100, 100, "a"); $ar2 = array (1, 3, "2", 1); array_multisort ($ar1, $ar2); In this example, after sorting, the first array will contain 10, "a", 100, 100. The second array will contain 1, 1, "2", 3. The entries in the second array corresponding to the identical entries in the first array (100 and 100) were sorted as well. Ejemplo 2. Sorting multi-dimensional array $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); array_multisort ($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); In this example, after sorting, the first array will contain 10, 100, 100, "a" (it was sorted as strings in ascending order), and the second one will contain 1, 3, "2", 1 (sorted as numbers, in descending order). array_pad (PHP 4 ) Rellena una matriz con un valor hasta el tamaño especificado 182
  • 255. Matrices array array_pad ( array entrada, int tama_relleno, mixed valor_relleno) linebreak array_pad() Devuelve una copia de la entrada rellenada hasta el tamaño tama_relleno con el valor valor_relleno. Si tama_relleno es positivo, entonces la matriz es rellenada por la derecha, y si es negativo, por la izquierda. Si el valor absoluto de tama_relleno es menor o igual que el tamaño de la entrada no se produce relleno alguno. Ejemplo 1. Ejemplo de array_pad() $entrada = array (12, 10, 9); $resultado = array_pad ($entrada, 5, 0); // el resultado es array (12, 10, 9, 0, 0) $resultado = array_pad ($entrada, -7, -1); // el resultado es array (-1, -1, -1, -1, 12, 10, 9) $resultado = array_pad ($entrada, 2, "no"); // no rellenado array_pop (PHP 4 ) Extrae el último elemento de la matriz mixed array_pop ( array matriz) linebreak array_pop() extrae y devuelve el último valor de la matriz, acortando la matriz en un elemento. Ejemplo 1. Ejemplo de array_pop() $pila = array ("naranja", "manzana", "frambuesa"); $fruta = array_pop ($pila); Tras esto, $pila contiene sólo 2 elementos: "naranja" y "manzana", y $fruta contiene "frambuesa". Vea también: array_push(), array_shift(), y array_unshift(). Nota: Esta función fue añadida en el PHP 4.0. 183
  • 256. Matrices array_push (PHP 4 ) Inserta uno o más elementos al final de la matriz int array_push ( array matriz, mixed var [, ...]) linebreak array_push() considera a la matriz como una pila, e inserta las variables que se le pasan al final de la matriz. La longitud de la matriz se incrementa en el número de variables insertadas. Tiene el mismo efecto que ejecutar: $matriz[] = $var; para cada var. Devuelve el nuevo número de elementos de la matriz. Ejemplo 1. Ejemplo de array_push() $pila = array (1, 2); array_push($pila, "+", 3); Este ejemplo dejará $pila conteniendo 4 elementos: 1, 2, "+", y 3. Vea también: array_pop(), array_shift(), y array_unshift(). Nota: Esta función fue añadida en el PHP 4.0. array_rand (PHP 4 ) Pick one or more random entries out of an array mixed array_rand ( array input [, int num_req]) linebreak array_rand() is rather useful when you want to pick one or more random entries out of an array. It takes an input array and an optional argument num_req which specifies how many entries you want to pick - if not specified, it defaults to 1. If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries. This is done so that you can pick random keys as well as values out of the array. Don’t forget to call srand() to seed the random number generator. 184
  • 257. Matrices Ejemplo 1. array_rand() example srand ((float) microtime() * 10000000); $input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); $rand_keys = array_rand ($input, 2); print $input[$rand_keys[0]]."n"; print $input[$rand_keys[1]]."n"; array_reduce (PHP 4 >= 4.0.5) Iteratively reduce the array to a single value using a callback function mixed array_reduce ( array input, mixed callback [, int initial]) linebreak array_reduce() applies iteratively the callback function to the elements of the array input, so as to reduce the array to a single value. If the optional initial is available, it will be used at the beginning of the process, or as a final result in case the array is empty. Ejemplo 1. array_reduce() example function rsum($v, $w) { $v += $w; return $v; } function rmul($v, $w) { $v *= $w; return $v; } $a = array(1, 2, 3, 4, 5); $x = array(); $b = array_reduce($a, "rsum"); $c = array_reduce($a, "rmul", 10); $d = array_reduce($x, "rsum", 1); This will result in $b containing 15, $c containing 1200 (= 1*2*3*4*5*10), and $d containing 1. See also array_filter() and array_map(). 185
  • 258. Matrices array_reverse (PHP 4 ) Devuelve una matriz con los elementos en orden inverso array array_reverse ( array matriz) linebreak array_reverse() toma la matriz de entrada y devuelve una nueva matriz con los elementos en orden inverso. Ejemplo 1. Ejemplo de array_reverse() $entrada = array ("php", 4.0, array ("verde", "rojo")); $resultado = array_reverse ($entrada); Esto hace que $resultado contenga array (array ("verde", "rojo"), 4.0, "php"). Nota: Esta función fue añadida en PHP 4.0 Beta 3. array_search (PHP 4 >= 4.0.5) Searches the array for a given value and returns the corresponding key if successful mixed array_search ( mixed needle, array haystack [, bool strict]) linebreak Searches haystack for needle and returns the key if it is found in the array, FALSE otherwise. Nota: Prior to PHP 4.2.0, array_search() returns NULL on failure instead of FALSE. If the optional third parameter strict is set to TRUE then the array_search() will also check the types of the needle in the haystack. Aviso Esta función puede devolver el Boolean FALSE, pero también puede devolver un valor no-Boolean que será evaluado FALSE, como por ejemplo 0 o "". Por favor, lea la sección Booleans para más información. Utilice el operador === para comprobar el valor devuelto por esta función. See also array_keys() and in_array(). 186
  • 259. Matrices array_shift (PHP 4 ) Extrae un elemento del comienzo de la matriz mixed array_shift ( array matriz) linebreak array_shift() extrae el primer valor de la matriz y lo devuele, acortando la matriz en un elemnto y moviendo todo hacia arriba. Ejemplo 1. Ejemplo de array_shift() $args = array ("-v", "-f"); $opcion = array_shift ($args); Esto da como resultado que $args tenga como elemento restante "-f" y que $opcion valga "-v". Vea también: array_unshift(), array_push(), y array_pop(). Nota: Esta función fue añadida en el PHP 4.0. array_slice (PHP 4 ) Extrae una porción de la matriz array array_slice ( array matriz, int desplazamiento [, int tamano]) linebreak array_slice() devuelve una secuencia de elementos de la matriz especificada por los parámetros desplazamiento y tamano. Si el desplazamiento es positivo, la secuencia comenzará en dicha posición de la matriz. Si el desplazamiento es negativo, la secuencia comenzará en esa posición desde el final de la matriz. Si se especifica el tamano y éste es positivo, la secuencia contendrá tantos elementos como se diga en él. Si fuese negativo, la secuencia se detendrá a tantos elementos del final de la matriz. Si se omite, la secuencia contendrá todos los elementos desde el desplazamiento hasta el final de la matriz. Ejemplo 1. Ejemplo de array_slice() examples $entrada = array ("a", "b", "c", "d", "e"); $salida = array_slice ($entrada, 2); // devuelve "c", "d", y "e" $salida = array_slice ($entrada, 2, -1); // devuelve "c", "d" $salida = array_slice ($entrada, -2, 1); // devuelve "d" $salida = array_slice ($entrada, 0, 3); // devuelve "a", "b", y "c" 187
  • 260. Matrices Vea también: array_splice(). Nota: Esta función fue añadida en el PHP 4.0. array_splice (PHP 4 ) Suprime una porción de la matriz y la sustituye por otra cosa array array_splice ( array entrada, int desplazamiento [, int tamano [, array sustitucion]]) linebreak array_splice() suprime los elementos designados por el desplazamiento y el tamano de la matriz entrada, y los sustituye con los elementos de la matriz de sustitucion si se especifica. Si el desplazamiento es positivo, el comienzo de la parte suprimida sería en esa posición desde el comienzo de la matriz de entrada. Si el desplazamiento es negativo, se cuenta la posición desde el final de la matriz de entrada. Si se omite tamano, se suprime todo desde el desplazamiento hasta el final de la matriz. Si se especifica el tamano y es positivo, se suprimirán tantos elementos como se especifica. Si fuera negativo, el final de la porción eliminada estará a tantos elementos del final de la matriz. Truco: para eliminar todo desde el desplazamiento hasta el final de la matriz cuando también se especifica sustitucion, utilice count($entrada) como tamano. Si se especifia la matriz de sustitucion, entonces los elementos suprimidos son reemplazados con los elementos de dicha matriz. Si los valores de desplazamiento y tamano son tales que nada es borrado, los elementos de la matriz sustitucion se insertarán en la posición indicada por el desplazamiento. Truco: si sólo se va a sustituir algo por un elemento nada más, no hace falta poner array() alrededor del mismo, salvo que dicho elemento sea una matriz en sí mismo. Las siguientes funciones son equivalentes: array_push($entrada, $x, $y) array_splice($entrada, count($entrada), 0, ar- ray($x, $y)) array_pop($entrada) array_splice($entrada, -1) array_shift($entrada) array_splice($entrada, 0, 1) array_unshift($entrada, $x, $y) array_splice($entrada, 0, 0, array($x, $y)) $a[$x] = $y array_splice($entrada, $x, 1, $y) Devuelve una matriz que tiene los elementos eliminados 188
  • 261. Matrices Ejemplo 1. Ejemplos de array_splice() $entrada = array("rojo", "verde", "azul", "amarillo"); array_splice($entrada, 2); // $entrada vale ahora array("rojo", "verde") array_splice($entrada, 1, -1); // $entrada vale ahora array("rojo", "amarillo") array_splice($entrada, 1, count($entrada), "naranja"); // $entrada vale ahora array("rojo", "naranja") array_splice($entrada, -1, 1, array("negro", "marrón")); // $entrada vale ahora array("rojo", "verde", // "azul", "negro", "marrón") Vea también: array_slice(). Nota: Esta función fue añadida en el PHP 4.0. array_sum (PHP 4 >= 4.0.4) Calculate the sum of values in an array. mixed array_sum ( array array) linebreak array_sum() returns the sum of values in an array as an integer or float. Ejemplo 1. array_sum() examples $a = array(2, 4, 6, 8); echo "sum(a) = ".array_sum($a)."n"; $b = array("a"=>1.2,"b"=>2.3,"c"=>3.4); echo "sum(b) = ".array_sum($b)."n"; The printout of the program above will be: sum(a) = 20 sum(b) = 6.9 189
  • 262. Matrices Nota: PHP versions prior to 4.0.6 modified the passed array itself and converted strings to numbers (which most of the time converted them to zero, depending on their value). array_unique (PHP 4 >= 4.0.1) Removes duplicate values from an array array array_unique ( array array) linebreak array_unique() takes input array and returns a new array without duplicate values. Note that keys are preserved. array_unique() sorts the values treated as string at first, then will keep the first key encountered for every value, and ignore all following keys. It does not mean that the key of the first related value from the unsorted array will be kept. Nota: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same. The first element will be used. Aviso This was broken in PHP 4.0.4! Ejemplo 1. array_unique() example $input = array ("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique ($input); print_r($result); This will output: Array ( [b] => green [1] => blue [2] => red ) 190
  • 263. Matrices Ejemplo 2. array_unique() and types $input = array (4,"4","3",4,3,"3"); $result = array_unique ($input); var_dump($result); The printout of the program above will be (PHP 4.0.6): array(2) { [3]=> int(4) [4]=> int(3) } array_unshift (PHP 4 ) Introduce uno o más elementos al principio de la matriz int array_unshift ( array matriz, mixed var [, ...]) linebreak array_unshift() añade los elementos que se le pasan al principio de la matriz. Nótese que la lista de elementos es añadida como un todo, de modo que los elementos añadidos mantienen su orden. Devuelve el número de elementos en la matriz. Ejemplo 1. Ejemplo de array_unshift() $cola = array("p1", "p3"); array_unshift($cola, "p4", "p5", "p6"); Esto hará que $cola contenga 5 elementos: "p4", "p5", "p6", "p1", y "p3". Vea también: array_shift(), array_push(), y array_pop(). Nota: Esta función fue añadida en el PHP 4.0. 191
  • 264. Matrices array_values (PHP 4 ) Devuelve todos los valores de una matriz array array_values ( array entrada) linebreak array_values() devuelve todos los valores de la matriz entrada. Ejemplo 1. Ejemplo de array_values() $matriz = array("talla" => "XL", "color" => "dorado"); array_values($matriz); // devuelve array("XL", "dorado") Nota: Esta función fue añadida en el PHP 4.0. array_walk (PHP 3>= 3.0.3, PHP 4 ) Aplica una función del usuario a cada elemento de una matriz. int array_walk ( array matriz, string func, mixed datosvarios) linebreak Aplica la función llamada func a cada elemento de la matriz. La función func recibirá el valor de la matriz como primer parámetro y la clave como segundo. Si se proporciona el parámetro datosvarios será pasado como tercer parámetro a la función de usuario. Si func necesita más de dos o 3 argumentos, dependiendo de datosvarios, se generará un aviso cada vez que array_walk() llama a func. Estos avisos pueden suprimirse si se pone ’@’ antes de la llamada a array_walk(), o usando la función error_reporting(). Nota: Si func precisa trabajar con los valores reales de la matriz, especifique que el valor del primer parámetro de func debe pasarse por referencia. Desde ese instante, los cambios realizados sobre dichos elementos también serán realizados en la propia matriz. Nota: El pasar la clave y los datos de usuario a func fue una característica añadida en PHP 4.0. En PHP 4 se debe llamar reset() las veces necesarias, pues array_walk() no reajusta la matriz por defecto. 192
  • 265. Matrices Ejemplo 1. Ejemplo de array_walk() $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana"); function test_alterar (&$item1, $clave, $prefix) { $item1 = "$prefix: $item1"; } function test_ver ($item2, $clave) { echo "$clave. $item2<br>n"; } array_walk ($frutas, ’test_ver’); reset ($frutas); array_walk ($frutas, ’test_alterar’, ’fruta’); reset ($frutas); array_walk ($frutas, ’test_ver’); Vea también: each() y list(). array (unknown) Crear una matriz array array ( mixed ...) linebreak Devuelve una matriz con los parámetros que se le pasan. A dichos parámetros se les puede dar un índice usando el operador =>. Nota: array() es una construcción del lenguaje que se utiliza para representar matrices literales, no una función regular. El siguiente ejemplo demuestra cómo crear una matriz bidimensional, cómo especificar claves para matrices asociativas, y cómo especificar índices no consecutivos en matrices normales. Ejemplo 1. Ejemplo de array() $frutas = array ( "frutas" => array("a"=>"naranja", "b"=>"plátano", "c"=>"manzana"), "números" => array(1, 2, 3, 4, 5, 6), "hoyos" => array("primero", 5 => "segundo", "tercero") ); 193
  • 266. Matrices Vea también: list(). arsort (PHP 3, PHP 4 ) Ordena una matriz en orden inverso y mantiene la asociación de índices void arsort ( array matriz) linebreak Esta función ordena una matriz de modo que los índices mantengan su correlación con los elementos de la misma a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en las que el orden de los elementos es importante. Ejemplo 1. Ejemplo de arsort() $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana"); arsort ($frutas); for (reset ($frutas); $clave = key ($frutas); next ($frutas)) { echo "frutas[$clave] = ".$frutas[$clave]."n"; } Este ejemplo mostraría: frutas[b] = plátano frutas[a] = naranja frutas[c] = manzana frutas[d] = limón Las frutas han sido ordenadas en orden alfabético inverso y los índices asociados con cada elemento se han mantenido. Vea también: asort(), rsort(), ksort(), y sort(). asort (PHP 3, PHP 4 ) Ordena una matriz y mantiene la asociación de índices void asort ( array matriz) linebreak Esta función ordena una matriz de modo que los índices mantengan su correlación con los elementos de la misma a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en las que el orden de los elementos es importante. Ejemplo 1. Ejemplo de asort() $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana"); asort ($frutas); for (reset ($frutas); $clave = key ($frutas); next ($frutas)) { echo "frutas[$clave] = ".$frutas[$clave]."n"; } 194
  • 267. Matrices Este ejemplo mostrará: frutas[d] = limón frutas[a] = naranja frutas[c] = manzana frutas[d] = plátano Las frutas han sido ordenadas en orden alfabético y los índices asociados con cada elemento se han mantenido. Vea también: arsort(), rsort(), ksort(), y sort(). compact (PHP 4 ) Crea una matriz que contiene variables y sus valores array compact ( string nombrevar | array nombrevars [, ...]) linebreak compact() toma un número variable de parámetros. Cada uno puede ser tanto una cadena que contiene el nombre de la variable, como una matriz de nombres de variable. La matriz puede contener otras matrices de nombres de variable en su interior; compact() los procesa recursivamente. Para cada uno de estos, compact() busca una variable con dicho nombre en la tabla de símbolos y la añade a la matriz de salida de modo que el nombre de la variable es la clave y el contenido de ésta es el valor para dicha clave. Para resumir, hace lo contrario de extract(). Devuelve la matriz de salida con las variables añadidas a la misma. Ejemplo 1. Ejemplo de compact() $ciudad = "San Francisco"; $estado = "CA"; $evento = "SIGGRAPH"; $location_vars = array ("ciudad", "estado"); $resultado = compact ("evento", $location_vars); Tras esto, $resultado valdrá array ("evento" => "SIGGRAPH", "ciudad" => "San Francisco", "estado" => "CA"). Vea también: extract(). Nota: Esta función fue añadida en el PHP 4.0. 195
  • 268. Matrices count (PHP 3, PHP 4 ) Cuenta los elementos de una variable int count ( mixed var) linebreak Devuelve el número de elementos en var, que típicamente es una matriz (porque cualquier otra cosa tendría sólo un elemento). Devuele 1 si la variable no es una matriz. Devuelve 0 si la variable no tiene valor. Aviso count() puede devolver 0 para una variable sin valor, pero también puede devolver 0 para una variable ya inicializada pero con una matriz vacía. Utilice isset() para comprobar si una variable está inicializada. Vea también: sizeof(), isset(), y is_array(). current (PHP 3, PHP 4 ) Devuelve el elemento actual de una matriz mixed current ( array matriz) linebreak Cada matriz tiene un puntero interno al elemento "actual", que se inicializa al primer elemento insertado en la misma. La función current() simplemente devuelve el elemento de la tabla al que apunta el puntero interno. No mueve el puntero de ninguna manera. Si el puntero interno apunta fuera del final de la lista de elementos, current() devuelve FALSE. Aviso Si la matriz contiene elementos vacíos (0 ó "", la cadena vacía) esta función devolverá FALSE también para dichos elementos. Esto hace imposible determinar si se está realmente al final de la lista en tales matrices usando current(). Para recorrer adecuadamente una matriz que pueda contener elementos vacíos, utilice la función each(). Vea también: end(), next(), prev() y reset(). 196
  • 269. Matrices each (PHP 3, PHP 4 ) Devuelve el siguiente par clave/valor de una matriz array each ( array matriz) linebreak Devuelve el par clave/valor actual para la matriz y avanza el cursor de la misma. Esta pareja se devuele en una matriz de 4 elementos, con las claves 0, 1, key, y value. Los elementos 0 y key contienen el nombre de clave del elemento de la matriz, y 1 y value contienen los datos. Si el puntero interno para la matriz apunta pasado el final del contenido de la matriz, each() devuelve FALSE. Ejemplo 1. Ejemplos de each() $chorrada = array ("bob", "fred", "jussi", "jouni", "egon", "marliese"); $tonteria = each ($chorrada); $tonteria contiene ahora los siguientes pares clave/valor: • 0 => 0 • 1 => ’bob’ • key => 0 • value => ’bob’ $chorrada = array ("Robert" => "Bob", "Seppo" => "Sepi"); $tonteria = each ($chorrada); $tonteria contiene ahora los siguientes pares clave/valor: • 0 => ’Robert’ • 1 => ’Bob’ • key => ’Robert’ • value => ’Bob’ each() se usa normalmente de forma conjunta a list() para recorrer una matriz; por ejemplo, $HTTP_POST_VARS: Ejemplo 2. Recorriendo $HTTP_POST_VARS con each() echo "Valores enviados con el método POST:<br>"; reset ($HTTP_POST_VARS); while (list ($clave, $val) = each ($HTTP_POST_VARS)) { echo "$clave => $val<br>"; } 197
  • 270. Matrices Cuando se ha ejecutado each(), el cursor de la matriz quedará en el siguiente elemento de la misma, o en el último si llega al final de ésta. Vea también: key(), list(), current(), reset(), next(), y prev(). end (PHP 3, PHP 4 ) Mueve el puntero interno de una tabla al último elemento end ( array matriz) linebreak end() avanza el puntero interno de la matriz al último elemento. Vea también: current(), each(), end(), next(), y reset(). extract (PHP 3>= 3.0.7, PHP 4 ) Importa variables a la tabla de símbolos desde una matriz void extract ( array matriz_vars [, int tipo_extraccion [, string prefijo]]) linebreak Esta función se utiliza para importar variables desde una matriz a la tabla de símbolos actual. Toma la matriz asoiativa matriz_vars y trata las claves como nombres de variable y los valores como los valores de éstas. Para cada par clave/valor creará una variable en la tabla de símbolos actual, sujeto a los parámetros tipo_extraccion y prefijo. extract() controla las colisiones con las variables que ya existen. La forma de tratar éstas se determina por el tipo_extraccion. Puede tener únicamente uno de los siguientes valores: EXTR_OVERWRITE Si hay colisión, sobreescribe la variable existente. EXTR_SKIP Si hay colisión, no sobreescribas la variable existente. EXTR_PREFIX_SAME Si hay una colisión, añade el prefijo a la nueva variable. EXTR_PREFIX_ALL Añade el prefijo a todas las variables. Si no se especifica tipo_extraccion, se asume que vale EXTR_OVERWRITE. 198
  • 271. Matrices Nótese que el prefijo sólo se necisita si tipo_extraccion vale EXTR_PREFIX_SAME o EXTR_PREFIX_ALL. extract() comprueba si cada clave es un nombre válido de variable, y sólo lo importa si lo es. Nota: N.T.: En el caso español, no valdría "año" como nombre variable (pero sí como clave en una matriz cualquiera). Un uso posible para extract sería importar en la tabla de símbolos las variables contenidas en la matriz asociativa que devuelve wddx_deserialize(). Ejemplo 1. Ejemplo de extract() <php? /* Suponemos que $matriz_var es una matriz devuelta por wddx_deserialize */ $tamano = "grande"; $matriz_var = array ("color" => "azul", "tamano" => "media", "forma" => "esfera"); extract ($matriz_var, EXTR_PREFIX_SAME, "wddx"); print "$color, $tamano, $forma, $wddx_tamanon"; ?> El programa anterior producirá: azul, grande, esfera, media La variable $tamano no fue sobreescrita porque especificamos EXTR_PREFIX_SAME, que provocó la creación de $wddx_tamano. Si se hubiera especificado EXTR_SKIP, $wddx_tamano ni siquiera habría sido creada. EXTR_OVERWRITE habría provocado que $tamano tuviera el valor "media", y EXTR_PREFIX_ALL habría provocado que aparecieran nuevas variables llamadas $wddx_color, $wddx_tamano, y $wddx_forma. in_array (PHP 4 ) Devuelve TRUE si un valor está en una matriz 199
  • 272. Matrices bool in_array ( mixed aguja, array pajar) linebreak Busca la aguja en el pajar, y devuelve TRUE si se encuentra y FALSE en caso contrario. Ejemplo 1. Ejemplo de in_array() $os = array ("Mac", "NT", "Irix", "Linux"); if (in_array ("Irix", $os)) print "Encontrado Irix"; Nota: Esta función fue añadida en el PHP 4.0. key (PHP 3, PHP 4 ) Obtiene una clave de una matriz asociativa mixed key ( array matriz) linebreak key() devuelve el elemento índice de la posición actual en la matriz. Vea también: current(), next() krsort (PHP 3>= 3.0.13, PHP 4 ) Ordena una matriz por clave en orden inverso int krsort ( array matriz) linebreak Ordena una matriz por clave en orden inverso, manteniendo las correlaciones clave a dato. Esto es útil principalmente en matrices asociativas. Ejemplo 1. Ejemplo de krsort() $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana"); krsort ($frutas); for (reset ($frutas); $clave = key ($frutas); next ($frutas)) { echo "frutas[$clave] = ".$frutas[$clave]."n"; } Este ejemplo mostrará: frutas[d] = limón frutas[c] = manzana frutas[b] = plátano frutas[a] = naranja 200
  • 273. Matrices Vea también: asort(), arsort(), ksort() sort(), y rsort(). ksort (PHP 3, PHP 4 ) Ordena una matriz por clave int ksort ( array matriz) linebreak Ordena una matriz por clave, manteniendo las correlaciones clave a dato. Esto es útil principalmente en matrices asociativas. Ejemplo 1. Ejemplo de ksort() $frutas = array ("d"=>"limón", "a"=>"naranja", "b"=>"plátano", "c"=>"manzana"); ksort ($frutas); for (reset ($frutas); $clave = key ($frutas); next ($frutas)) { echo "frutas[$clave] = ".$frutas[$clave]."n"; } Este ejemplo mostrará: frutas[a] = naranja frutas[b] = plátano frutas[c] = manzana frutas[d] = limón Vea también: asort(), arsort(), sort(), y rsort(). list (unknown) Asigna variables como si fueran una matriz void list ( mixed ...) linebreak Como array(), esta no es realmente una función, sino una construcción del lenguaje. list() se usa para asignar una lista de variables en una sola operación. Ejemplo 1. Ejemplo de list() <table> <tr> <th>Nombre empleado</th> <th>Sueldo</th> </tr> <?php $resultado = mysql($conn, "SELECT id, nombre, salario FROM empleados"); while (list($id, $nombre, $salario) = mysql_fetch_row($resultado)) { print(" <tr>n". " <td><a href="info.php3?id=$id">$nombre</a></td>n". 201
  • 274. Matrices " <td>$salario</td>n". " </tr>n"); } ?> </table> Vea también: each(), array(). natcasesort (PHP 4 ) Sort an array using a case insensitive "natural order" algorithm void natcasesort ( array array) linebreak This function implements a sort algorithm that orders alphanumeric strings in the way a human being would. This is described as a "natural ordering". natcasesort() is a case insensitive version of natsort(). See natsort() for an example of the difference between this algorithm and the regular computer string sorting algorithms. For more information see: Martin Pool’s Natural Order String Comparison (http://naturalordersort.org/) page. See also sort(), natsort(), strnatcmp(), and strnatcasecmp(). natsort (PHP 4 ) Sort an array using a "natural order" algorithm void natsort ( array array) linebreak This function implements a sort algorithm that orders alphanumeric strings in the way a human being would. This is described as a "natural ordering". An example of the difference between this algorithm and the regular computer string sorting algorithms (used in sort()) can be seen below: Ejemplo 1. natsort() example $array1 = $array2 = array ("img12.png", "img10.png", "img2.png", "img1.png"); sort($array1); echo "Standard sortingn"; print_r($array1); 202
  • 275. Matrices natsort($array2); echo "nNatural order sortingn"; print_r($array2); The code above will generate the following output: Standard sorting Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) Natural order sorting Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png ) For more information see: Martin Pool’s Natural Order String Comparison (http://naturalordersort.org/) page. See also natcasesort(), strnatcmp(), and strnatcasecmp(). next (PHP 3, PHP 4 ) Avanza el puntero interno de una matriz mixed next ( array matriz) linebreak Devuelve el elemento de la matriz que ocupa el lugar siguiente al apuntado por el puntero interno, o FALSE si no hay más elementos. next() se comporta como current(), con una diferencia. Avanza el puntero interno de la matriz en una posición antes de devolver el elemento. Eso significa que devuelve el siguiente elemento de la matriz y que avanza el puntero interno en uno. Si al avanzar se pasa del final de la lista de elementos, next() devuelve FALSE. 203
  • 276. Matrices Aviso Si la matriz contiene elementos vacíos, esta función también devolverá FALSE para dichos elementos. Para recorrer adecuadamente una matriz que pueda contener elementos vacíos, vea la función each(). Vea también: current(), end() prev() y reset() pos (PHP 3, PHP 4 ) Obtiene el elemento actual de una matriz mixed pos ( array matriz) linebreak Este es un alias para current(). Vea también: end(), next(), prev() y reset(). prev (PHP 3, PHP 4 ) Rebobina el puntero interno de una matriz mixed prev ( array matriz) linebreak Devuelve el elemento de la matriz que está en la posición anterior a la que apuntaba previamente el puntero interno, o FALSE si no hay más elementos. Aviso Si la matriz contiene elementos vacíos, esta función también devolverá FALSE para dichos elementos. Para recorrer adecuadamente una matriz que puede contener elementos vacíos, vea la función each(). prev() se comporta igual que next(), excepto que rebobina el puntero interno una posición en lugar de avanzarlo. Vea también: current(), end() next() y reset() rango (unknown) Crea una matriz que contiene un rango de enteros 204
  • 277. Matrices array rango ( int bajo, int alto) linebreak rango() devuelve una matriz de enteros desde bajo hasta alto, ambos inclusive. Vea un ejemplo de su uso en la función shuffle(). reset (PHP 3, PHP 4 ) Fija el puntero interno de una matriz a su primer elemento mixed reset ( array matriz) linebreak reset() rebobina el puntero interno de la matriz a su primer elemento. reset() devuelve el valor del primer elemento de la matriz. Vea también: current(), each(), next(), prev(), y reset(). rsort (PHP 3, PHP 4 ) Ordena una matriz en orden inverso void rsort ( array matriz) linebreak Esta función ordena una matriz en orden inverso (mayor a menor). Ejemplo 1. Ejemplo de rsort() $frutas = array ("limón", "naranja", "plátano", "manzana"); rsort ($frutas); for (reset ($frutas); list ($clave, $valor) = each ($frutas); ) { echo "frutas[$clave] = ", $valor, "n"; } Este ejemplo mostrará: frutas[0] = plátano frutas[1] = naranja frutas[2] = manzana frutas[3] = limón Las frutas han sido ordenadas en orden alfabético inverso. Vea también: arsort(), asort(), ksort(), sort(), y usort(). shuffle (PHP 3>= 3.0.8, PHP 4 ) Mezcla una matriz void shuffle ( array matriz) linebreak Esta función mezcla (cambia aleatoriamente el orden de los elementos de) una matriz. 205
  • 278. Matrices Ejemplo 1. Ejemplo de shuffle() $numeros = range (1,20); srand (time()); shuffle ($numeros); while (list(, $numero) = each ($numeros)) { echo "$numero "; } Vea también: arsort(), asort(), ksort(), rsort(), sort() y usort(). sizeof (PHP 3, PHP 4 ) Obtiene el número de elementos de una matriz int sizeof ( array matriz) linebreak Devueve el número de elementos de la matriz. Vea también: count() sort (PHP 3, PHP 4 ) Ordena una matriz void sort ( array matriz) linebreak Esta función ordena una matriz. Los elementos estarán ordenados de menor a mayor cuando la función termine. Ejemplo 1. Ejemplo de sort() $frutas = array ("limón", "naranja", "plátano", "manzana"); sort ($frutas); for (reset ($frutas); $clave = key ($frutas); next ($frutas)) { echo "frutas[$clave] = ".$frutas[$clave]."n"; } Este ejemplo mostrará: frutas[0] = limón frutas[1] = manzana frutas[2] = naranja frutas[3] = plátano Las frutas han sido ordenadas en orden alfabético. Vea también: arsort(), asort(), ksort(), rsort(), y usort(). 206
  • 279. Matrices uasort (PHP 3>= 3.0.4, PHP 4 ) Ordena una matriz mediante una función de comparación definida por el usuario y mantiene la asociación de índices void uasort ( array matriz, function func_comparar) linebreak Esta función ordena una matriz de modo que los índices de la misma mantengan su correlación con los elementos a los que están asociados. Esto se utiliza principalmente para ordenar matrices asociativas en las que el orden de los elementos es importante. La función de comparación viene definida por el usuario. uksort (PHP 3>= 3.0.4, PHP 4 ) Ordena una matriz por claves mediante una función definida por el usuario void uksort ( array matriz, function func_comparar) linebreak Esta función ordenará las claves de una matriz utilizando una función de comparación suministrada por el usuario. Si la matriz a ordenar necesita utilizar un criterio poco trivial, esta es la función que deberá usar. Ejemplo 1. Ejemplo de uksort() function micomparar ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array (4 => "cuatro", 3 => "tres", 20 => "veinte", 10 => "diez"); uksort ($a, micomparar); while (list ($clave, $valor) = each ($a)) { echo "$clave: $valorn"; } Este ejemplo mostrará: 20: veinte 10: diez 4: cuatro 3: tres Vea también: arsort(), asort(), uasort(), ksort(), rsort(), y sort(). usort (PHP 3>= 3.0.3, PHP 4 ) Ordena una matriz por valores mediante una funcion definida por el usuario void usort ( array matriz, function func_comparar) linebreak Esta función ordenará una matriz por sus valores utilizando una función suministrada por el usuario. Si la matriz que desea ordenar necesita utilizar un criterio poco trivial, esta es la función que deberá usar. 207
  • 280. Matrices La función de comparación deberá devolver un entero menor, igual, o mayor que cero, si el primer argumento se considera respectivamente menor que, igual que, o mayor que el segundo. Si dos miembros resultan ser iguales, su orden en la matriz ordenada será cualquiera. Ejemplo 1. Ejemplo de usort() function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array (3, 2, 5, 6, 1); usort ($a, cmp); while (list ($clave, $valor) = each ($a)) { echo "$clave: $valorn"; } Este ejemplo mostrará: 0: 6 1: 5 2: 3 3: 2 4: 1 Nota: Obviamente en este caso trivial la función rsort() habría sido más apropiada. Aviso La función quicksort subyacente en ciertas librerías de C (tales como las de Solaris) pueden hacer que el PHP falle si la función de comparación no devuelve valores consistentes. Vea también: arsort(), asort(), ksort(), rsort() y sort(). 208
  • 281. III. Funciones Aspell [deprecated] Introducción La función aspell() permite comprobar la ortografía de una palabra y ofrece alternativas a la misma. Requerimientos aspell funciona solamente con versiones muy antiguas (hasta la .27.* mas ó menos) de la biblioteca aspell. Ni este módulo ni las versiones de la biblioteca aspell se soportan actualmente. Si quereis utilizar capacidades de comprobación ortográfica en php, usar pspell. Utiliza la biblioteca pspell y funciona con versiones recientes de aspell. Instalación Necesitais la biblioteca aspell disponible en: http://aspell.sourceforge.net/. Ver tambien Ver tambien pspell. 209
  • 282. Aspell aspell_check-raw (PHP 3>= 3.0.7, PHP 4 ) Comprueba una palabra sin cambiarla ó intentar arreglarla [deprecated] boolean aspell_check_raw ( int dictionary_link, string word) linebreak aspell_check_raw() comprueba la ortografía de una palabra,sin cambiarla ni intentar arreglarla esté bien o mal. Si está bien, devuelve cierto (TRUE), si no lo está, devuelve falso(FALSE). Ejemplo 1. aspell_check_raw $aspell_link = aspell_new("english"); if (aspell_check_raw($aspell_link, "test")) { echo "This is a valid spelling"; } else { echo "Sorry, wrong spelling"; } aspell_check (PHP 3>= 3.0.7, PHP 4 ) Comprueba una palabra[deprecated] boolean aspell_check ( int dictionary_link, string word) linebreak aspell_check() comprueba la ortografía de una palabra, y devuelve cierto(TRUE) si la ortografía es correcta ,falso (FALSE) si no lo es . Ejemplo 1. aspell_check $aspell_link = aspell_new("english"); if (aspell_check($aspell_link, "testt")) { echo "This is a valid spelling"; } else { echo "Sorry, wrong spelling"; } 210
  • 283. Aspell aspell_new (PHP 3>= 3.0.7, PHP 4 ) Lee un nuevo diccionario [deprecated] int aspell_new ( string master, string personal) linebreak aspell_new() Abre un nuevo diccionario devolviendo el identificador de este para ser utilizado en otras funciones ortográficas. Ejemplo 1. Nuevo_diccionario $aspell_link = aspell_new("english"); aspell_suggest (PHP 3>= 3.0.7, PHP 4 ) Sugiere la ortografía para una palabra [deprecated] array aspell_suggest ( int dictionary_link, string word) linebreak aspell_suggest() devuelve una matriz con posibles correciones ortográficas para la palabra dada. Ejemplo 1. aspell_suggest $aspell_link = aspell_new("english"); if (!aspell_check($aspell_link, "test")) { $suggestions = aspell_suggest($aspell_link, "test"); foreach ($suggestions as $suggestion) { echo "Possible spelling: $suggestion<br>n"; } } 211
  • 284. IV. Funciones matemáticas de precisión arbitraria BCMath Introducción Para operaciones matemáticas de precisión arbitraria, PHP tiene disponible la Calculadora Binaria que soporta números de cualquier tamaño y precisión, representados como cadenas de texto. Requerimientos Desde PHP 4.0.4, libbcmath se encuentra incorporada en PHP. No se necesitan bibliotecas externas para esta extensión. Instalación En PHP 4, estas funciones están disponibles solamente si PHP ha sido configurado con --enable-bcmath en PHP 3, estas funciones están disponibles solamente si PHP no ha sido configurado con --disable-bcmath. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión no define ningún tipo de recurso. Constantes predefinidas Esta extensión no define ninguna constante. 212
  • 285. BCmath bcadd (PHP 3, PHP 4 ) Suma dos números de precisión arbitriaria. string bcadd ( string operando izq, string operando der [, int escala]) linebreak Suma el operando izq con el operando der y devuelve la suma en una cadena de texto. El parámetro opcional escala se usa para fijar el número de dígitos tras el punto decimal que aparecerán en el resultado. Vea también bcsub(). bccomp (PHP 3, PHP 4 ) Compara dos números de precisión arbitraria. int bccomp ( string operando izq, string operando der [, int escala]) linebreak Compara el operando izq con el operando der y devuelve el resultado como un entero. El parámetro opcional escala se usa para fijar el número de dígitos tras el punto decimal que se utilizarán en la comparación. El valor devuelto es 0 si los dos operandos son iguales. Si el operando izq es mayor que el operando der el valor devuelto es +1 y si el operando izq es menor que el operando der el valor devuelto es -1. bcdiv (PHP 3, PHP 4 ) Divide dos números de precisión arbitraria. string bcdiv ( string operando izq, string operando der [, int escala]) linebreak Divide el operando izq por el operando der y devuelve el resultado. El parámetro opcional escala fija el número de dígitos tras el punto decimal a usar en el resultado. Ver también bcmul(). bcmod (PHP 3, PHP 4 ) Obtiene el módulo de un número de precisión arbitraria. string bcmod ( string operando izq, string modulo) linebreak Obtiene el módulo del operando izq usando modulo. Ver también bcdiv(). 213
  • 286. BCmath bcmul (PHP 3, PHP 4 ) Multiplica dos números de precisión arbitraria. string bcmul ( string operando izq, string operando der [, int escala]) linebreak Multiplica el operando izq por el operando der y devuelve el resultado. El parámetro opcional escala fija el número de dígitos tras el punto decimal del resultado. Ver también bcdiv(). bcpow (PHP 3, PHP 4 ) Eleva un número de precisión arbitraria a otro. string bcpow ( string x, string y [, int escala]) linebreak Eleva x a la potencia de y. El parámetro opcional escala se puede usar para fijar el número de dígitos tras el punto decimal del resultado. Ver también bcsqrt(). bcscale (PHP 3, PHP 4 ) Fija el parámetro de escala por defecto para todas las funciones matemáticas bc. string bcscale ( int escala) linebreak Esta función fija el parámetro de escala por defecto para las subsiguientes funciones matemáticas bc que no especifican dicho parámetro explícitamente. bcsqrt (PHP 3, PHP 4 ) Obtiene la raíz cuadrada de un número de precisión arbitraria. string bcsqrt ( string operando, int escala) linebreak Devuelve la raíz cuadrada del operando. El parámetro opcional escala fija el número de dígitos tras el punto decimal del resultado. Ver también bcpow(). 214
  • 287. BCmath bcsub (PHP 3, PHP 4 ) Resta un número de precisión arbitraria de otro. string bcsub ( string operando izq, string operando der [, int escala]) linebreak Resta el operando der del operando izq y devuelve el resultado en una cadena. El parámetro opcional escala se utiliza para fijar el número de dígitos tras el punto decimal del resultado. Ver también bcadd(). 215
  • 288. V. Funciones de compresión Bzip2 Introducción Las funciones bzip2 son usadas para leer y escribir de forma transparente, ficheros comprimidos bzip2 (.bz2) Requerimientos Este módulo usa las funciones de la biblioteca bzip2 (http://sources.redhat.com/bzip2/) de Julian Seward. Instalación El soporte Bzip2 en PHP no está activado por defecto. Necesitais usar la opción de configuración --with-bz2 cuando vayais a compilar PHP, si quereis soporte bzip2. Este módulo requiere bzip2/libbzip2 versión >= 1.0.x. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión define un tipo de recurso: un puntero de fichero que identifica el fichero bz2 con el que se va a trabajar. Constantes predefinidas Esta extensión no define ninguna constante. Ejemplos Este ejemplo abre un fichero temporal, escribe una cadena literal en el y presenta el contenido de dicho 216
  • 289. Bzip2 fichero. Ejemplo 1. Ejemplo simple de bzip2 <?php $filename = "/tmp/testfile.bz2"; $str = "This is a test string.n"; // open file for writing $bz = bzopen($filename, "w"); // write string to file bzwrite($bz, $str); // close file bzclose($bz); // open file for reading $bz = bzopen($filename, "r"); // read 10 characters print bzread($bz, 10); // output until end of the file (or the next 1024 char) and close it. print bzread($bz); bzclose($bz); ?> 217
  • 290. Bzip2 bzclose (PHP 4 >= 4.0.4) Close a bzip2 file pointer int bzclose ( resource bz) linebreak Closes the bzip2 file referenced by the pointer bz. Devuelve TRUE si todo fue bien, FALSE en caso de fallo. The file pointer must be valid, and must point to a file successfully opened by bzopen(). See also bzopen(). bzcompress (PHP 4 >= 4.0.4) Compress a string into bzip2 encoded data string bzcompress ( string source [, int blocksize [, int workfactor]]) linebreak bzcompress() compresses the source string and returns it as bzip2 encoded data. The optional parameter blocksize specifies the blocksize used during compression and should be a number from 1 to 9 with 9 giving the best compression, but using more resources to do so. blocksize defaults to 4. The optional parameter workfactor controls how the compression phase behaves when presented with worst case, highly repetitive, input data. The value can be between 0 and 250 with 0 being a special case and 30 being the default value. Regardless of the workfactor, the generated output is the same. Ejemplo 1. bzcompress() Example <?php $str = "sample data"; $bzstr = bzcompress($str, 9); print( $bzstr ); ?> See also bzdecompress(). bzdecompress (PHP 4 >= 4.0.4) Decompresses bzip2 encoded data 218
  • 291. Bzip2 string bzdecompress ( string source [, int small]) linebreak bzdecompress() decompresses the source string containing bzip2 encoded data and returns it. If the optional parameter small is TRUE, an alternative decompression algorithm will be used which uses less memory (the maximum memory requirement drops to around 2300K) but works at roughly half the speed. See the bzip2 documentation (http://sources.redhat.com/bzip2/) for more information about this feature. Ejemplo 1. bzdecompress() <?php $start_str = "This is not an honest face?"; $bzstr = bzcompress($start_str); print( "Compressed String: " ); print( $bzstr ); print( "n<br>n" ); $str = bzdecompress($bzstr); print( "Decompressed String: " ); print( $str ); print( "n<br>n" ); ?> See also bzcompress(). bzerrno (PHP 4 >= 4.0.4) Returns a bzip2 error number int bzerrno ( resource bz) linebreak Returns the error number of any bzip2 error returned by the file pointer bz. See also bzerror() and bzerrstr(). bzerror (PHP 4 >= 4.0.4) Returns the bzip2 error number and error string in an array array bzerror ( resource bz) linebreak 219
  • 292. Bzip2 Returns the error number and error string, in an associative array, of any bzip2 error returned by the file pointer bz. Ejemplo 1. bzerror() Example <?php $error = bzerror($bz); echo $error["errno"]; echo $error["errstr"]; ?> See also bzerrno() and bzerrstr(). bzerrstr (PHP 4 >= 4.0.4) Returns a bzip2 error string string bzerrstr ( resource bz) linebreak Returns the error string of any bzip2 error returned by the file pointer bz. See also bzerrno() and bzerror(). bzflush (PHP 4 >= 4.0.4) Force a write of all buffered data int bzflush ( resource bz) linebreak Forces a write of all buffered bzip2 data for the file pointer bz. Devuelve TRUE si todo fue bien, FALSE en caso de fallo. See also bzread() and bzwrite(). bzopen (PHP 4 >= 4.0.4) Open a bzip2 compressed file resource bzopen ( string filename, string mode) linebreak 220
  • 293. Bzip2 Opens a bzip2 (.bz2) file for reading or writing. filename is the name of the file to open. mode is similar to the fopen() function (‘r’ for read, ‘w’ for write, etc.). If the open fails, the function returns FALSE, otherwise it returns a pointer to the newly opened file. Ejemplo 1. bzopen() Example <?php $bz = bzopen("/tmp/foo.bz2", "r"); $decompressed_file = bzread($bz, filesize("/tmp/foo.bz2")); bzclose($bz); print( "The contents of /tmp/foo.bz2 are: " ); print( "n<br>n" ); print( $decompressed_file ); ?> See also bzclose(). bzread (PHP 4 >= 4.0.4) Binary safe bzip2 file read string bzread ( resource bz [, int length]) linebreak bzread() reads up to length bytes from the bzip2 file pointer referenced by bz. Reading stops when length (uncompressed) bytes have been read or EOF is reached, whichever comes first. If the optional parameter length is not specified, bzread() will read 1024 (uncompressed) bytes at a time. Ejemplo 1. bzread() Example <?php $bz = bzopen("/tmp/foo.bz2", "r"); $str = bzread($bz, 2048); print( $str ); ?> See also bzwrite() and bzopen(). 221
  • 294. Bzip2 bzwrite (PHP 4 >= 4.0.4) Binary safe bzip2 file write int bzwrite ( resource bz, string data [, int length]) linebreak bzwrite() writes the contents of the string data to the bzip2 file stream pointed to by bz. If the optional length argument is given, writing will stop after length (uncompressed) bytes have been written or the end of string is reached, whichever comes first. Ejemplo 1. bzwrite() Example <?php $str = "uncompressed data"; $bz = bzopen("/tmp/foo.bz2", "w"); bzwrite($bz, $str, strlen($str)); bzclose($bz); ?> See also bzread() and bzopen(). 222
  • 295. VI. Funciones de calendario Introducción La extensión calendar pone a disposición una serie de funciones para simplificar la conversión entre los distintos formatos de calendario. El intermediario ó estándar en que se basa es la Cuenta de Días Juliana. La Cuenta de Días Juliana es una cuenta que comienza mucho antes que lo que mucha gente podría necesitar contar (como alrededor del 4000 AC). Para convertir entre sistemas de calendario, primero deberá convertir a la Cuenta de Días Juliana y luego al sistema de su elección. ¡La Cuenta de Días es muy diferente del Calendario Juliano! Para más informaci??? sobre la Cuenta de Días Juliana visitar http://serendipity.magnet.ch/hermetic/cal_stud/jdn.htm. Para más información sobre sistemas de calendario, visitar http://genealogy.org/~scottlee/cal-overview.html. En estas instrucciones se han incluído extractos entrecomillados de dicha página. Instalación Para que estas funciones funcionen, hay que compilar PHP con la opción --enable-calendar. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión no define ningún tipo de recurso. Constantes predefinidas Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión 223
  • 296. Calendario ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución. CAL_GREGORIAN (entero) CAL_JULIAN (entero) CAL_JEWISH (entero) CAL_FRENCH (entero) CAL_NUM_CALS (entero) CAL_DOW_DAYNO (entero) CAL_DOW_SHORT (entero) CAL_DOW_LONG (entero) CAL_MONTH_GREGORIAN_SHORT (entero) CAL_MONTH_GREGORIAN_LONG (entero) CAL_MONTH_JULIAN_SHORT (entero) CAL_MONTH_JULIAN_LONG (entero) CAL_MONTH_JEWISH (entero) CAL_MONTH_FRENCH (entero) Las siguientes constantes se pueden utilizar desde PHP 4.3.0 : CAL_EASTER_DEFAULT (entero) CAL_EASTER_ROMAN (entero) 224 CAL_EASTER_ALWAYS_GREGORIAN (entero)
  • 297. Calendario cal_days_in_month (PHP 4 >= 4.1.0) Devuelve el número de dias en un mes para un determinado año y calendario int cal_days_in_month ( int calendario, int mes, int año) linebreak Esta función devuelve el numero de dias en el mes del año para el calendario especificado calendario. Ver también jdtounix(). cal_from_jd (PHP 4 >= 4.1.0) Convierte de Cuenta de Días Juliana a un calendario soportado y devuelve información adicional. array cal_from_jd ( int jd, int calendario) linebreak cal_info (PHP 4 >= 4.1.0) Devuelve información sobre un calendario den particular. array cal_info ( int calendario) linebreak cal_to_jd (PHP 4 >= 4.1.0) Convierte de un calendario soportado a Cuenta de Días Juliana. int cal_to_jd ( int calendario, int mes, int dia, int año) linebreak easter_date (PHP 3>= 3.0.9, PHP 4 ) devuelve la marca de tiempo UNIX para la medianoche de Pascua de un año dado int easter_date ( [int anno]) linebreak Devuelve la marca de tiempo UNIX que corresponde a la medianoche de Pascua del año dado. A partir de PHP 4.3.0, el parametro anno es opcional y si se omite, usa por defecto el año en curso según "localtime". 225
  • 298. Calendario Aviso: Esta función generará un aviso si el año está fuera del rango para las marcas de tiempo del UNIX (es decir, antes de 1970 o después del 2037). Ejemplo 1. ejemplo de easter_date() echo date ("M-d-Y", easter_date(1999)); /* "Apr-04-1999" */ echo date ("M-d-Y", easter_date(2000)); /* "Apr-23-2000" */ echo date ("M-d-Y", easter_date(2001)); /* "Apr-15-2001" */ La fecha del Día de Pascua fue definida por el Concilio de Nicea en el 325 D.C. como el domingo tras la primera luna llena que cayera en ó después del equinoccio de Primavera. El equinoccio se supone que siempre cae en el 21 de marzo, de modo que el cálculo se reduce a determinar la fecha de la luna llena y la del domingo siguiente. El algoritmo usado aquí fue introducido en el año 532 por Dionisio Exiguo. Bajo el Calendario Juliano (para años anteriores al 1753), se usa un ciclo simple de 19 años para calcular las fases de la luna. Bajo el Calendario Gregoriano (años posteriores al 1753, diseñado por Clavio y Lilio, e introducido por el Papa Gregorio XIII en Octubre de 1582, y en Gran Bretaña y sus colonias en septiembre de 1752) se añaden dos factores de corrección para hacer el ciclo más preciso. (El código se basa en un programa en C de Simon Kershaw, <webmaster@ely.anglican.org>) Ver easter_days() para calcular la Pascua antes del 1970 o después del 2037. easter_days (PHP 3>= 3.0.9, PHP 4 ) Obtiene el número de días tras el 21 de marzo en que cae la Pascua en un año dado int easter_days ( [int anno [, int metodo]]) linebreak Devuelve el número de días tras el 21 de marzo en que cae la Pascua en un año dado. Si no se especifica año, se asume el actual. A partir de PHP 4.3.0, el parametro anno es opcional y si se omite, usa por defecto el año en curso según "localtime". El parámetro metodo fue introducido en la version PHP 4.3.0 y permite calcular fechas de pascua basadas en el Calendario Gregoriano durante los años 1582 - 1752 si se le da el valor CAL_EASTER_ROMAN. Ver las constantes de calendario para más información sobre estas constantes. Esta función se puede usar en lugar de easter_date() para calcular la Pascua para años que se salen del rango de las marcas de fecha del UNIX (o sea, antes del 1970 o después del 2037). Ejemplo 1. ejemplo de easter_date() echo easter_days (1999); /* 14, i.e. April 4 */ echo easter_days (1492); /* 32, i.e. April 22 */ echo easter_days (1913); /* 2, i.e. March 23 */ 226
  • 299. Calendario La fecha del Día de Pascua fue definida por el Concilio de Nicea en el 325 D.C. como el domingo tras la primera luna llena que cayera en o después del equinoccio de Primavera. El equinoccio se supone que siempre cae en el 21 de marzo, de modo que el cálculo se reduce a determinar la fecha de la luna llena y la del domingo siguiente. El algoritmo usado aquí fue introducido en el año 532 por Dionisio Exiguo. Bajo el Calendario Juliano (para años anteriores al 1753), se usa un ciclo simple de 19 años para calcular las fases de la luna. Bajo el Calendario Gregoriano (años posteriores al 1753, diseñado por Clavio y Lilio, e introducido por el Papa Gregorio XIII en Octubre de 1582, y en Gran Bretaña y sus colonias en septiembre de 1752) se añaden dos factores de corrección para hacer el ciclo más preciso. (El código se basa en un programa en C de Simon Kershaw, <webmaster@ely.anglican.org>) Vea también easter_date(). FrenchToJD (PHP 3, PHP 4 ) Convierte del Calendario Republicano Francés a la Cuenta de Días Juliana int frenchtojd ( int mes, int dia, int anno) linebreak Convierte una fecha del Calendario Republicano Francés a la Cuenta de Días Juliana. Estas rutinas sólo convierten fechas entre los años 1 y 14 (fechas Gregorianas del 22 de septiembre de 1792 al 22 de septiembre de 1806). Esto cubre ampliamente el periodo en el que estuvo en uso este calendario. GregorianToJD (PHP 3, PHP 4 ) Convierte de fecha Gregoriana a la Cuenta de Días Juliana int gregoriantojd ( int mes, int dia, int anno) linebreak El rango válido para el Calendario Gregoriano es desde el 4714 A.C. hasta el 9999 D.C. Aunque este programa puede manejar fechas tan lejanas como el 4714 A.C., usarlo no tendría sentido. El calendario Gregoriano fue instituído el 15 de octubre de 1582 (o el 5 de octubre de 1582 en el calendario Juliano). Algunos países no lo aceptaron hasta mucho después. Por ejemplo, Gran Bretaña se convirtió en 1752, la URSS en 1918 y Grecia en 1923. Muchos países europeos usaron el calendario Juliano antes que el Gregoriano. Ejemplo 1. Funciones de calendario <?php $jd = GregorianToJD (10,11,1970); echo "$jdn"; 227
  • 300. Calendario $gregorian = JDToGregorian ($jd); echo "$gregoriann"; ?> JDDayOfWeek (PHP 3, PHP 4 ) Devuelve el día de la semana mixed jddayofweek ( int diajuliano, int modo) linebreak Devuelve el día de la semana. Dependiendo del modo, devuelve un entero ó una cadena. Tabla 1. Modos para el día de la semana Modo Significado 0 devuelve el día de la semana como entero (0=domingo, 1=lunes, etc) 1 devuelve una cadena con el día de la semana (inglés, gregoriano) 2 devuelve una cadena con el día de la semana abreviado (inglés, gregoriano) JDMonthName (PHP 3, PHP 4 ) Devuelve el nombre de un mes string jdmonthname ( int diajuliano, int modo) linebreak Devuelve una cadena que contiene el nombre del mes. modo le dice a esta función a qué calendario debe convertir la Cuenta de Días Juliana, y qué tipo de nombres de mes debe devolver. Tabla 1. Modos de calendario Modo Significado Valores 0 Gregoriano - abreviado Jan, Feb, Mar, Apr 1 Gregoriano January, February, 2 Juliano - abreviado Jan, Feb, Mar, Apr 3 Juliano January, February, 4 Judío Tishri, Heshvan, K 228
  • 301. Calendario Modo Significado Valores 5 Republicano Francés Vendemiaire, Brum JDToFrench (PHP 3, PHP 4 ) Convierte de Cuenta de Días al Calendario Republicano Francés string jdtofrench ( int diajuliano) linebreak Convierte una Cuenta de Días Juliana al Calendario Republicano Francés. JDToGregorian (PHP 3, PHP 4 ) Convierte de Cuenta de Días a fecha Gregoriana string jdtogregorian ( int diajuliano) linebreak Convierte de Cuenta de Días Juliana a una cadena que contiene la fecha Gregoriana en formato "mes/día/año" JDToJewish (PHP 3, PHP 4 ) Convierte de Cuenta de Días Juliana a Calendario Judío string jdtojewish ( int diajuliano) linebreak Convierte una Cuenta de Días Juliana al Calendario Judío. JDToJulian (PHP 3, PHP 4 ) Convierte de Cuenta de Días Juliana a Calendario Juliano string jdtojulian ( int diajuliano) linebreak Convierte una Cuenta de Días Juliana a una cadena que contiene la fecha del Calendario Juliano en formato "mes/día/año". 229
  • 302. Calendario jdtounix (PHP 4 ) Convierte un dia Juliano a UNIX timestamp int jdtounix ( int jday) linebreak Esta funció devuelve el "UNIX timestamp" correspondiante a el dia Juliano definido en jday ó falso (FALSE) si jday no se encuentra en la ??? UNIX (años entre 1970 y 2037 ó 2440588 <= jday <= 2465342 ). El tiempo devuelto es localtime (y no GMT). Ver también unixtojd(). JewishToJD (PHP 3, PHP 4 ) Convierte del Calendario Judío a la Cuenta de Días Juliana int jewishtojd ( int mes, int dia, int anno) linebreak Aunque este programa puede manejar fechas tan lejanas como el año 1 (3761 A.C.), usarlo no tendría sentido. El Calendario Judío ha estado en uso miles de años, pero en los días primeros no había una fórmula que calculara el comienzo de un mes. Un mes comenzaba cuando se veía por primera vez la luna nueva. JulianToJD (PHP 3, PHP 4 ) Convierte de Calendario Juliano a Cuenta de Días Juliana int juliantojd ( int mes, int dia, int anno) linebreak Rango válido para el Calendario Juliano: del 4713 A.C al 9999 D.C. Aunque este programa puede manejar fechas tan lejanas como el 4713 A.C., usarlo no tendría sentido. El calendario se creó en el 46 A.C., pero sus detalles no se estabilizaron hasta al menos el 8 D.C., y quizás no lo hiciera hasta el siglo IV. Además, el comienzo de un año variaba de una a otra cultura: no todas aceptaban enero como el primer mes. Atención Recordar que el actual sistema de calendario en uso en todo el mundo es el calendario Gregoriano. gregoriantojd() puede ser usada para convertir los dias del calendario Gregoriano a Cuenta de Días Juliana. 230
  • 303. Calendario unixtojd (PHP 4 ) Convierte de UNIX timestamp a dia Juliano int unixtojd ( [int timestamp]) linebreak Devuelve el dia Juliano correspondiente a un UNIX timestamp (segundos desde 01.01.1970), ó al dia actual si no se especifica timestamp Ver tambienjdtounix(). 231
  • 304. VII. Funciones del API de CCVS Introducción Estas funciones interaccionan con el API de CCVS, permitiendo trabajar con CCVS directamente desde un script PHP. CCVS es la solución de RedHat (http://www.redhat.com/) para el intermediario en el procesamiento de tarjetas de crédito. Permite conectar directamente con las centrales de las tarjetas desde una máquina *nix con un módem. Nota: CCVS ha sido discontinuado por Red Hat y no existen planes de ofrecer nuevas funcionalidades ó contratos de ayuda. Los que necesiten usar esta funcionalidad pueden probar MCVE by Main Street Softworks (http://www.mcve.com/). Es similar en diseño y tiene documentación para su uso con PHP Instalación Para activar el soporte de CCVS en PHP hay que tener instalado CCVS en vuestro sistema. Seguidamente es necesario configurar PHP con la opción --with-ccvs. Si se usa esta opcion sin especificar el directorio donde CCVS está instalado, PHP intentará encontrar CCVS en la localización por defecto (/usr/local/ccvs). Si CCVS está instalado en una localización no estándar, ejecutar configure con: --with-ccvs=$ccvs_path, donde $ccvs_path es el directorio donde CCVS esta instalado. Tener en cuenta que el soporte de CCVS en PHP necesita que $ccvs_path/lib y $ccvs_path/include existan, que cv_api.h se encuentre en el directorio include y que libccvs.a se encuentre en el directorio lib. Adicionalmente se necesita un proceso ccvs ejecutandose en el sistema para las configuraciones que se ejecuten desde PHP. Los procesos PHP deben ejecutarse bajo el mismo usuario que use CCVS (p.ej. Si ccvs usa el usuario ’ccvs’, PHP debe ejecutarse como ’ccvs’ tambien). Ver tambien Información adicional sobre CCVS se puede encontrar en http://www.redhat.com/products/ccvs. Red Hat casi no mantiene la documentación de CCVS, pero todavia es de gran ayuda, se puede encontrar en http://www.redhat.com/products/ccvs/support/CCVS3.3docs/ProgPHP.html (http://www.redhat.com/products/ccvs/support/CCVS3.3docs/ProgPHP.html). 232
  • 305. CCVS ccvs_add (PHP 4 >= 4.0.2) Añadir datos a una transacción cadena ccvs_add ( cadena sesión, cadena factura, cadena argtype, cadena argval) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_auth (PHP 4 >= 4.0.2) Realiza un test de una autorización a crédito en una transacción cadena ccvs_auth ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_command (PHP 4 >= 4.0.2) Ejecuta un comando que es peculiar para un protocolo concreto, y que no está disponible en el API general de CCVS cadena ccvs_command ( cadena sesión, cadena tipo, cadena argval) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 233
  • 306. CCVS ccvs_count (PHP 4 >= 4.0.2) Encuentra cuantas transacciones de un tipo dado están almacenadas en el sistema entero ccvs_count ( cadena sesión, cadena tipo) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_delete (PHP 4 >= 4.0.2) Borra una transacción cadena ccvs_delete ( cadena sesi???, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_done (PHP 4 >= 4.0.2) Finaliza el motor de CCVS y hace una limpieza cadena ccvs_done ( cadena sesió) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 234
  • 307. CCVS ccvs_init (PHP 4 >= 4.0.2) Inicializa un CCVS para usarlo cadena ccvs_init ( cadena nombre) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_lookup (PHP 4 >= 4.0.2) Busca un item de un tipo en particular en la base de datos # cadena ccvs_lookup ( cadena sesión, cadena factura, entero inum) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_new (PHP 4 >= 4.0.2) Crea una nueva, transacción en blanco cadena ccvs_new ( cadena sesión, cadena cadena) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 235
  • 308. CCVS ccvs_report (PHP 4 >= 4.0.2) Devuelve el estado del proceso de comunicación en background cadena ccvs_report ( cadena sesión, cadena tipo) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_return (PHP 4 >= 4.0.2) Transfiere fondos del comerciante al titular de la tarjeta cadena ccvs_return ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_reverse (PHP 4 >= 4.0.2) Realiza una revocación completa en una autorización ya procesada cadena ccvs_reverse ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 236
  • 309. CCVS ccvs_sale (PHP 4 >= 4.0.2) Transfiere fondos del titular de la tarjeta al comerciante cadena ccvs_sale ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_status (PHP 4 >= 4.0.2) Chequear el estado de una factura cadena ccvs_status ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. ccvs_textvalue (PHP 4 >= 4.0.2) Obtiene el valor de retorno de texto para una llamada anterior a una función cadena ccvs_textvalue ( cadena sesión) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 237
  • 310. CCVS ccvs_void (PHP 4 >= 4.0.2) Realizar una revocación completa en una transacción completada cadena ccvs_void ( cadena sesión, cadena factura) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 238
  • 311. VIII. soporte de las funciones COM para Windows Estas funciones solo están disponibles en la versión para Windows de PHP. Estas funciones han sido añadidas en PHP4. 239
  • 312. COM COM (unknown) COM class Synopsis $obj = new COM("server.object") The COM class provides a framework to integrate (D)COM components into your php scripts. string COM::COM ( string module_name [, string server_name [, int codepage]]) linebreak COM class constructor. Parameters: module_name name or class-id of the requested component. server_name name of the DCOM server from which the component should be fetched. If NULL, localhost is assumed. To allow DCOM com.allow_dcom has to be set to TRUE in php.ini. codepage specifies the codepage that is used to convert php-strings to unicode-strings and vice versa. Possible values are CP_ACP, CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP, CP_UTF7 and CP_UTF8. Ejemplo 1. COM example (1) // starting word $word = new COM("word.application") or die("Unable to instanciate Word"); print "Loaded Word, version {$word->Version}n"; //bring it to front $word->Visible = 1; //open an empty document $word->Documents->Add(); //do some weird stuff $word->Selection->TypeText("This is a test..."); $word->Documents[1]->SaveAs("Useless test.doc"); //closing word $word->Quit(); 240
  • 313. COM //free the object $word->Release(); $word = null; Ejemplo 2. COM example (2) $conn = new COM("ADODB.Connection") or die("Cannot start ADO"); $conn->Open("Provider=SQLOLEDB; Data Source=localhost; Initial Catalog=database; User ID=user; Password=password"); $rs = $conn->Execute("SELECT * FROM sometable"); // Recordset $num_columns = $rs->Fields->Count(); echo $num_columns . "n"; for ($i=0; $i < $num_columns; $i++) { $fld[$i] = $rs->Fields($i); } $rowcount = 0; while (!$rs->EOF) { for ($i=0; $i < $num_columns; $i++) { echo $fld[$i]->value . "t"; } echo "n"; $rowcount++; // increments rowcount $rs->MoveNext(); } $rs->Close(); $conn->Close(); $rs->Release(); $conn->Release(); $rs = null; $conn = null; 241
  • 314. COM VARIANT (unknown) VARIANT class Synopsis $vVar = new VARIANT($var) A simple container to wrap variables into VARIANT structures. string VARIANT::VARIANT ( [mixed value [, int type [, int codepage]]]) linebreak VARIANT class constructor. Parameters: value initial value. if omitted an VT_EMPTY object is created. type specifies the content type of the VARIANT object. Possible values are VT_UI1, VT_UI2, VT_UI4, VT_I1, VT_I2, VT_I4, VT_R4, VT_R8, VT_INT, VT_UINT, VT_BOOL, VT_ERROR, VT_CY, VT_DATE, VT_BSTR, VT_DECIMAL, VT_UNKNOWN, VT_DISPATCH and VT_VARIANT. These values are mutual exclusive, but they can be combined with VT_BYREF to specify being a value. If omitted, the type of value is used. Consult the msdn library for additional information. codepage specifies the codepage that is used to convert php-strings to unicode-strings and vice versa. Possible values are CP_ACP, CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP, CP_UTF7 and CP_UTF8. com_addref (PHP 4 >= 4.1.0) Increases the components reference counter. void com_addref ( void) linebreak Increases the components reference counter. com_get (PHP 3>= 3.0.3, PHP 4 >= 4.0.5) ??? 242
  • 315. COM mixed com_get ( resource object, string property) linebreak com_invoke (PHP 3>= 3.0.3) ??? mixed com_invoke ( resource object, string function_name [, mixed function parameters, ...]) linebreak com_isenum (PHP 4 >= 4.1.0) Grabs an IEnumVariant void com_isenum ( object com_module) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. com_load_typelib (PHP 4 >= 4.1.0) Loads a Typelib void com_load_typelib ( string typelib_name [, int case_insensitive]) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. com_load (PHP 3>= 3.0.3) ??? 243
  • 316. COM string com_load ( string module name [, string server name]) linebreak com_propget (PHP 3>= 3.0.3, PHP 4 >= 4.0.5) ??? mixed com_propget ( resource object, string property) linebreak com_propput (PHP 3>= 3.0.3, PHP 4 >= 4.0.5) ??? void com_propput ( resource object, string property, mixed value) linebreak com_propset (PHP 3>= 3.0.3, PHP 4 >= 4.0.5) ??? void com_propset ( resource object, string property, mixed value) linebreak Esta función es un alias para com_propput(). com_release (PHP 4 >= 4.1.0) Decreases the components reference counter. void com_release ( void) linebreak Decreases the components reference counter. com_set (PHP 3>= 3.0.3, PHP 4 >= 4.0.5) ??? void com_set ( resource object, string property, mixed value) linebreak Esta función es un alias para com_set(). 244
  • 317. IX. Funciones de Clases/Objectos Introducción Estas funciones permiten obtener informacion sobre clases y objetos. Se puede obtener el nombre de la clase a la que pertenece un objeto, asi como las propiedades de sus miembros y métodos. Usando estas funciones se puede obtener no solo lo comentado en la frase anterior, tambien se puede obtener la familia del objeto (p.ej. que clase está extendiendo la clase a la que pertenece el objeto) Ejemplos En este ejemplo, definimos primero una clase base y una extensión de esta clase. La clase base define un vegetal genérico, si es comestible y su color. La subclase Spinach añade un metodo para cocinarlo y otro para saber si esta cocinado. Ejemplo 1. classes.inc <?php // base class with member properties and methods class Vegetable { var $edible; var $color; function Vegetable( $edible, $color="green" ) { $this->edible = $edible; $this->color = $color; } function is_edible() { return $this->edible; } function what_color() { return $this->color; } } // end of class Vegetable // extends the base class class Spinach extends Vegetable { var $cooked = false; function Spinach() { 245
  • 318. Clases/Objetos $this->Vegetable( true, "green" ); } function cook_it() { $this->cooked = true; } function is_cooked() { return $this->cooked; } } // end of class Spinach ?> Creamos 2 objetos de estas clases e imprimimos información sobre ellos, incluyendo la jerarquia de clases a la que pertenecen. También definimos algunas funciones, especialmente para imprimir las variables de una manera ordenada. Ejemplo 2. test_script.php <pre> <?php include "classes.inc"; // utility functions function print_vars($obj) { $arr = get_object_vars($obj); while (list($prop, $val) = each($arr)) echo "t$prop = $valn"; } function print_methods($obj) { $arr = get_class_methods(get_class($obj)); foreach ($arr as $method) echo "tfunction $method()n"; } function class_parentage($obj, $class) { global $$obj; if (is_subclass_of($$obj, $class)) { echo "Object $obj belongs to class ".get_class($$obj); echo " a subclass of $classn"; } else { echo "Object $obj does not belong to a subclass of $classn"; } 246
  • 319. Clases/Objetos } // instantiate 2 objects $veggie = new Vegetable(true,"blue"); $leafy = new Spinach(); // print out information about objects echo "veggie: CLASS ".get_class($veggie)."n"; echo "leafy: CLASS ".get_class($leafy); echo ", PARENT ".get_parent_class($leafy)."n"; // show veggie properties echo "nveggie: Propertiesn"; print_vars($veggie); // and leafy methods echo "nleafy: Methodsn"; print_methods($leafy); echo "nParentage:n"; class_parentage("leafy", "Spinach"); class_parentage("leafy", "Vegetable"); ?> </pre> One important thing to note in the example above is that the object $leafy is an instance of the class Spinach which is a subclass of Vegetable, therefore the last part of the script above will output: [...] Parentage: Object leafy does not belong to a subclass of Spinach Object leafy belongs to class spinach a subclass of Vegetable 247
  • 320. Clases/Objetos call_user_method_array (PHP 4 >= 4.0.5) Call a user method given with an array of parameters [deprecated] mixed call_user_method_array ( string method_name, object obj [, array paramarr]) linebreak Aviso The call_user_method_array() function is deprecated as of PHP 4.1.0, use the call_user_func_array() variety with the array(&$obj, "method_name") syntax instead. Calls the method referred by method_name from the user defined obj object, using the parameters in paramarr. See also: call_user_func_array(), call_user_func(), call_user_method(). Nota: This function was added to the CVS code after release of PHP 4.0.4pl1 call_user_method (PHP 3>= 3.0.3, PHP 4 ) Call a user method on an specific object [deprecated] mixed call_user_method ( string method_name, object obj [, mixed parameter [, mixed ...]]) linebreak Aviso The call_user_method() function is deprecated as of PHP 4.1.0, use the call_user_func() variety with the array(&$obj, "method_name") syntax instead. Calls the method referred by method_name from the user defined obj object. An example of usage is below, where we define a class, instantiate an object and use call_user_method() to call indirectly its print_info method. <?php class Country { var $NAME; var $TLD; function Country($name, $tld) { $this->NAME = $name; $this->TLD = $tld; } 248
  • 321. Clases/Objetos function print_info($prestr="") { echo $prestr."Country: ".$this->NAME."n"; echo $prestr."Top Level Domain: ".$this->TLD."n"; } } $cntry = new Country("Peru","pe"); echo "* Calling the object method directlyn"; $cntry->print_info(); echo "n* Calling the same method indirectlyn"; call_user_method ("print_info", $cntry, "t"); ?> See also call_user_func_array(), call_user_func(), and call_user_method_array(). class_exists (PHP 4 ) Checks if the class has been defined bool class_exists ( string class_name) linebreak This function returns TRUE if the class given by class_name has been defined, FALSE otherwise. get_class_methods (PHP 4 ) Devuelve un vector (matriz unidimensional) con los nombres de los métodos de la clase en question. vector get_class_methods ( string class_name) linebreak Esta función devuelve un vector con los nombres de los métodos definidos en la clase especificada como class_name. Nota: A partir de PHP 4.0.6, se puede especificar el objeto a sí mismo en vez de class_name. Por ejemplo: $class_methods = get_class_methods($my_class); // see below the full example 249
  • 322. Clases/Objetos Ejemplo 1. get_class_methods() ejemplo <?php class myclass { // constructor function myclass() { return(TRUE); } // method 1 function myfunc1() { return(TRUE); } // method 2 function myfunc2() { return(TRUE); } } $my_object = new myclass(); $class_methods = get_class_methods(get_class($my_object)); foreach ($class_methods as $method_name) { echo "$method_namen"; } ?> Producira: myclass myfunc1 myfunc2 Ver también get_class_vars() y get_object_vars(). 250
  • 323. Clases/Objetos get_class_vars (PHP 4 ) Devuelve un vector con las propiedades (inicializadas por defecto) de la clase array get_class_vars ( string class_name) linebreak Esta función devuelve un vector con las propiedades que han sido inicializadas por defecto en la clase. Los elementos de este vector están estan organizados de la forma varname => value. Nota: Las variables de la clase que no estén inicializadas, no será presentadas por get_class_vars(). Ejemplo 1. get_class_vars() ejemplo <?php class myclass { var $var1; // this has no default value... var $var2 = "xyz"; var $var3 = 100; // constructor function myclass() { return(TRUE); } } $my_class = new myclass(); $class_vars = get_class_vars(get_class($my_class)); foreach ($class_vars as $name => $value) { echo "$name : $valuen"; } ?> Producira: var2 : xyz var3 : 100 251
  • 324. Clases/Objetos Ver también get_class_methods(), get_object_vars() get_class (PHP 4 ) Returns the name of the class of an object string get_class ( object obj) linebreak This function returns the name of the class of which the object obj is an instance. Returns FALSE if obj is not an object. Nota: get_class() returns a user defined class name in lowercase. A class defined in a PHP extension is returned in its original notation. See also get_parent_class(), gettype(), and is_subclass_of(). get_declared_classes (PHP 4 ) Returns an array with the name of the defined classes array get_declared_classes ( void) linebreak This function returns an array of the names of the declared classes in the current script. Nota: In PHP 4.0.1pl2, three extra classes are returned at the beginning of the array: stdClass (defined in Zend/zend.c), OverloadedTestClass (defined in ext/standard/basic_functions.c) and Directory (defined in ext/standard/dir.c). Also note that depending on what libraries you have compiled into PHP, additional classes could be present. This means that you will not be able to define your own classes using these names. There is a list of predefined classes in the Predefined Classes section of the appendices. get_object_vars (PHP 4 ) Devuelve un vector de propiedades del objecto array get_class_vars ( object obj) linebreak 252
  • 325. Clases/Objetos Esta función devuelve un vector con las propiedades definidas en el objecto especificado como obj. Las variables declaradas en la clase a la que pertenece obj, que no les ha sido asignado un valor, no serán devueltas en el vector. Ejemplo 1. Uso de get_object_vars() <?php class Point2D { var $x, $y; var $label; function Point2D($x, $y) { $this->x = $x; $this->y = $y; } function setLabel($label) { $this->label = $label; } function getPoint() { return array("x" => $this->x, "y" => $this->y, "label" => $this->label); } } // "$label" is declared but not defined $p1 = new Point2D(1.233, 3.445); print_r(get_object_vars($p1)); $p1->setLabel("point #1"); print_r(get_object_vars($p1)); ?> El resultado de este programa es: Array ( [x] => 1.233 [y] => 3.445 ) Array ( [x] => 1.233 [y] => 3.445 [label] => point #1 253
  • 326. Clases/Objetos ) Ver tambien get_class_methods() y get_class_vars()! get_parent_class (PHP 4 ) Retrieves the parent class name for object or class string get_parent_class ( mixed obj) linebreak If obj is an object, returns the name of the parent class of the class of which obj is an instance. If obj is a string, returns the name of the parent class of the class with that name. This functionality was added in PHP 4.0.5. See also get_class() and is_subclass_of() is_a (PHP 4 >= 4.2.0) Returns TRUE if the object is of this class or has this class as one of its parents bool is_a ( object object, string class_name) linebreak This function returns TRUE if the object is of this class or has this class as one of its parents, FALSE otherwise. See also get_class(), get_parent_class(), and is_subclass_of(). is_subclass_of (PHP 4 ) Returns TRUE if the object has this class as one of its parents bool is_subclass_of ( object object, string class_name) linebreak This function returns TRUE if the object object, belongs to a class which is a subclass of class_name, FALSE otherwise. See also get_class(), get_parent_class() and is_a(). 254
  • 327. Clases/Objetos method_exists (PHP 4 ) Comprueba que el metódo de clase existe bool method_exists ( object object, string method_name) linebreak Esta función devuelve verdadero (TRUE) si el metódo referido por method_name ha sido definido en el objecto object, en cualquier otro caso devuelve falso (FALSE) 255
  • 328. X. Funciones de ClibPDF ClibPDF Le permite crear documentos PDF con PHP. Está disponible en FastIO (http://www.fastio.com) pero no es software libre. Debería leer la licencia antes de comenzar a utilizar ClibPDF. Si usted no puede cumplir el acuerdo de la licencia considere el utilizar la pdflib de Thomas Merz, que tambien es muy potente. La funcionalidad y la API de ClibPDF son similares a la pdflib de Thomas Merz pero, de acuerdo con FastIO, ClibPDF es mas rápida y crea documentos mas pequeños. Esto puede haber cambiado con la nueva versión 2.0 de pdflib. Un simple banco de pruebas (el ejemplo pdfclock.c de pdflib 2.0 trasformado en un script php) en realidad no muestra ninguna diferencia en velocidad. Por tanto, pruebe las dos y vea cual hace el mejor trabajo para usted. Esta documentación debería ser leída junto con el manual de ClibPDF ya que este explica la librería con mucho mas detalle. Muchas funciones en le ClibPDF nativa y el módulo PHP, así como en pdflib, tienen el mismo nombre. Todas las funciones excepto cpdf_open() toman el manejador del documento com el primer parámetro. Actualmente este manejador no se usa internamente desde que ClibPDF no soporta la creación de varios documentos PDF al mismo tiempo. Realmente, ni debería intentarlo, los resultados son impredecibles. No puedo supervisar cuales son las consecuencias en un sistema multihilo. De acuerdo con el autor de ClibPDF, esto cambiará en alguno de las próximas veriones (la versión actual, cuando eto fue escrito es 1.10). Si usted necesita esta capacidad, use el módulo pdflib. Nota: La función cpdf_set_font() ha cambiado desde que PHP3 soporta fuentes asiáticas. El parámetro que codifica ya no es un entero sino una cadena. Una gran ventaja de ClibPDF sobre pdflib es la posibilidad de crear el documento PDF completamente en memoria sin usar ficheros temporales. Esto también proporciona la capaciad de pasar coordenadas en una unidad de longitud predefinida. Esta es una cualidad útil pero puede ser simulada con pdf_translate(). La mayoría de las funciones son fáciles de usar. La parte mas difícil es, probablemente, crear un documento PDF muy simple. El siguiente ejemplo debería ayudarle a comenzar. En él se crea un documento con una página. La página contiene el texto "Times-Roman" con una fuente de 30pt. El texto está subrayado. Ejemplo 1. Ejemplo simple de ClibPDF <?php $cpdf = cpdf_open(0); cpdf_page_init($cpdf, 1, 0, 595, 842); cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1"); cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding"); cpdf_set_text_rendering($cpdf, 1); cpdf_text($cpdf, "Times Roman outlined", 50, 750); cpdf_moveto($cpdf, 50, 740); cpdf_lineto($cpdf, 330, 740); cpdf_stroke($cpdf); cpdf_finalize($cpdf); Header("Content-type: application/pdf"); cpdf_output_buffer($cpdf); cpdf_close($cpdf); 256
  • 329. ClibPDF ?> La distribución de pdflib contiene un ejemplo mas comlejo que crea una serie de páginas con un reloj analógico. Aquí está ese ejemplo convertido en PHP usando la extensión ClibPDF: Ejemplo 2. Ejemplo con pdfclock de la distribución pdflib 2.0 <?php $radius = 200; $margin = 20; $pagecount = 40; $pdf = cpdf_open(0); cpdf_set_creator($pdf, "pdf_clock.php3"); cpdf_set_title($pdf, "Reloj Analógico"); while($pagecount-- > 0) { cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $mar- gin), 1.0); cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* limpiar */ cpdf_translate($pdf, $radius + $margin, $radius + $margin); cpdf_save($pdf); cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* cambio de minuto */ cpdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { cpdf_rotate($pdf, 6.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin/3, 0.0); cpdf_stroke($pdf); } cpdf_restore($pdf); cpdf_save($pdf); /* cambios de 5 minutos */ cpdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { cpdf_rotate($pdf, 30.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin, 0.0); cpdf_stroke($pdf); } $ltime = getdate(); /* dibujar la aguja de las horas */ 257
  • 330. ClibPDF cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime[’minutos’]/60.0) + $ltime[’horas’] - 3.0) * 30.0); cpdf_moveto($pdf, -$radius/10, -$radius/20); cpdf_lineto($pdf, $radius/2, 0.0); cpdf_lineto($pdf, -$radius/10, $radius/20); cpdf_closepath($pdf); cpdf_fill($pdf); cpdf_restore($pdf); /* dibujar el minutero */ cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime[’segundos’]/60.0) + $ltime[’minutos’] - 15.0) * 6.0); cpdf_moveto($pdf, -$radius/10, -$radius/20); cpdf_lineto($pdf, $radius * 0.8, 0.0); cpdf_lineto($pdf, -$radius/10, $radius/20); cpdf_closepath($pdf); cpdf_fill($pdf); cpdf_restore($pdf); /* dibujar la seguna mano */ cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); cpdf_setlinewidth($pdf, 2); cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime[’segundos’] - 15.0) * 6.0)); cpdf_moveto($pdf, -$radius/5, 0.0); cpdf_lineto($pdf, $radius, 0.0); cpdf_stroke($pdf); cpdf_restore($pdf); /* dibujar un pequeño círculo en el centro */ cpdf_circle($pdf, 0, 0, $radius/30); cpdf_fill($pdf); cpdf_restore($pdf); cpdf_finalize_page($pdf, $pagecount+1); } cpdf_finalize($pdf); Header("Content-type: application/pdf"); cpdf_output_buffer($pdf); cpdf_close($pdf); ?> 258
  • 331. ClibPDF cpdf_add_annotation (PHP 3>= 3.0.12, PHP 4 ) Añade una anotación void cpdf_add_annotation ( int pdf document, double llx, double lly, double urx, double ury, string title, string content, int mode) linebreak La función cpdf_add_annotation() añade una nota con la esquina inferior izquierda en (llx, lly) y la esquina superior derecha en (urx, ury). El últomo parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. cpdf_add_outline (PHP 3>= 3.0.9, PHP 4 ) Añade una marca en la página actual void cpdf_add_outline ( int pdf document, string text) linebreak La función cpdf_add_outline() añade una marca con el texto text que apunta a la página actual. Ejemplo 1. Añadiendo un contorno de página <?php $cpdf = cpdf_open(0); cpdf_page_init($cpdf, 1, 0, 595, 842); cpdf_add_outline($cpdf, 0, 0, 0, 1, "Página 1"); // ... // Algún dibujo // ... cpdf_finalize($cpdf); Header("Content-type: application/pdf"); cpdf_output_buffer($cpdf); cpdf_close($cpdf); ?> cpdf_arc (PHP 3>= 3.0.8, PHP 4 ) Dibuja un arco 259
  • 332. ClibPDF void cpdf_arc ( int pdf document, double x-koor, double y-koor, double radius, double start, double end, int mode) linebreak La función cpdf_arc() dibuja un arco con el centro rn el punto (x-koor, y-koor) y radio radius, empezando en el ángulo start y terminando en el ángulo end. El último parámetro opcional especifica el tamaño de la unidad. Si es 0 o se omite, se usa la unidad especificada por defecto. De otro modo las coordenadas son medidas en puntos postscript,despreciando la unidad actual. Vea también cpdf_circle(). cpdf_begin_text (PHP 3>= 3.0.8, PHP 4 ) Inicializa una sección de texto void cpdf_begin_text ( int pdf document) linebreak La función cpdf_begin_text() comienza una sección de texto. Debe ser terminada con cpdf_end_text(). Ejemplo 1. Salida de texto <?php cpdf_begin_text($pdf); cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding"); cpdf_text($pdf, 100, 100, "Algún texto"); cpdf_end_text($pdf) ?> Vea también cpdf_end_text(). cpdf_circle (PHP 3>= 3.0.8, PHP 4 ) Dibuja un círculo void cpdf_circle ( int pdf document, double x-koor, double y-koor, double radius, int mode) linebreak La función cpdf_circle() dibuja un círculo con centro en el punto (x-koor, y-koor) y radio radius. El último parámetro opcional define el tamaño de la unidad. Si es 0 o se omite, se usa el valor por defecto para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. Vea también cpdf_arc(). 260
  • 333. ClibPDF cpdf_clip (PHP 3>= 3.0.8, PHP 4 ) Ajusta al camino actual void cpdf_clip ( int pdf document) linebreak La función cpdf_clip() ajusta todos los dibujos al camino actual. cpdf_close (PHP 3>= 3.0.8, PHP 4 ) Cierra un documento PDF void cpdf_close ( int pdf document) linebreak La función cpdf_close() cierra un documento PDF. Esta debería ser la última operación incluso después de cpdf_finalize(), cpdf_output_buffer() y cpdf_save_to_file(). Vea también cpdf_open(). cpdf_closepath_fill_stroke (PHP 3>= 3.0.8, PHP 4 ) Cierra, llena y traza el camino actual void cpdf_closepath_fill_stroke ( int pdf document) linebreak La función cpdf_closepath_fill_stroke() cierra, llena el interior del caminoa catual con el color actual de relleno y dibuja el camino actual. Vea también cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor(). cpdf_closepath_stroke (PHP 3>= 3.0.8, PHP 4 ) Cierra el camino y dibuja una línea a lo largo del camino void cpdf_closepath_stroke ( int pdf document) linebreak La función cpdf_closepath_stroke() es una combinación de cpdf_closepath() y cpdf_stroke(). Después limpia el camino. Vea también cpdf_closepath(), cpdf_stroke(). 261
  • 334. ClibPDF cpdf_closepath (PHP 3>= 3.0.8, PHP 4 ) Cierra el camino void cpdf_closepath ( int pdf document) linebreak La función cpdf_closepath() cierra el camino actual. cpdf_continue_text (PHP 3>= 3.0.8, PHP 4 ) Pone texto en la línea siguiente void cpdf_continue_text ( int pdf document, string text) linebreak La función cpdf_continue_text() pone la cadena text en la línea siguiente. Vea también cpdf_show_xy(), cpdf_text(), cpdf_set_leading(), cpdf_set_text_pos(). cpdf_curveto (PHP 3>= 3.0.8, PHP 4 ) Dibuja una curva void cpdf_curveto ( int pdf document, double x1, double y1, double x2, double y2, double x3, double y3, int mode) linebreak La función cpdf_curveto() dibuja una curva Bezier desde el punto actual al punto (x3, y3) usando (x1, y1) y (x2, y2) como puntos de control. El último parámetro opcional especifica el tamaño de la unidad. Si es 0 o se omite, se usa la unidad especificada para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad en curso. Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_rlineto(), cpdf_lineto(). cpdf_end_text (PHP 3>= 3.0.8, PHP 4 ) Finaliza una sección de texto void cpdf_end_text ( int pdf document) linebreak La función cpdf_end_text() finaliza unasección de texto que fue inicializada con cpdf_begin_text(). 262
  • 335. ClibPDF Ejemplo 1. Salida de texto <?php cpdf_begin_text($pdf); cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding"); cpdf_text($pdf, 100, 100, "Algún texto"); cpdf_end_text($pdf) ?> Vea también cpdf_begin_text(). cpdf_fill_stroke (PHP 3>= 3.0.8, PHP 4 ) LLena y traza el camino actual void cpdf_fill_stroke ( int pdf document) linebreak La función cpdf_fill_stroke() llena el interior del camino actual con el color de relleno actual y dibuja el camino actual. Vea también cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor(). cpdf_fill (PHP 3>= 3.0.8, PHP 4 ) LLena el camino actual void cpdf_fill ( int pdf document) linebreak La función cpdf_fill() llena el interior del camino actual con el color alctual de relleno. Vea también cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor(). cpdf_finalize_page (PHP 3>= 3.0.10, PHP 4 ) Finaliza una página void cpdf_finalize_page ( int pdf document, int page number) linebreak La función cpdf_finalize_page() finaliza una página con número de página page number. Esta función es sólo para ahorrar memoria. Una página terminada ocupa menos memoria pero no puede volver a ser modificada. Vea también cpdf_page_init(). 263
  • 336. ClibPDF cpdf_finalize (PHP 3>= 3.0.8, PHP 4 ) Finaliza un documento void cpdf_finalize ( int pdf document) linebreak La función cpdf_finalize() finaliza un documento. Aún se tiene que llamar a cpdf_close(). Vea también cpdf_close(). cpdf_global_set_document_limits (PHP 4 ) Sets document limits for any pdf document void cpdf_global_set_document_limits ( int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects) linebreak La función cpdf_global_set_document_limits() define varios límites del documento. Esta función debe ser llamada antes de cpdf_open() para que haga efecto. Ello define los límites de cualquier documento abierto con anterioridad. Vea también cpdf_open(). cpdf_import_jpeg (PHP 3>= 3.0.9, PHP 4 ) Abre una imagen JPEG int cpdf_open_jpeg ( int pdf document, string file name, double x-koor, double y-koor, double angle, double width, double height, double x-scale, double y-scale, int mode) linebreak La función cpdf_import_jpeg() abre una imagen almacenada en el fichero de nombre file name. El formato de la imagen debe ser JPEG. La imagen es situada en la página actual en la posición (x-koor, y-koor). La imagen es rotada angle grados. El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. Vea también cpdf_place_inline_image(), cpdf_lineto (PHP 3>= 3.0.8, PHP 4 ) Dibuja una línea void cpdf_lineto ( int pdf document, double x-koor, double y-koor, int mode) linebreak 264
  • 337. ClibPDF La función cpdf_lineto() dibuja una línea desde el punto actual al punto con coordenadas (x-koor, y-koor). El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa el valor especificado para la página por defecto. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto(). cpdf_moveto (PHP 3>= 3.0.8, PHP 4 ) Define el punto actual void cpdf_moveto ( int pdf document, double x-koor, double y-koor, int mode) linebreak La funcióncpdf_moveto() pone el punto actual en las coordenadas x-koor y y-koor. El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, la unidad por defecto será la especificada para la página. De otro modo las coordenadas se medirán en puntos postscript despreciando la unidad en curso. cpdf_newpath (PHP 3>= 3.0.9, PHP 4 ) Starts a new path void cpdf_newpath ( int pdf document) linebreak The cpdf_newpath() starts a new path on the document given by the pdf document parameter. cpdf_open (PHP 3>= 3.0.8, PHP 4 ) Abre un nuevo documento PDF int cpdf_open ( int compression, string filename) linebreak LA función cpdf_open() abre un documento PDF nuevo. El primer parámetro activa la compresión del documento si no es igual a 0. El segundo parámetro, opcional, es el fichero en el que el documento es escrito. Si es omitido, el documento es creado en memoria y puede ser escrito en un fichero mediante la función cpdf_save_to_file() o escrito por la salida estándar con cpdf_output_buffer(). Nota: El valor de retorno será necesario en nuevas versiones de ClibPDF como el primer parámetro en todas las demás funciones que escriben en el documento PDF. La librería ClibPDF toma el nombre de fichero "-" como sinónimo de stdout (salida estándar). Si se compila PHP como módulo de apache esto no funcionará porque la manera en que ClibPDF direcciona a la salida estándar no funciona con apache. Usted puede solucionar este problema evitando el enobre de fichero y usando cpdf_output_buffer() para la salida de documentos PDF. 265
  • 338. ClibPDF Vea también cpdf_close(), cpdf_output_buffer(). cpdf_output_buffer (PHP 3>= 3.0.9, PHP 4 ) Pone el documento PDF en el buffer de memoria void cpdf_output_buffer ( int pdf document) linebreak La función cpdf_output_buffer() muestra el documento PDF por la salida estándar. El documento debe ser creado en memoria, que es el caso de la función cpdf_open() cuando ha sido llamada sin parámetros. Vea también cpdf_open(). cpdf_page_init (PHP 3>= 3.0.8, PHP 4 ) Comienza una nueva página void cpdf_page_init ( int pdf document, int page number, int orientation, double height, double width, double unit) linebreak La función cpdf_page_init() crea una nueva página de altura height y profundidad width. La página tiene el número page number y orientación orientation. orientation puede ser 0 para retrato y 1 para paisaje. El último parámetro opcional unit define la unidad del sistema de coordenadas. El valor debería ser el número de puntos postscript por unidad. Como el valor de una pulgada el igual a 72 puntos, un valor de 72 sería la unidad para una pulgada. Por defecto es 72. Vea también cpdf_set_current_page(). cpdf_place_inline_image (PHP 3>= 3.0.9, PHP 4 ) Situa una imagen en la página void cpdf_place_inline_image ( int pdf document, int image, double x-koor, double y-koor, double angle, double width, double height, int mode) linebreak La función cpdf_place_inline_image() situa una imagen creada con las funciones de imagenes de PHP en la posición de la página (x-koor, y-koor). La imagen puede ser escalada al mismo tiempo. El último parámetro opcional determina el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas son medidas en puntos postscript, descartando la unidad actual. Vea también cpdf_import_jpeg(), 266
  • 339. ClibPDF cpdf_rect (PHP 3>= 3.0.8, PHP 4 ) Dibuja un rectángulo void cpdf_rect ( int pdf document, double x-koor, double y-koor, double width, double height, int mode) line- break La función cpdf_rect() dibuja un rectángulo con su esquina inferior izquierda en el punto (x-koor, y-koor). La anchura es widgth. La altura es height. El último parámetro opcional define el tamaño de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. cpdf_restore (PHP 3>= 3.0.8, PHP 4 ) Restaura un entorno formalmente salvado void cpdf_restore ( int pdf document) linebreak La función cpdf_restore() restaura el entorno salvado con cpdf_save(). Funciona como el comando grestore de postscript. Muy útil si se quiere trasladar o rotar un objeto sin afectar ortros objetos. Ejemplo 1. Salvar/Restaurar <?php cpdf_save($pdf); // hacer todo tipo de rotaciones, transformaciones, ... cpdf_restore($pdf) ?> Vea también cpdf_save(). cpdf_rlineto (PHP 3>= 3.0.9, PHP 4 ) Dibuja una línea void cpdf_rlineto ( int pdf document, double x-koor, double y-koor, int mode) linebreak La función cpdf_rlineto() dibuja una línea desde el punto actual al punto relativo con coordenadas (x-koor, y-koor). El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa el valor por defecto para la página. De otro modo las coordenadas se miden en puntos postscript, despreciando la unidad actual. Vea también cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto(). 267
  • 340. ClibPDF cpdf_rmoveto (PHP 3>= 3.0.9, PHP 4 ) Define el punto actual void cpdf_rmoveto ( int pdf document, double x-koor, double y-koor, int mode) linebreak La función cpdf_rmoveto() pone el punto actual relativo a las coordenadas x-koor y y-koor. El último parámetro opciona determina la loingitud de la unidad. Si es 0 o se omite, la unidad por defecto será la especificada para la página. De otro modo las coordenadas se medirán en puntos postscript, despreciando la unidad en curso. Vea también cpdf_moveto(). cpdf_rotate_text (PHP 3>= 3.0.9, PHP 4 ) Sets text rotation angle void cpdf_rotate_text ( int pdfdoc, float angle) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cpdf_rotate (PHP 3>= 3.0.8, PHP 4 ) Define la rotación void cpdf_rotate ( int pdf document, double angle) linebreak La función cpdf_rotate() define la rotación en angle grados. cpdf_save_to_file (PHP 3>= 3.0.8, PHP 4 ) Escribe el documento PDF en un fichero void cpdf_save_to_file ( int pdf document, string filename) linebreak La función cpdf_save_to_file() guarda el documento PDF en un fichero si este documeto ha sido creado en memoria. Esta función no es necesaria si el documento PDF ha sido abierto mediante la especificación de un nombre de fichero en la función cpdf_open(). 268
  • 341. ClibPDF Vea también cpdf_output_buffer(), cpdf_open(). cpdf_save (PHP 3>= 3.0.8, PHP 4 ) Salva el entorno actual void cpdf_save ( int pdf document) linebreak La función cpdf_save() salva el entorno actual. Funciona como el comando gsave de postscript. Muy útil si se quiere trasladar o trotar un objeto sin afetar a los demás. Vea también cpdf_restore(). cpdf_scale (PHP 3>= 3.0.8, PHP 4 ) Define la escala void cpdf_scale ( int pdf document, double x-scale, double y-scale) linebreak La función cpdf_scale() define el factor de escala en los dos sentidos. cpdf_set_action_url (PHP 3>= 3.0.9, PHP 4 ) Sets hyperlink void cpdf_set_action_url ( int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode]) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cpdf_set_char_spacing (PHP 3>= 3.0.8, PHP 4 ) Determina el espacio entre caracteres void cpdf_set_char_spacing ( int pdf document, double space) linebreak LA función cpdf_set_char_spacing() define el espacio entre caracteres. 269
  • 342. ClibPDF Vea también cpdf_set_word_spacing(), cpdf_set_leading(). cpdf_set_creator (PHP 3>= 3.0.8, PHP 4 ) Define el campo creator en el documento PDF void cpdf_set_creator ( string creator) linebreak La función cpdf_set_creator() define el creador de un documento PDF. Vea también cpdf_set_subject(), cpdf_set_title(), cpdf_set_keywords(). cpdf_set_current_page (PHP 3>= 3.0.9, PHP 4 ) Define la página actual void cpdf_set_current_page ( int pdf document, int page number) linebreak La función cpdf_set_current_page() define la página en la que se van a realizar todas las operaciones. Uno puede cambiar entre páginas a menos que una página ha sido finalizada con cpdf_finalize_page(). Vea también cpdf_finalize_page(). cpdf_set_font_directories (PHP 4 >= 4.0.6) Sets directories to search when using external fonts void cpdf_set_font_directories ( int pdfdoc, string pfmdir, string pfbdir) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cpdf_set_font_map_file (PHP 4 >= 4.0.6) Sets fontname to filename translation map when using external fonts void cpdf_set_font_map_file ( int pdfdoc, string filename) linebreak 270
  • 343. ClibPDF Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cpdf_set_font (PHP 3>= 3.0.8, PHP 4 ) Selecciona la fuente y el tamaño actual void cpdf_set_font ( int pdf document, string font name, double size, string encoding) linebreak La función cpdf_set_font() define la fuente actual, el tamaño y la codificación. Actualmente solo son soportadas las fuentes estándar de postscript. El último parámetro encoding puede tomar los siguientes valores: "MacRomanEncoding", "MacExpertEncoding", "WinAnsiEncoding", y "NULL". "NULL" es para el cifrado incluído en la fuente. Para mas información vea el manual de ClibPDF, especialmente para cómo soportar las fuentes asiáticas. cpdf_set_horiz_scaling (PHP 3>= 3.0.8, PHP 4 ) Define la escala horizontal del texto void cpdf_set_horiz_scaling ( int pdf document, double scale) linebreak La función cpdf_set_horiz_scaling() define la escala horizontal al scale por ciento. cpdf_set_keywords (PHP 3>= 3.0.8, PHP 4 ) Pone el valor del campo ’keywords’(palabras clave) de un documento PDF void cpdf_set_keywords ( string keywords) linebreak La función cpdf_set_keywords() define las palabras clave de un documento PDF. Vea también cpdf_set_title(), cpdf_set_creator(), cpdf_set_subject(). cpdf_set_leading (PHP 3>= 3.0.8, PHP 4 ) Define la distancias entre las líneas de texto void cpdf_set leading ( int pdf document, double distance) linebreak 271
  • 344. ClibPDF La función cpdf_set_leading() define la distancia entre las líneas de texto. Esto se usará si el texto es la salida de cpdf_continue_text(). Vea también cpdf_continue_text(). cpdf_set_page_animation (PHP 3>= 3.0.9, PHP 4 ) Define la separación entre páginas void cpdf_set_page_animation ( int pdf document, int transition, double duration) linebreak La función cpdf_set_page_animation() define la transición entre páginas que se siguen. El valor de transition puede ser 0 para ninguno, 1 para dos líneas que se barren a través de la pantalla, revelen la página, 2 para múltiples líneas, 3 para que una caja revele la página, 4 para una única línea, 5 para que la página naterior se disipe para revelar la pagina, 6 para que el efecto de disolución se mueva de un extremop de la página al otro, 7 para que la página antígua simplemente sea reemplazada por la nueva página (default) El valor de duration es el número de segundos entre las páginas que se pasan. cpdf_set_subject (PHP 3>= 3.0.8, PHP 4 ) Define el valor del campo subjet de un documento PDF void cpdf_set_subject ( string subject) linebreak La función cpdf_set_subject() define el asunto de un documento PDF Vea también cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords(). cpdf_set_text_matrix (PHP 3>= 3.0.8, PHP 4 ) Define la matriz de texto void cpdf_set_text_matrix ( int pdf document, array matrix) linebreak La función cpdf_set_text_matrix() define una matriz que describe una transformación aplicada a la fuente actual de texto. 272
  • 345. ClibPDF cpdf_set_text_pos (PHP 3>= 3.0.8, PHP 4 ) Define la posición del texto void cpdf_set_text_pos ( int pdf document, double x-koor, double y-koor, int mode) linebreak La función cpdf_set_text_pos() define la posición del texto para la siguiente llamada a cpdf_show(). El último parámetro opcional mode determina la longitud de la unidad. Si es 0 o se omite, se usa el valor por defecto para la página. De otro modo, las coordenadas son medidas en puntos postscript, despreciando la unidad actual. Vea también cpdf_show(), cpdf_text(). cpdf_set_text_rendering (PHP 3>= 3.0.8, PHP 4 ) Determina cómo es presentado el texto void cpdf_set_text_rendering ( int pdf document, int mode) linebreak La función cpdf_set_text_rendering() determina cómo es presentado el texto. Los posibles valores para mode son 0=llenar texto, 1=poner texto, 2=llenar y poner texto, 3=invisible, 4=llenar texto y añadirlo al camino de corte, 5=poner texto y añadirlo al camino de corte, 6=llenar y poner texto y añadirlo al camino de corte, 7=añadirlo al camino de corte cpdf_set_text_rise (PHP 3>= 3.0.8, PHP 4 ) Define la elevación del texto void cpdf_set_text_rise ( int pdf document, double value) linebreak La función cpdf_set_text_rise() define la elevación del texto a value unidades. cpdf_set_title (PHP 3>= 3.0.8, PHP 4 ) Define el campo title de un documento PDF void cpdf_set_title ( string title) linebreak La función cpdf_set_title() define el título de un documento PDF Vea también cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords(). 273
  • 346. ClibPDF cpdf_set_viewer_preferences (PHP 3>= 3.0.9, PHP 4 ) How to show the document in the viewer void cpdf_set_viewer_preferences ( int pdfdoc, array preferences) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cpdf_set_word_spacing (PHP 3>= 3.0.8, PHP 4 ) Define el espacio entre palabras void cpdf_set_word_spacing ( int pdf document, double space) linebreak La función cpdf_set_word_spacing() especifica el espacio entre palabras. Vea también cpdf_set_char_spacing(), cpdf_set_leading(). cpdf_setdash (PHP 3>= 3.0.8, PHP 4 ) Defina el patrón de la raya void cpdf_setdash ( int pdf document, double white, double black) linebreak La función cpdf_setdash() define el patrón de la raya white unidades blancas y black unidades negras. Si los dos son 0 se pone una línea sólida. cpdf_setflat (PHP 3>= 3.0.8, PHP 4 ) Define la monotonía void cpdf_setflat ( int pdf document, double value) linebreak La función cpdf_setflat() pone la monotonía a un valor de entre 0 y 100. 274
  • 347. ClibPDF cpdf_setgray_fill (PHP 3>= 3.0.8, PHP 4 ) Pone el color de relleno al valor gris void cpdf_setgray_fill ( int pdf document, double value) linebreak La función cpdf_setgray_fill() define el valor de gris actual para rellelanr un camino. Vea también cpdf_setrgbcolor_fill(). cpdf_setgray_stroke (PHP 3>= 3.0.8, PHP 4 ) Define el color para dibujar al valor gris void cpdf_setgray_stroke ( int pdf document, double gray value) linebreak La función cpdf_setgray_stroke() pone el color de dibujo actual al valor de gris dado. Vea también cpdf_setrgbcolor_stroke(). cpdf_setgray (PHP 3>= 3.0.8, PHP 4 ) Pone el color de relleno y dibujo a gris void cpdf_setgray ( int pdf document, double gray value) linebreak La función cpdf_setgray_stroke() pone el color de relleno y dibujo al color gris dado. Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill(). cpdf_setlinecap (PHP 3>= 3.0.8, PHP 4 ) Define el parámetro linecap void cpdf_setlinecap ( int pdf document, int value) linebreak La función cpdf_setlinecap() define el parámetro linecap entre los valores 0 y 2. 0 = empalmar al final, 1 = redondear, 2 = esquina proyectada cpdf_setlinejoin (PHP 3>= 3.0.8, PHP 4 ) Define el parámetro linejoin 275
  • 348. ClibPDF void cpdf_setlinejoin ( int pdf document, long value) linebreak La función cpdf_setlinejoin() define el parámetro entre un valor de 0 y 2. 0 = ingletes, 1 = redondear, 2 = ángulo oblícuo cpdf_setlinewidth (PHP 3>= 3.0.8, PHP 4 ) Define la profundidad de la línea void cpdf_setlinewidth ( int pdf document, double width) linebreak La función cpdf_setlinewidth() define la preofundidad de la línea a width. cpdf_setmiterlimit (PHP 3>= 3.0.8, PHP 4 ) Define el límite del inglete void cpdf_setmiterlimit ( int pdf document, double value) linebreak La función cpdf_setmiterlimit() define el límite del inglete a un valor mayor o igual a 1. cpdf_setrgbcolor_fill (PHP 3>= 3.0.8, PHP 4 ) Pone el color de relleno a l valor de clor rgb void cpdf_setrgbcolor_fill ( int pdf document, double red value, double green value, double blue value) line- break La función cpdf_setrgbcolor_fill() pone el color rgb actual para rellenar un camino. Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor(). cpdf_setrgbcolor_stroke (PHP 3>= 3.0.8, PHP 4 ) Pone el color de dibujo al valor de color rgb void cpdf_setrgbcolor_stroke ( int pdf document, double red value, double green value, double blue value) linebreak La función cpdf_setrgbcolor_stroke() pone el color de dibujo actual al valor de color rgb dado. Vea también cpdf_setrgbcolor_fill(), cpdf_setrgbcolor(). 276
  • 349. ClibPDF cpdf_setrgbcolor (PHP 3>= 3.0.8, PHP 4 ) Pone el color de relleno y dibujo al valor de color rgb void cpdf_setrgbcolor ( int pdf document, double red value, double green value, double blue value) linebreak La función cpdf_setrgbcolor_stroke() pone el color de relleno y dibujo actual al color rgb dado. Vea también cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill(). cpdf_show_xy (PHP 3>= 3.0.8, PHP 4 ) Muestra texto en la posición void cpdf_show_xy ( int pdf document, string text, double x-koor, double y-koor, int mode) linebreak La función cpdf_show_xy() muestra la cadena text en la posición con coordenadas (x-coor, y-coor). El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas son medidas en puntos postscript, despreciando la unidad actual. Nota: La función cpdf_show_xy() es idéntica a cpdf_text() sin el parámetro opcional. Vea también cpdf_text(). cpdf_show (PHP 3>= 3.0.8, PHP 4 ) Muestra el texto en la posición actual void cpdf_show ( int pdf document, string text) linebreak La función cpdf_show() muestra la cadena text en la posixción actual. Vea también cpdf_text(), cpdf_begin_text(), cpdf_end_text(). cpdf_stringwidth (PHP 3>= 3.0.8, PHP 4 ) Devuelve la anchura del texto en la fuente actual double cpdf_stringwidth ( int pdf document, string text) linebreak La función cpdf_stringwidth() devuelve la anchura de la cadena text. Requiere haber definido antes una fuente. 277
  • 350. ClibPDF Vea también cpdf_set_font(). cpdf_stroke (PHP 3>= 3.0.8, PHP 4 ) Dibuja una línea a lo largo del camino void cpdf_stroke ( int pdf document) linebreak La función cpdf_stroke() dibuja una línea a lo largo del camino actual. Vea también cpdf_closepath(), cpdf_closepath_stroke(). cpdf_text (PHP 3>= 3.0.8, PHP 4 ) Muestra texto conparámetros void cpdf_text ( int pdf document, string text, double x-koor, double y-koor, int mode, double orientation, int alignmode) linebreak La función cpdf_text() muestra la cadena text en la posición de coordenadas (x-coor, y-coor). El parámero opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada para la página. De otro modo las coordenadas son medidas en puntos postscript despreciando la unidad actual. El parámetro opcional orientation es la rotación del texto en grados. El parámetro opcional alignmode determina cómo está alineado el texto. Vea la documentación de ClibPDF para los posibles valores. Vea también cpdf_show_xy(). cpdf_translate (PHP 3>= 3.0.8, PHP 4 ) Define el sistema de origen de coordenadas void cpdf_translate ( int pdf document, double x-koor, double y-koor, int mode) linebreak La función cpdf_translate() define el sistema origen de coordenadas en el punto (x-coor, y-coor). El último parámetro opcional determina la longitud de la unidad. Si es 0 o se omite, se usa la unidad por defecto especificada en la página. De otro modo las coordenadas son medidas en puntos postscript, depreciando la unidad actual. 278
  • 351. XI. Crack functions Introducción These functions allow you to use the CrackLib library to test the ’strength’ of a password. The ’strength’ of a password is tested by that checks length, use of upper and lower case and checked against the specified CrackLib dictionary. CrackLib will also give helpful diagnostic messages that will help ’strengthen’ the password. Requerimientos More information regarding CrackLib along with the library can be found at http://www.users.dircon.co.uk/~crypto/. Instalación In order to use these functions, you must compile PHP with Crack support by using the --with-crack[=DIR] option. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión no define ningún tipo de recurso. Constantes predefinidas Esta extensión no define ninguna constante. Ejemplos This example shows how to open a CrackLib dictionary, test a given password, retrieve any diagnostic 279
  • 352. Crack functions messages, and close the dictionary. Ejemplo 1. CrackLib example <?php // Open CrackLib Dictionary $dictionary = crack_opendict(’/usr/local/lib/pw_dict’) or die(’Unable to open CrackLib dictionary’); // Perform password check $check = crack_check($dictionary, ’gx9A2s0x’); // Retrieve messages $diag = crack_getlastmessage(); echo $diag; // ’strong password’ // Close dictionary crack_closedict($dictionary); ?> Nota: If crack_check() returns TRUE, crack_getlastmessage() will return ’strong password’. 280
  • 353. Crack functions crack_check (PHP 4 >= 4.0.5) Performs an obscure check with the given password bool crack_check ( [resource dictionary, string password]) linebreak Returns TRUE if password is strong, or FALSE otherwise. Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. crack_check() performs an obscure check with the given password on the specified dictionary . If dictionary is not specified, the last opened dictionary is used. crack_closedict (PHP 4 >= 4.0.5) Closes an open CrackLib dictionary bool crack_closedict ( [resource dictionary]) linebreak Devuelve TRUE si todo fue bien, FALSE en caso de fallo. Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. crack_closedict() closes the specified dictionary identifier. If dictionary is not specified, the current dictionary is closed. crack_getlastmessage (PHP 4 >= 4.0.5) Returns the message from the last obscure check string crack_getlastmessage ( void) linebreak 281
  • 354. Crack functions Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. crack_getlastmessage() returns the message from the last obscure check. crack_opendict (PHP 4 >= 4.0.5) Opens a new CrackLib dictionary resource crack_opendict ( string dictionary) linebreak Returns a dictionary resource identifier on success, or FALSE on failure. Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. crack_opendict() opens the specified CrackLib dictionary for use with crack_check(). Nota: Only one dictionary may be open at a time. See also: crack_check(), and crack_closedict(). 282
  • 355. XII. CURL, Client URL Library Functions PHP supports libcurl, a library, created by Daniel Stenberg, that allows you to connect and communicate to many different types of servers with many different types of protocols. libcurl currently supports the http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP’s ftp extension), HTTP form based upload, proxies, cookies and user+password authentication. In order to use the CURL functions you need to install the CURL (http://curl.haxx.se/) package. PHP requires that you use CURL 7.0.2-beta or higher. PHP will not work with any version of CURL below version 7.0.2-beta. To use PHP’s CURL support you must also compile PHP --with-curl[=DIR] where DIR is the location of the directory containing the lib and include directories. In the "include" directory there should be a folder named "curl" which should contain the easy.h and curl.h files. There should be a file named "libcurl.a" located in the "lib" directory. These functions have been added in PHP 4.0.2. Once you’ve compiled PHP with CURL support, you can begin using the curl functions. The basic idea behind the CURL functions is that you initialize a CURL session using the curl_init(), then you can set all your options for the transfer via the curl_exec() and then you finish off your session using the curl_close(). Here is an example that uses the CURL functions to fetch the PHP homepage into a file: Ejemplo 1. Using PHP’s CURL module to fetch the PHP homepage <?php $ch = curl_init ("http://www.php.net/"); $fp = fopen ("php_homepage.txt", "w"); curl_setopt ($ch, CURLOPT_INFILE, $fp); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); fclose ($fp); ?> 283
  • 356. CURL curl_close (PHP 4 >= 4.0.2) Close a CURL session void curl_close ( int ch) linebreak This functions closes a CURL session and frees all ressources. The CURL handle, ch, is also deleted. curl_errno (PHP 4 >= 4.0.3) Return an integer containing the last error number int curl_errno ( resource ch) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. curl_error (PHP 4 >= 4.0.3) Return a string containing the last error for the current session string curl_error ( resource ch) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. curl_exec (PHP 4 >= 4.0.2) Perform a CURL session bool curl_exec ( int ch) linebreak This function is should be called after you initialize a CURL session and all the options for the session are set. Its purpose is simply to execute the predefined CURL session (given by the ch). 284
  • 357. CURL curl_getinfo (PHP 4 >= 4.0.4) Get information regarding a specific transfer string curl_getinfo ( resource ch, int opt) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. curl_init (PHP 4 >= 4.0.2) Initialize a CURL session int curl_init ( [string url]) linebreak The curl_init() will initialize a new session and return a CURL handle for use with the curl_setopt(), curl_exec(), and curl_close() functions. If the optional url parameter is supplied then the CURLOPT_URL option will be set to the value of the parameter. You can manually set this using the curl_setopt() function. Ejemplo 1. Initializing a new CURL session and fetching a webpage <?php $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); ?> See also: curl_close(), curl_setopt() curl_setopt (PHP 4 >= 4.0.2) Set an option for a CURL transfer 285
  • 358. CURL bool curl_setopt ( int ch, string option, mixed value) linebreak The curl_setopt() function will set options for a CURL session identified by the ch parameter. The option parameter is the option you want to set, and the value is the value of the option given by the option. The value should be a long for the following options (specified in the option parameter): • CURLOPT_INFILESIZE: When you are uploading a file to a remote site, this option should be used to tell PHP what the expected size of the infile will be. • CURLOPT_VERBOSE: Set this option to a non-zero value if you want CURL to report everything that is happening. • CURLOPT_HEADER: Set this option to a non-zero value if you want the header to be included in the output. • CURLOPT_NOPROGRESS: Set this option to a non-zero value if you don’t want PHP to display a progress meter for CURL transfers Nota: PHP automatically sets this option to a non-zero parameter, this should only be changed for debugging purposes. • CURLOPT_NOBODY: Set this option to a non-zero value if you don’t want the body included with the output. • CURLOPT_FAILONERROR: Set this option to a non-zero value if you want PHP to fail silently if the HTTP code returned is greater than 300. The default behaviour is to return the page normally, ignoring the code. • CURLOPT_UPLOAD: Set this option to a non-zero value if you want PHP to prepare for an upload. • CURLOPT_POST: Set this option to a non-zero value if you want PHP to do a regular HTTP POST. This POST is a normal application/x-www-from-urlencoded kind, most commonly used by HTML forms. • CURLOPT_FTPLISTONLY: Set this option to a non-zero value and PHP will just list the names of an FTP directory. • CURLOPT_FTPAPPEND: Set this option to a non-zero value and PHP will append to the remote file instead of overwriting it. • CURLOPT_NETRC: Set this option to a non-zero value and PHP will scan your ~./netrc file to find your username and password for the remote site that you’re establishing a connection with. • CURLOPT_FOLLOWLOCATION : Set this option to a non-zero value to follow any "Location: " header that the server sends as a part of the HTTP header (note this is recursive, PHP will follow as many "Location: " headers that it is sent.) • CURLOPT_PUT: Set this option a non-zero value to HTTP PUT a file. The file to PUT must be set with the CURLOPT_INFILE and CURLOPT_INFILESIZE. • CURLOPT_MUTE: Set this option to a non-zero value and PHP will be completely silent with regards to the CURL functions. 286
  • 359. CURL • CURLOPT_TIMEOUT: Pass a long as a parameter that contains the maximum time, in seconds, that you’ll allow the curl functions to take. • CURLOPT_LOW_SPEED_LIMIT: Pass a long as a parameter that contains the transfer speed in bytes per second that the transfer should be below during CURLOPT_LOW_SPEED_TIME seconds for PHP to consider it too slow and abort. • CURLOPT_LOW_SPEED_TIME: Pass a long as a parameter that contains the time in seconds that the transfer should be below the CURLOPT_LOW_SPEED_LIMIT for PHP to consider it too slow and abort. • CURLOPT_RESUME_FROM : Pass a long as a parameter that contains the offset, in bytes, that you want the transfer to start from. • CURLOPT_SSLVERSION : Pass a long as a parameter that contains the SSL version (2 or 3) to use. By default PHP will try and determine this by itself, although, in some cases you must set this manually. • CURLOPT_TIMECONDITION : Pass a long as a parameter that defines how the CURLOPT_TIMEVALUE is treated. You can set this parameter to TIMECOND_IFMODSINCE or TIMECOND_ISUNMODSINCE. This is a HTTP-only feature. • CURLOPT_TIMEVALUE: Pass a long as a parameter that is the time in seconds since January 1st, 1970. The time will be used as specified by the CURLOPT_TIMEVALUE option, or by default the TIMECOND_IFMODSINCE will be used. The value parameter should be a string for the following values of the option parameter: • CURLOPT_URL: This is the URL that you want PHP to fetch. You can also set this option when initializing a session with the curl_init() function. • CURLOPT_USERPWD: Pass a string formatted in the [username]:[password] manner, for PHP to use for the connection. connection. • CURLOPT_PROXYUSERPWD: Pass a string formatted in the [username]:[password] format for connection to the HTTP proxy. • CURLOPT_RANGE: Pass the specified range you want. It should be in the "X-Y" format, where X or Y may be left out. The HTTP transfers also support several intervals, seperated with commas as in X-Y,N-M. • CURLOPT_POSTFIELDS: Pass a string containing the full data to post in an HTTP "POST" operation. • CURLOPT_REFERER: Pass a string containing the "referer" header to be used in an HTTP request. • CURLOPT_USERAGENT: Pass a string containing the "user-agent" header to be used in an HTTP request. • CURLOPT_FTPPORT: Pass a string containing the which will be used to get the IP address to use for the ftp "PORT" instruction. The POST instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a hostname, a network interface name (under UNIX), or just a plain ’-’ to use the systems default IP address. • CURLOPT_COOKIE: Pass a string containing the content of the cookie to be set in the HTTP header. 287
  • 360. CURL • CURLOPT_SSLCERT: Pass a string containing the filename of PEM formatted certificate. • CURLOPT_SSLCERTPASSWD: Pass a string containing the password required to use the CURLOPT_SSLCERT certificate. • CURLOPT_COOKIEFILE: Pass a string containing the name of the file containing the cookiee data. The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file. • CURLOPT_CUSTOMREQUEST: Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing DELETE or another, more obscure, HTTP request. Nota: Don’t do this without making sure your server supports the command first. The following options expect a file descriptor that is obtained by using the fopen() function: • CURLOPT_FILE: The file where the output of your transfer should be placed, the default is STDOUT. • CURLOPT_INFILE: The file where the input of your transfer comes from. • CURLOPT_WRITEHEADER: The file to write the header part of the output into. • CURLOPT_STDERR: The file to write errors to instead of stderr. curl_version (PHP 4 >= 4.0.2) Return the current CURL version string curl_version ( void) linebreak The curl_version() function returns a string containing the current CURL version. 288
  • 361. XIII. Funciones de pago electrónico Estas funciones solo están disponibles si el intérprete ha sido compilado con --with-cybercash=[DIR]. Estas funciones han sido añadidas en PHP4. 289
  • 362. Cybercash cybercash_base64_decode (PHP 4 ) string cybercash_base64_decode ( string inbuff) linebreak cybercash_base64_encode (PHP 4 ) ??? string cybercash_base64_encode ( string inbuff) linebreak cybercash_decr (PHP 4 ) ??? array cybercash_decr ( string wmk, string sk, string inbuff) linebreak La función devuelve un array asociativo con los elementos "errcode" y, si "errcode" es FALSE, "outbuff" (string), "outLth" (long) y "macbuff" (string). cybercash_encr (PHP 4 ) ??? array cybercash_encr ( string wmk, string sk, string inbuff) linebreak La función devuelve un array asociativo con los elementos "errcode" y, si "errcode" es FALSE, "outbuff" (string), "outLth" (long) y "macbuff" (string). 290
  • 363. XIV. Crédit Mutuel CyberMUT functions Introducción This extension allows you to process credit cards transactions using Crédit Mutuel CyberMUT system (http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html). CyberMUT is a popular Web Payment Service in France, provided by the Crédit Mutuel bank. If you are foreign in France, these functions will not be useful for you. The use of these functions is almost identical to the original SDK functions, except for the parameters of return for cybermut_creerformulairecm() and cybermut_creerreponsecm(), which are returned directly by functions PHP, whereas they had passed in reference in the original functions. These functions have been added in PHP 4.0.6. Nota: These functions only provide a link to CyberMUT SDK. Be sure to read the CyberMUT Developers Guide for full details of the required parameters. Instalación These functions are only available if PHP has been compiled with the --with-cybermut[=DIR] option, where DIR is the location of libcm-mac.a and cm-mac.h. You will require the appropriate SDK for your platform, which may be sent to you after your CyberMUT’s subscription (contact them via Web, or go to the nearest Crédit Mutuel). 291
  • 364. CyberMUT cybermut_creerformulairecm (PHP 4 >= 4.0.5) Generate HTML form of request for payment string cybermut_creerformulairecm ( string url_CM, string version, string TPE, string montant, string ref_commande, string texte_libre, string url_retour, string url_retour_ok, string url_retour_err, string langue, string code_societe, string texte_bouton) linebreak cybermut_creerformulairecm() is used to generate the HTML form of request for payment. Ejemplo 1. First step of payment (equiv cgi1.c) <?php // Directory where the keys are located putenv("CMKEYDIR=/var/creditmut/cles"); // Version number $VERSION="1.2"; $retour = cybermut_creerformulairecm( "https://www.creditmutuel.fr/test/telepaiement/paiement.cgi", $VERSION, "1234567890", "300FRF", $REFERENCE, $TEXTE_LIBRE, $URL_RETOUR, $URL_RETOUR_OK, $URL_RETOUR_ERR, "francais", "company", "Paiement par carte bancaire"); echo $retour; ?> See also cybermut_testmac() and cybermut_creerreponsecm(). cybermut_creerreponsecm (PHP 4 >= 4.0.5) Generate the acknowledgement of delivery of the confirmation of payment string cybermut_creerreponsecm ( string phrase) linebreak cybermut_creerreponsecm() returns a string containing delivery acknowledgement message. 292
  • 365. CyberMUT The parameter is "OK" if the message of confirmation of the payment was correctly identified by cybermut_testmac(). Any other chain is regarded as an error message. See also cybermut_creerformulairecm() and cybermut_testmac(). cybermut_testmac (PHP 4 >= 4.0.5) Make sure that there no was data diddling contained in the received message of confirmation bool cybermut_testmac ( string code_MAC, string version, string TPE, string cdate, string montant, string ref_commande, string texte_libre, string code-retour) linebreak cybermut_testmac() is used to make sure that there was not data diddling contained in the received message of confirmation. Pay attention to parameters code-retour and texte-libre, which cannot be evaluated as is, because of the dash. You must retrieve them by using: <?php $code_retour = $_GET["code-retour"]; $texte_libre = $_GET["texte-libre"]; ?> Ejemplo 1. Last step of payment (equiv cgi2.c) <?php // Make sure that Enable Track Vars is ON. // Directory where are located the keys putenv("CMKEYDIR=/var/creditmut/cles"); // Version number $VERSION="1.2"; $texte_libre = $_GET["texte-libre"]; $code_retour = $_GET["code-retour"]; $mac_ok = cybermut_testmac($MAC,$VERSION,$TPE,$date,$montant,$reference,$texte_libre,$code_r if ($mac_ok) { // // insert data processing here // // $result=cybermut_creerreponsecm("OK"); 293
  • 366. CyberMUT } else { $result=cybermut_creerreponsecm("Document Falsifie"); } ?> See also cybermut_creerformulairecm() and cybermut_creerreponsecm(). 294
  • 367. XV. Cyrus IMAP administration functions Introducción Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. Constantes predefinidas Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución. CYRUS_CONN_NONSYNCLITERAL (integer) CYRUS_CONN_INITIALRESPONSE (integer) CYRUS_CALLBACK_NUMBERED (integer) CYRUS_CALLBACK_NOLITERAL (integer) 295
  • 368. Cyradm functions cyrus_authenticate (PHP 4 >= 4.1.0) Authenticate against a Cyrus IMAP server bool cyrus_authenticate ( resource connection [, string mechlist [, string service [, string user [, int minssf [, int maxssf]]]]]) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cyrus_bind (PHP 4 >= 4.1.0) Bind callbacks to a Cyrus IMAP connection bool cyrus_bind ( resource connection, array callbacks) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cyrus_close (PHP 4 >= 4.1.0) Close connection to a Cyrus IMAP server bool cyrus_close ( resource connection) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 296
  • 369. Cyradm functions cyrus_connect (PHP 4 >= 4.1.0) Connect to a Cyrus IMAP server resource cyrus_connect ( [string host [, string port [, int flags]]]) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cyrus_query (PHP 4 >= 4.1.0) Send a query to a Cyrus IMAP server bool cyrus_query ( resource connection, string query) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. cyrus_unbind (PHP 4 >= 4.1.0) Unbind ... bool cyrus_unbind ( resource connection, string trigger_name) linebreak Aviso Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parametros. 297
  • 370. XVI. Character type functions Introducción The functions provided by this extension check whether a character or string falls into a certain character class according to the current locale (see also setlocale()). When called with an integer argument these functions behave exactly like their C counterparts from "ctype.h". When called with a string argument they will check every character in the string and will only return TRUE if every character in the string matches the requested criteria. Passing anything else but a string or integer will return FALSE immediately. Requerimientos None besides functions from the standard C library which are always available. Instalación Beginning with PHP 4.2.0 these functions are enabled by default. For older versions you have to configure and compile PHP with --enable-ctype. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos Esta extensión no define ningún tipo de recurso. Constantes predefinidas Esta extensión no define ninguna constante. 298
  • 371. ctype ctype_alnum (PHP 4 >= 4.0.4) Check for alphanumeric character(s) bool ctype_alnum ( string text) linebreak Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. In the standard C locale letters are just [A-Za-z]. The function is equivalent to (ctype_alpha($text) || ctype_digit($text)). See also ctype_alpha(), ctype_digit(), and setlocale(). ctype_alpha (PHP 4 >= 4.0.4) Check for alphabetic character(s) bool ctype_alpha ( string text) linebreak Returns TRUE if every character in text is a letter from the current locale, FALSE otherwise. In the standard C locale letters are just [A-Za-z] and ctype_alpha() is equivalent to (ctype_upper($text) || ctype_lower($text)), but other languages have letters that are considered neither upper nor lower case. See also ctype_upper(), ctype_lower(), and setlocale(). ctype_cntrl (PHP 4 >= 4.0.4) Check for control character(s) bool ctype_cntrl ( string text) linebreak Returns TRUE if every character in text has a special control function, FALSE otherwise. Control characters are e.g. line feed, tab, esc. ctype_digit (PHP 4 >= 4.0.4) Check for numeric character(s) bool ctype_digit ( string text) linebreak Returns TRUE if every character in text is a decimal digit, FALSE otherwise. See also ctype_alnum() and ctype_xdigit(). 299
  • 372. ctype ctype_graph (PHP 4 >= 4.0.4) Check for any printable character(s) except space bool ctype_graph ( string text) linebreak Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. See also ctype_alnum(), ctype_print(), and ctype_punct(). ctype_lower (PHP 4 >= 4.0.4) Check for lowercase character(s) bool ctype_lower ( string text) linebreak Returns TRUE if every character in text is a lowercase letter in the current locale. See also ctype_alpha() and ctype_upper(). ctype_print (PHP 4 >= 4.0.4) Check for printable character(s) bool ctype_print ( string text) linebreak Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. See also ctype_cntrl(), ctype_graph(), and ctype_punct(). ctype_punct (PHP 4 >= 4.0.4) Check for any printable character which is not whitespace or an alphanumeric character bool ctype_punct ( string text) linebreak Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. See also ctype_cntrl(), ctype_graph(), and ctype_punct(). 300
  • 373. ctype ctype_space (PHP 4 >= 4.0.4) Check for whitespace character(s) bool ctype_space ( string text) linebreak Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. ctype_upper (PHP 4 >= 4.0.4) Check for uppercase character(s) bool ctype_upper ( string text) linebreak Returns TRUE if every character in text is a uppercase letter in the current locale. See also ctype_alpha() and ctype_lower(). ctype_xdigit (PHP 4 >= 4.0.4) Check for character(s) representing a hexadecimal digit bool ctype_xdigit ( string text) linebreak Returns TRUE if every character in text is a hexadecimal ’digit’, that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. See also ctype_digit(). 301
  • 374. XVII. Funciones de la capa de abstraccion de bases de datos (dbm-style) Estas funciones son la base para el acceso a bases de datos del estilo Berkeley DB. Este es un nivel de abstraccion general para varias bases de datos. Como tal su funcionalidad esta limitada a un grupo de modernas bases de datos como Sleepycat Software’s DB2 (). (Esta no debe confundirse con IBM DB2 software, la cual es soportada mediante las funciones ODBC.) El comportamiento de varios aspectos depende de la implementacion de la base de datos. Funciones como dba_optimize() y dba_sync() cumpliran su funcionalidad con unas bases de datos pero no con otras. Los siguientes manejadores (handlers) estan soportados: • dbm es el mas antiguo (original) tipo de base de datos de la familia de Berkeley DB. Se debe evitar su uso, si es posible. Nosotros no soportamos las funciones de compatibilidad de DB2 y gdbm, porque ellas solo son compatibles a nivel de codigo fuente, pero no pueden manejar el formato original dbm. • ndbm es un tipo mas nuevo y mas flexible que dbm. Todavia tiene la mayoria de las limitaciones de dbm (Por lo tanto es descartado). • gdbm es el gestor de bases de datos de GNU (database manager) (). • db2 es Sleepycat Software’s DB2 (). Es descrito como "un conjunto de herramientas de programacion que proveen acceso de alto nivel a bases de datos en aplicaciones standalone o en el modelo cliente/servidor. " • cdb es "una rapida, de confianza, sencilla herramienta para la creacion y lectura de bases de datos constantes." Fue creada por el autor de qmail y puede encontrarse en here (). Como la base es constante solo se soportan las operaciones de lectura. Ejemplo 1. Ejemplo de DBA <?php $id = dba_open("/tmp/test.db", "n", "db2"); if(!$id) { echo "dba_open failedn"; exit; } dba_replace("key", "This is an example!", $id); if(dba_exists("key", $id)) { echo dba_fetch("key", $id); dba_delete("key", $id); } dba_close($id); 302
  • 375. dba ?> DBA es "binary safe" y no tiene ningun limite arbitrario. Hereda todas sus limitaciones de la implementacion de base de datos que tenga. Todos las bases de datos basadas en ficheros deben proveer un mecanismo para establecer el modo a la hora de crear nuevas bases de datos, si ello es posible. Habitualmente este modo es pasado como el cuarto argumento en dba_open() o en dba_popen(). Se puede acceder a todas las entradas de una base de datos de modo secuencial (lineal) usando las funciones dba_firstkey() y dba_nextkey(). No se puede cambiar la base de datos mientras se recorre (traversing) por ella. Ejemplo 2. Recorriendo una base de datos <?php # ...open database... $key = dba_firstkey($id); while($key != false) { if(...) { # remember the key to perform some action later $handle_later[] = $key; } $key = dba_nextkey($id); } for($i = 0; $i < count($handle_later); $i++) dba_delete($handle_later[$i], $id); ?> 303
  • 376. dba dba_close (PHP 3>= 3.0.8, PHP 4 ) Cerrar uba base de datos void dba_close ( int handle) linebreak dba_close() cierra la conexion con una base de datos previamente abierta y libera todos los recursos especificados por handle. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_close() no devuelve ningun valor. Ver tambien: dba_open() dba_popen() dba_delete (PHP 3>= 3.0.8, PHP 4 ) Borra una entrada especificada por la clave key bool dba_delete ( string key, int handle) linebreak dba_delete() borra la entrada especificada por key de la base de datos especificada por handle. key es la clave de la entrada que es borrada. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_delete() devuelve TRUE o FALSE, si la entrada es borrada o no, respectivamente. Ver tambien: dba_exists() dba_fetch() dba_insert() dba_replace() dba_exists (PHP 3>= 3.0.8, PHP 4 ) Comprueba si la clave key existe bool dba_exists ( string key, int handle) linebreak dba_exists() comprueba si la clave key existe en la base de datos especificada por handle. key es la clave para la que se realiza la comprobacion. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_exists() devuelve TRUE o FALSE, si la clave es hallada o no, respectivamente. Ver tambien: dba_fetch() dba_delete() dba_insert() dba_replace() 304
  • 377. dba dba_fetch (PHP 3>= 3.0.8, PHP 4 ) Extrae los datos especificados por la clave key string dba_fetch ( string key, int handle) linebreak dba_fetch() extrae los datos especificados por la clave key de la base de datos determinada por handle. key es la clave de la entrada de los datos que queremos extraer. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_fetch() devuelve la cadena asociada o FALSE, si el par key/data es hallado o no, respectivamente. Ver tambien: dba_exists() dba_delete() dba_insert() dba_replace() dba_firstkey (PHP 3>= 3.0.8, PHP 4 ) Conseguir la primera clave string dba_firstkey ( int handle) linebreak dba_firstkey() devuelve la primera clave de la base de datos especificada por handle y resetea el puntero interno de claves. Esto permite una busqueda lineal por toda la base de datos. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_firstkey() devuelve la clave o FALSE en funcion de si tiene exito o falla, respectivamente. Ver tambien: dba_nextkey() dba_insert (PHP 3>= 3.0.8, PHP 4 ) Insertar una entrada bool dba_insert ( string key, string value, int handle) linebreak dba_insert() inserta la entrada descrita con key y value dentro de la base de datos especificada por handle. Fallara si ya existe una entrada con el mismo parametro key. key es la clave de la entrada a ser insertada. value es el valor a ser insertado. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_insert() devuelve TRUE o FALSE, en funcion de si tiene exito o falla, respectivamente. Ver tambien: dba_exists() dba_delete() dba_fetch() dba_replace() 305
  • 378. dba dba_nextkey (PHP 3>= 3.0.8, PHP 4 ) Extraer la siguiente clave string dba_nextkey ( int handle) linebreak dba_nextkey() devuelve la siguiente clave de la base de datos especificada por handle e incrementa el puntero de claves interno. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_nextkey() devuelve la clave o FALSE dependiendo de si tiene exito o falla, respectivamente. Ver tambien: dba_firstkey() dba_open (PHP 3>= 3.0.8, PHP 4 ) Abrir una base de datos int dba_open ( string path, string mode, string handler [, ...]) linebreak dba_open() establece una instancia para path con mode usando handler. path normalmente es el "path" en el sistema de ficheros. mode es "r" para acceso de lectura, "w" para lectura/escritura de una base de datos ya existente, "c" para lectura/escritura y creacion de una base datos si esta no existe, y "n" para crear, truncar y lectura/escritura. handler es el nombre de el manejador (handler) que sera usado para el acceso al path. Es pasado como un parametro opcional a dba_open() y puede usarse en lugar de ella. dba_open() devuelve un valor positivo de handler o FALSE, en el caso de que la apertura de la base de datos se realice o si falla, respectivamente. Ver tambien: dba_popen() dba_close() dba_optimize (PHP 3>= 3.0.8, PHP 4 ) Optimiza la base de datos bool dba_optimize ( int handle) linebreak dba_optimize() optimiza la base de datos especificada por handle. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_optimize() devuelve TRUE o FALSE, si la optimizacion tiene exito o falla, respectivamente. Ver tambien: dba_sync() 306
  • 379. dba dba_popen (PHP 3>= 3.0.8, PHP 4 ) Apertura persistente de una base de datos int dba_popen ( string path, string mode, string handler [, ...]) linebreak dba_popen() establece una instancia persistente para path con mode usando handler. path normalmente es el "path" en el sistema de ficheros. mode es "r" para acceso de lectura, "w" para lectura/escritura de una base de datos ya existente, "c" para lectura/escritura y creacion de una base datos si esta no existe, y "n" para crear, truncar y lectura/escritura. handler es el nombre del manejador (handler) que sera usado para el acceso al path. Es pasado como un parametro opcional a dba_popen() y puede usarse en lugar de ella. dba_popen() devuelve un valor positivo de handler o FALSE, en el caso de que la apertura de la base de datos se realice o si falla, respectivamente. Ver tambien: dba_open() dba_close() dba_replace (PHP 3>= 3.0.8, PHP 4 ) Reemplaza o inserta una entrada bool dba_replace ( string key, string value, int handle) linebreak dba_replace() reemplaza o inserta la entrada descrita con key y value dentro de la base de datos especificada por handle. key es la clave de la entrada a insertar. value es el valor a ser insertado. handle es un manejador (handle) de la base de datos devuelto por dba_open(). dba_replace() devuelve TRUE o FALSE, dependiendo de si tiene exito o falla respectivamente. Ver tambien: dba_exists() dba_delete() dba_fetch() dba_insert() dba_sync (PHP 3>= 3.0.8, PHP 4 ) Sincroniza la base de datos bool dba_sync ( int handle) linebreak dba_sync() sincroniza la base de datos especificada por handle. Esto probablemente realice una escritura fisica en el disco, si es soportado. handle es un manejador (handle) de la base de datos devuelto por dba_open(). 307
  • 380. dba dba_sync() devuelve TRUE o FALSE, si la sincronizacion tiene exito o falla, respectivamente. Ver tambien: dba_optimize() 308
  • 381. XVIII. Funciones de fecha y hora 309
  • 382. Fecha/hora checkdate (PHP 3, PHP 4 ) valida una fecha u hora int checkdate ( int month, int day, int year) linebreak Devuelve un valor verdadero si la fecha dada es válida; en caso contrario, devuelve un valor falso. Comprueba la validez de la fecha formada por los argumentos. Se considera válida una fecha si: • el año está entre 0 y 32767, ambos incluidos • el mes está entre 1 y 12, ambos incluidos • el día está en el rango permitido para el mes dado. Se tienen en consideración los años bisiestos. date (PHP 3, PHP 4 ) da formato a la fecha/hora local string date ( string format [, int timestamp]) linebreak Devuelve una cadena formateada de acuerdo con la cadena de formato dada, utilizando el valor de timestamp dado o la hora local actual si no hay parámetro. Se reconocen los siguientes caracteres en la cadena de formato: • a - "am" o "pm" • A - "AM" o "PM" • d - día del mes, dos dígitos con cero a la izquierda; es decir, de "01" a "31" • D - día de la semana, en texto, con tres letras; por ejemplo, "Fri" • F - mes, en texto, completo; por ejemplo, "January" • h - hora, de "01" a "12" • H - hora, de "00" a "23" • g - hour, sin ceros, de "1" a "12" • G - hour, sin ceros; de "0" a "23" • i - minutos; de "00" a "59" • j - día del mes sin cero inicial; de "1" a "31" • l (’L’ minúscula) - día de la semana, en texto, completo; por ejemplo, "Friday" • L - "1" or "0", según si el año es bisiesto o no • m - mes; de "01" a "12" • n - mes sin cero inicial; de "1" a "12" • M - mes, en texto, 3 letras; por ejemplo, "Jan" 310
  • 383. Fecha/hora • s - segundos; de "00" a "59" • S - sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd" • t - número de días del mes dado; de "28" a "31" • U - segundos desde el valor de ’epoch’ • w - día de la semana, en número, de "0" (domingo) a "6" (sábado) • Y - año, cuatro cifras; por ejemplo, "1999" • y - año, dos cifras; por ejemplo, "99" • z - día del año; de "0" a "365" • Z - diferencia horaria en segundos (de "-43200" a "43200") Los caracteres no reconocidos se imprimen tal cual. El formato "Z" siempre devuelve "0" en la función gmdate()() Ejemplo 1. Ejemplo de date() print (date("l dS of F Y h:i:s A")); print ("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000))); Es posible usar date() y mktime() juntas para obtener fechas futuras o pasadas. Ejemplo 2. Ejemplo de date() y mktime() $tomorrow = mktime(0,0,0,date("m") ,date("d")+1,date("Y")); $lastmonth = mktime(0,0,0,date("m")-1,date("d"), date("Y")); $nextyear = mktime(0,0,0,date("m"), date("d"), date("Y")+1); Para dar formato a fechas en otros idiomas, se deben usar las funciones setlocale() y strftime(). Ver también gmdate() y mktime(). getdate (PHP 3, PHP 4 ) obtiene información de fecha y hora array getdate ( int timestamp) linebreak Devuelve un array asociativo que contiene la información de fecha del valor timestamp como los siguientes elementos: • "seconds" - segundos • "minutes" - minutos 311
  • 384. Fecha/hora • "hours" - horas • "mday" - día del mes • "wday" - día de la semana, en número • "mon" - mes, en número • "year" - año, en número • "yday" - día del año, en número; por ejemplo, "299" • "weekday" - día de la semana, en texto, completo; por ejemplo, "Friday" • "month" - mes, en texto, completo; por ejemplo, "January" gettimeofday (PHP 3>= 3.0.7, PHP 4 ) obtiene la hora actual array gettimeofday ( void) linebreak Es un interfaz para gettimeofday(2). Devuelve un array asociativo que contiene los datos devueltos por esta llamada al sistema. • "sec" - segundos • "usec" - microsegundos • "minuteswest" - minutos al oeste de Greenwich • "dsttime" - tipo de corrección dst gmdate (PHP 3, PHP 4 ) da formato a una fecha/hora GMT/CUT string gmdate ( string format, int timestamp) linebreak Idéntica a la función data() excepto en que la hora devuelta es la de Greenwich (GMT). Por ejemplo, si se utiliza en Finlandia (GMT +0200), la primera línea del ejemplo devuelve "Jan 01 1998 00:00:00", mientras la segunda imprime "Dec 31 1997 22:00:00". Ejemplo 1. Ejemplo de gmdate() echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) ); echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) ); 312
  • 385. Fecha/hora Ver también date(), mktime() y gmmktime(). gmmktime (PHP 3, PHP 4 ) obtiene el valor timestamp UNIX de una fecha GMT int gmmktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst]) linebreak Idéntica a mktime(), excepto en que los parámetros representan una fecha GMT. gmstrftime (PHP 3>= 3.0.12, PHP 4 ) da formato a una fecha/hora GMT/CUT según las convenciones locales string gmstrftime ( string format, int timestamp) linebreak Se comporta como strftime(), excepto en que la hora devuelta es la de Greenwich (GMT). Por ejemplo, si se utiliza en la zona horaria EST (GMT -0500), la primera línea del ejemplo imprime "Dec 31 1998 20:00:00", mientras la segunda imprime "Jan 01 1999 01:00:00". Ejemplo 1. Ejemplo de gmstrftime() setlocale (’LC_TIME’,’en_US’); echo strftime ("%b %d %Y %H:%M:%S",mktime(20,0,0,12,31,98))."n"; echo gmstrftime ("%b %d %Y %H:%M:%S",mktime(20,0,0,12,31,98))."n"; Ver también strftime(). localtime (PHP 4 ) Obtener la hora local array localtime ( [int muestra_de_tiempo [, bool es_asociativo]]) linebreak La función localtime() devuelve un vector idético al de la estructura devuelta en C por la llamada a la misma función. El primer parámetro que se le pasa a localtime() es el timestamp, una representació de una fecha/hora concretas. Si no se proporciona, se utilizará la hora actual. El segundo argumento de localtime() es es_asociativo. Si está a 0 o no es proporcionado, el vector se devuelve como un vector normal, indizado numéricamente. Si el argumento está a 1, el vector devuelto es un vector asociativo conteniendo los diferentes elementos de la estructura devuelta por C al llamar a la función localtime. Los nombres de las diferentes claves del vector asociativo se encuentran a continuación: • "tm_sec" - segundos 313
  • 386. Fecha/hora • "tm_min" - minutos • "tm_hour" - horas • "tm_mday" - día del mes • "tm_mon" - mes del año, empezando en 0 que es Enero • "tm_year" - Años que hacen desde 1900 • "tm_wday" - Día de la semana • "tm_yday" - Día del año • "tm_isdst" - Si el cambio de hora para el ahorro energético tiene efecto o no microtime (PHP 3, PHP 4 ) devuelve el valor timestamp UNIX actual con microsegundos string microtime ( void) linebreak Devuelve la cadena "msec sec", donde sec es la hora actual en número de segundos desde el valor Unix Epoch (0:00:00 del 1 de enero de 1970, hora GMT), y msec es la parte de microsegundos. Esta función sólo está disponible en sistemas operativos con admiten la llamada al sistema gettimeofday(). Ver también time(). mktime (PHP 3, PHP 4 ) obtiene el timestamp UNIX de una fecha int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst]) linebreak Advertencia: Véase el extraño orden de los argumentos, que se diferencia del orden de argumentos en una llamada mktime() de UNIX y que no permite eliminar parámetros de derecha a izquierda (ver abajo). Es un error común mezclar estos valores en un script. Devuelve el valor timestamp Unix correspondiente a los argumentos dados. El timestamp es un entero de tipo long que contiene el número de segundos entre el valor Unix Epoch (1 de enero de 1970) y la hora especificada. Se pueden eliminar argumentos en orden de derecha a izquierda; en los argumentos omitidos se toma el valor de la fecha y hora locales. is_dst puede ponerse a 1 si la hora corresponde a horario de verano, 0 si no, o -1 (valor por omisión) si no se sabe. Nota: is_dst se añadió en la versión 3.0.10. 314
  • 387. Fecha/hora mktime() es útil para realizar cálculos y validaciones con fechas, ya que calcula automáticamente el valor correcto para una entrada fuera de rango. Por ejemplo, cada una de las líneas siguientes produce la cadena "Jan-01-1998". Ejemplo 1. Ejemplo de mktime() echo date( "M-d-Y", mktime(0,0,0,12,32,1997) ); echo date( "M-d-Y", mktime(0,0,0,13,1,1997) ); echo date( "M-d-Y", mktime(0,0,0,1,1,1998) ); El último día de cada mes se puede expresar como el día "0" del mes siguiente, no el día -1. Los dos ejemplos siguientes producen la cadena "The last day in Feb 2000 is: 29". Ejemplo 2. El último día del próximo mes $lastday=mktime(0,0,0,3,0,2000); echo strftime("Last day in Feb 2000 is: %d",$lastday); $lastday=mktime(0,0,0,4,-31,2000); echo strftime("Last day in Feb 2000 is: %d",$lastday); Ver también date() y time(). strftime (PHP 3, PHP 4 ) da formato a la hora o fecha local de acuerdo con las convenciones locales string strftime ( string format, int timestamp) linebreak Devuelve una cadena formateada según la cadena de formato dada utilizando el valor timestamp o la hora local actual. Los nombres del mes y el día de la semana y otras cadenas dependientes del idioma respetan lo establecido con setlocale(). Se reconocen los siguientes especificadores de conversión en la cadena de formato: • %a - nombre del día de la semana abreviado • %A - nombre del día de la semana completo • %b - nombre del mes abreviado • %B - nombre del mes completo • %c - representación de fecha y hora preferidas en el idioma actual • %d - día del mes en número (de 00 a 31) 315
  • 388. Fecha/hora • %H - hora como un número de 00 a 23 • %I - hora como un número de 01 a 12 • %j - día del año como un número de 001 a 366 • %m - mes como un número de 01 a 12 • %M - minuto en número • %p - ‘am’ o ‘pm’, según la hora dada, o las cadenas correspondientes en el idioma actual • %S - segundos en número • %U - número de la semana en el año, empezando con el primer domingo como el primer día de la primera semana • %W - número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana • %w - día de la semana en número (el domingo es el 0) • %x - representación preferida de la fecha sin la hora • %X - representación preferida de la hora sin la fecha • %y - año en número de 00 a 99 • %Y - año en número de cuatro cifras • %Z - nombre o abreviatura de la zona horaria • %% - carácter ‘%’ Ejemplo 1. Ejemplo de strftime() setlocale ("LC_TIME", "C"); print(strftime("%A in Finnish is ")); setlocale ("LC_TIME", "fi_FI"); print(strftime("%A, in French ")); setlocale ("LC_TIME", "fr_CA"); print(strftime("%A and in German ")); setlocale ("LC_TIME", "de_DE"); print(strftime("%A.n")); Este ejemplo funciona si se tienen los respectivos ‘locales’ instalados en el sistema. Ver también setlocale() y mktime(). strtotime (PHP 3>= 3.0.12, PHP 4 ) Procesar cualquier descripción textual de fecha/hora en Inglés convirtiéndola en una timestamp de UNIX. int strtotime ( string hora [, int ahora]) linebreak 316
  • 389. Fecha/hora La función espera que se le pase una cadena conteniendo una fecha en formato Inglés e intentará procesarla y convertirla a una timestamp (muestra de tiempo) de UNIX relativa a la timestamp proporcionada en ahora, o la hora actual si no se indica ninguna. Si falla, devolverá -1. Dado que strtotime() obra de acuerdo con la sintaxis de fechas de GNU, puede echar un vistazo a la página del manual GNU titulada Date Input Formats (http://www.gnu.org/manual/tar-1.12/html_chapter/tar_7.html) (Formatos de entrada de fechas). La sintaxis descrita ahí es válida para el parátro hora. Ejemplo 1. Ejemplos con strtotime() echo strtotime ("now"), "n"; echo strtotime ("10 September 2000"), "n"; echo strtotime ("+1 day"), "n"; echo strtotime ("+1 week"), "n"; echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "n"; echo strtotime ("next Thursday"), "n"; echo strtotime ("last Monday"), "n"; Ejemplo 2. Comprobando si falla $str = ’No v&aacute;lida’; if (($timestamp = strtotime($str)) === -1) { echo "La cadena ($str) no es v&aacute;lida."; } else { echo "$str == ". date(’l dS of F Y h:i:s A’,$timestamp); } Nota: El rango válido de una timestamp suele ser desde Fri, 13 Dec 1901 20:45:54 GMT (Viernes, 13 de diciembre) a Tue, 19 Jan 2038 03:14:07 GMT (Martes, 19 de enero). (Estas son las fechas que corresponden a los valores mínimo y máximo de un entero con signo de 32 bits.) time (PHP 3, PHP 4 ) devuelve el timestamp UNIX actual 317
  • 390. Fecha/hora int time ( void) linebreak Devuelve la hora actual como número de segundos transcurridos desde las 00:00:00 del 1 de enero de 1970 GMT (Unix Epoch). Ver también date(). 318
  • 391. XIX. Funciones para dBase Estas funciones permiten el acceso a datos almacenados en formato dBase (dbf). No hay soporte para índices o campos Memo. Tampoco hay soporte para bloqueo: si dos procesos concurrentes en el servidor modifican el mismo fichero dBase, probablemente se destruirán los datos. A diferencia de las bases de datos SQL, las "bases de datos" dBase no pueden cambiar su definición. Una vez creado el fichero, la definición de la base de datos es fija. No hay índices que aceleren la búsqueda u organicen los datos de distinto modo. Los ficheros dBase son simples ficheros secuenciales con registros de longitud fija. Los nuevos registros se añaden al final del fichero y los registros borrados se conservan hasta que se llama a la función dbase_pack()(). Se recomienda no utilizar ficheros dBase como bases de datos, sino elegir cualquier servidor SQL; MySQL o Postgres son opciones habituales con PHP. El soporte para dBase se proporciona para permitir importar y exportar datos a y desde la base de datos web, ya que este formato de ficheros es aceptado habitualmente por las hojas de datos y los organizadores de Windows. La importación y exportación de datos es lo único para lo que sirve el soporte dBase. 319
  • 392. dBase dbase_add_record (PHP 3, PHP 4 ) añade un registro a un fichero dBase bool dbase_add_record ( int dbase_identifier, array record) linebreak Añade los datos de record a la base de datos. Si el número de elementos del registro proporcionado no es igual al número de campos de la base de datos, la operación fallará y la función devolverá FALSE. dbase_close (PHP 3, PHP 4 ) cierra un fichero dBase bool dbase_close ( int dbase_identifier) linebreak Cierra el fichero asociado con dbase_identifier. dbase_create (PHP 3, PHP 4 ) crea una base de datos dBase int dbase_create ( string filename, array fields) linebreak El parámetro fields es un array de arrays, cada uno de los cuales describe el formato de un campo de la base de datos. Cada campo consiste de un nombre, un carácter que indica el tipo de campo, una longitud, y una precisión. Los tipos de campos disponibles son: L Lógico. No tienen longitud ni precisión. M Memo. (Sin soporte en PHP.) No tienen longitud ni precisión. D Fecha (almacenada como AAAAMMDD). No tienen longitud ni precisión. N Número. Tienen longitud y precisión (número de cifras tras el punto decimal). C Cadena. 320
  • 393. dBase Si la base de datos se crea con éxito, se devuelve un dbase_identifier; en caso contrario, devuelve FALSE. Ejemplo 1. Crear un fichero dBase // "database" name $dbname = "/tmp/test.dbf"; // database "definition" $def = array( array("date", "D"), array("name", "C", 50), array("age", "N", 3, 0), array("email", "C", 128), array("ismember", "L") ); // creation if (!dbase_create($dbname, $def)) print "<strong>Error!</strong>"; dbase_delete_record (PHP 3, PHP 4 ) borra un registro del fichero dBase bool dbase_delete_record ( int dbase_identifier, int record) linebreak Marca el registro record para ser borrado del fichero de datos. Para eliminar realmente el registro del fichero, debe llamarse a la función dbase_pack(). dbase_get_record_with_names (PHP 3>= 3.0.4, PHP 4 ) lee un registro de un fichero dBase como array asociativo array dbase_get_record_with_names ( int dbase_identifier, int record) linebreak Devuelve los datos del registro record en un array asociativo. El array incluye también un elemento con índice ’deleted’ que vale 1 si el registro ha sido marcado para borrar (ver dbase_delete_record(). Cada campo se convierte al tipo PHP apropiado. (Las fechas se transforman en cadenas.) 321
  • 394. dBase dbase_get_record (PHP 3, PHP 4 ) lee un registro de un fichero dBase array dbase_get_record ( int dbase_identifier, int record) linebreak Devuelve los datos del registro record en un array. El array se indexa a partir de 0, e incluye un elemento con el índice asociativo ’deleted’, que vale 1 si el registro ha sido marcado para borrar (ver dbase_delete_record(). Cada campo se convierte al tipo PHP apropiado. (Las fechas se guardan como cadenas.) dbase_numfields (PHP 3, PHP 4 ) cuenta el número de campos en un fichero dBase int dbase_numfields ( int dbase_identifier) linebreak Devuelve el número de campos (columnas) en el fichero especificado. Los números de campo va de 0 a dbase_numfields($db)-1, mientras los números de registros van de 1 a dbase_numrecords($db). Ejemplo 1. Uso de dbase_numfields() $rec = dbase_get_record($db, $recno); $nf = dbase_numfields($db); for ($i=0; $i < $nf; $i++) { print $rec[$i]."<br>n"; } dbase_numrecords (PHP 3, PHP 4 ) cuenta el número de registros en un fichero dBase int dbase_numrecords ( int dbase_identifier) linebreak Devuelve el número de registros (filas) en el fichero especificado. Los números de registro van de 1 a dbase_numrecords($db), mientras los números de campo van de 0 a dbase_numfields($db)-1. dbase_open (PHP 3, PHP 4 ) abre un fichero dBase int dbase_open ( string filename, int flags) linebreak 322
  • 395. dBase Los "flags" son los que utiliza la llamada al sistema open(). Normalmente, 0 significa sólo lectura, 1 sólo escritura y 2 lectura y escritura. Devuelve un dbase_identifier del fichero abierto, o FALSE si no pudo abrirse el fichero. dbase_pack (PHP 3, PHP 4 ) "empaqueta" un fichero dBase bool dbase_pack ( int dbase_identifier) linebreak Empaqueta el fichero especificado, borrando definitivamente todos los registros marcados con la función dbase_delete_record(). dbase_replace_record (PHP 3>= 3.0.11, PHP 4 ) reemplaza un registro en un fichero dBase bool dbase_replace_record ( int dbase_identifier, array record, int dbase_record_number) linebreak Reemplaza los datos asociados con el registro record_number con los datos de record en el fichero de datos. Si el número de elementos del registro proporcionado no es igual al número de campos de la base de datos, la operación fallará y la función devolverá FALSE. dbase_record_number es un entero en el rango de 1 al número de registros en el fichero de datos (devuelto por la función dbase_numrecords()). 323
  • 396. XX. Funciones dbm Estas funcione le permiten almacenar registros en una base de datos estilo dbm. Este tipo de base de datos (soportadas por las librerías db y gdbm de Berkeley, así como por algunas librerías del sistema y por una librería incluída para acceso a archivos de texto) guarda pares clave/valor (en oposición a los registros completos soportados por las bases de datos relacionales). Ejemplo 1. ejemplo de dbm $dbm = dbmopen("vistoya", "w"); if (dbmexists($dbm, $idusuario)) { $visto_ya = dbmfetch($dbm, $idusuario); } else { dbminsert($dbm, $idusuario, time()); } do_stuff(); dbmreplace($dbm, $idusuario, time()); dbmclose($dbm); 324
  • 397. DBM dblist (PHP 3, PHP 4 ) describe la librería compatible dbm que se está usando string dblist ( void) linebreak dbmclose (PHP 3, PHP 4 ) cierra una base de datos dbm bool dbmclose ( int identif_dbm) linebreak Desbloquea y cierra la base de datos especificada. dbmdelete (PHP 3, PHP 4 ) borra el valor de una clave de una base de datos dbm bool dbmdelete ( int identif_dbm, string clave) linebreak Borra el valor para la clave en la base de datos. Devuelve FALSE si la clave no existía en la base de datos. dbmexists (PHP 3, PHP 4 ) dice si existe un valor para una clave dada en la base de datos dbm bool dbmexists ( int identif_dbm, string clave) linebreak Devuelve TRUE si hay un valor asociado con la clave. dbmfetch (PHP 3, PHP 4 ) obtiene un valor para una clave desde la base de datos dbm string dbmfetch ( int identif_dbm, string clave) linebreak Devuelve el valor asociado con la clave. 325
  • 398. DBM dbmfirstkey (PHP 3, PHP 4 ) obtiene la primera clave de una base de datos dbm string dbmfirstkey ( int identif_dbm) linebreak Devuelve la primera clave de la base de datos. Nótese que no se garantiza ningún orden en particular, pues la base de datos se crea utilizando una tabla hash, que no garantiza ordenación alguna. dbminsert (PHP 3, PHP 4 ) inserta un valor para una clave en la base de datos dbm int dbminsert ( int identif_dbm, string clave, string valor) linebreak Añade el valor a la base de datos con la clave especificada. Devuelve -1 si la base de datos se abrío en modo sólo lectura, 0 si la inserción tuvo éxito y 1 si la clave ya existía (para sustituir el valor, utilice dbmreplace().) dbmnextkey (PHP 3, PHP 4 ) obtiene la siguiente clave de una base de datos dbm string dbmnextkey ( int identif_dbm, string clave) linebreak Devuelve la clave que sigue a clave. Llamando a dbmfirstkey() seguida de llamadas sucesivas a dbmnextkey() se pueden visitar todos los pares clave/valor de la base de datos dbm. Por ejemplo: Ejemplo 1. Visitanco cada par clave/valor en una base de datos dbm. $clave = dbmfirstkey($id_dbm); while ($clave) { echo "$clave = " . dbmfetch($id_dbm, $clave) . "n"; $clave = dbmnextkey($id_dbm, $clave); } dbmopen (PHP 3, PHP 4 ) abre una base de datos dbm int dbmopen ( string fichero, string indicadores) linebreak 326
  • 399. DBM El primer argumento es el nombre con sendero completo del archivo dbm que se va a abrir y el segundo es el modo de apertura, que puede ser "r", "n", "c" o "w", que significan sólo lectura, nuevo (implica lectura/escritura y suele truncar una base de datos si ya existía con ese nombre), crear (implica lectura/escritura, pero sin truncar la base de datos) y abrir para lectura/escritura, respectivamente. Devuelve un identificador que se pasa al resto de funciones dbm si tiene éxito, o FALSE si falla. Si se utiliza el soporte de ndbm, este creará los archivos fichero.dir y fichero.pag. gdbm sólo utiliza un archivo y lo mismo hace el soporte interno de archivos de texto, mientras que el db de Berkeley crea un archivo fichero.db. Nótese que el PHP hace su propio bloqueo de archivo sobre el que pudiera realizar la propia librería dbm. El PHP no borra los archivos .lck que crea. Los utiliza simplemente como i-nodos fijos en los que hacer el bloqueo. Para más información sobre archivos dbm, vea las páginas man de su Unix o obtenga el gdbm de GNU desde ftp://prep.ai.mit.edu/pub/gnu. dbmreplace (PHP 3, PHP 4 ) sustituye el valor de una clave en la base de datos dbm bool dbmreplace ( int identif_dbm, string clave, string valor) linebreak Sustituye el valor para la clave especificada de la base de datos. También añadirá la clave a la base de datos si no existía antes. 327
  • 400. XXI. dbx functions Introducción The dbx module is a database abstraction layer (db ’X’, where ’X’ is a supported database). The dbx functions allow you to access all supported databases using a single calling convention. The dbx-functions themselves do not interface directly to the databases, but interface to the modules that are used to support these databases. Requerimientos To be able to use a database with the dbx-module, the module must be either linked or loaded into PHP, and the database module must be supported by the dbx-module. Currently, following databases are supported, but others will follow (soon, I hope :-): • FrontBase (available from PHP 4.1.0). • Microsoft SQL Server • MySQL • ODBC • PostgreSQL • Sybase-CT (available from PHP 4.2.0). Documentation for adding additional database support to dbx can be found at http://www.guidance.nl/php/dbx/doc/. Instalación In order to have these functions available, you must compile PHP with dbx support by using the --enable-dbx option and all options for the databases that will be used, e.g. for MySQL you must also specify --with-mysql=[DIR]. To get other supported databases to work with the dbx-module refer to 328
  • 401. dbx their specific documentation. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos There are two resource types used in the dbx module. The first one is the link-object for a database connection, the second a result-object which helds the result of a query. Constantes predefinidas Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión 329
  • 402. dbx ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución. DBX_MYSQL (integer) DBX_ODBC (integer) DBX_PGSQL (integer) DBX_MSSQL (integer) DBX_FBSQL (integer) DBX_OCI8 (integer) DBX_SYBASECT (integer) DBX_PERSISTENT (integer) DBX_RESULT_INFO (integer) DBX_RESULT_INDEX (integer) DBX_RESULT_ASSOC (integer) DBX_CMP_NATIVE (integer) DBX_CMP_TEXT (integer) DBX_CMP_NUMBER (integer) DBX_CMP_ASC (integer) DBX_CMP_DESC (integer) 330
  • 403. dbx dbx_close (PHP 4 >= 4.0.6) Close an open connection/database bool dbx_close ( object link_identifier) linebreak Devuelve TRUE si todo fue bien, FALSE en caso de fallo. Ejemplo 1. dbx_close() example <?php $link = dbx_connect(DBX_MYSQL, "localhost", "db", "username", "password") or die ("Could not connect"); print("Connected successfully"); dbx_close($link); ?> Nota: Always refer to the module-specific documentation as well. See also: dbx_connect(). dbx_compare (PHP 4 >= 4.1.0) Compare two rows for sorting purposes int dbx_compare ( array row_a, array row_b, string column_key [, int flags]) linebreak dbx_compare() returns 0 if the row_a[$column_key] is equal to row_b[$column_key], and 1 or -1 if the former is greater or is smaller than the latter one, respectively, or vice versa if the flag is set to DBX_CMP_DESC. dbx_compare() is a helper function for dbx_sort() to ease the make and use of the custom sorting function. The flags can be set to specify comparison direction: • DBX_CMP_ASC - ascending order • DBX_CMP_DESC - descending order and the preferred comparison type: • DBX_CMP_NATIVE - no type conversion • DBX_CMP_TEXT - compare items as strings • DBX_CMP_NUMBER - compare items numerically 331
  • 404. dbx One of the direction and one of the type constant can be combined with bitwise OR operator (|). The default value for the flags parameter is DBX_CMP_ASC | DBX_CMP_NATIVE. Ejemplo 1. dbx_compare() example <?php function user_re_order ($a, $b) { $rv = dbx_compare ($a, $b, "parentid", DBX_CMP_DESC); if ( !$rv ) { $rv = dbx_compare ($a, $b, "id", DBX_CMP_NUMBER); } return $rv; } $link = dbx_connect (DBX_ODBC, "", "db", "username", "password") or die ("Could not connect"); $result = dbx_query ($link, "SELECT id, parentid, description FROM table ORDER BY id"); // data in $result is now ordered by id dbx_sort ($result, "user_re_order"); // date in $result is now ordered by parentid (descending), then by id dbx_close ($link); ?> See also dbx_sort(). dbx_connect (PHP 4 >= 4.0.6) Open a connection/database object dbx_connect ( mixed module, string host, string database, string username, string password [, int persis- tent]) linebreak dbx_connect() returns an object on success, FALSE on error. If a connection has been made but the database could not be selected, the connection is closed and FALSE is returned. The persistent parameter can be set to DBX_PERSISTENT, if so, a persistent connection will be created. The module parameter can be either a string or a constant, though the latter form is preferred. The possible values are given below, but keep in mind that they only work if the module is actually loaded. • DBX_MYSQL or "mysql" • DBX_ODBC or "odbc" • DBX_PGSQL or "pgsql" 332
  • 405. dbx • DBX_MSSQL or "mssql" • DBX_FBSQL or "fbsql" (available from PHP 4.1.0) • DBX_SYBASECT or "sybase_ct" (available from PHP 4.2.0) The host, database, username and password parameters are expected, but not always used depending on the connect functions for the abstracted module. The returned object has three properties: database It is the name of the currently selected database. handle It is a valid handle for the connected database, and as such it can be used in module-specific functions (if required). $link = dbx_connect (DBX_MYSQL, "localhost", "db", "username", "password"); mysql_close ($link->handle); // dbx_close($link) would be better here module It is used internally by dbx only, and is actually the module number mentioned above. Ejemplo 1. dbx_connect() example <?php $link = dbx_connect (DBX_ODBC, "", "db", "username", "password", DBX_PERSISTENT) or die ("Could not connect"); print ("Connected successfully"); dbx_close ($link); ?> Nota: Always refer to the module-specific documentation as well. See also: dbx_close(). 333
  • 406. dbx dbx_error (PHP 4 >= 4.0.6) Report the error message of the latest function call in the module (not just in the connection) string dbx_error ( object link_identifier) linebreak dbx_error() returns a string containing the error message from the last function call of the abstracted module (e.g. mysql module). If there are multiple connections in the same module, just the last error is given. If there are connections on different modules, the latest error is returned for the module specified by the link_identifier parameter. Ejemplo 1. dbx_error() example <?php $link = dbx_connect(DBX_MYSQL, "localhost", "db", "username", "password") or die ("Could not connect"); $result = dbx_query($link, "select id from non_existing_table"); if ( $result == 0 ) { echo dbx_error ($link); } dbx_close ($link); ?> Nota: Always refer to the module-specific documentation as well. The error message for Microsoft SQL Server is actually the result of the mssql_get_last_message() function. dbx_query (PHP 4 >= 4.0.6) Send a query and fetch all results (if any) object dbx_query ( object link_identifier, string sql_statement [, long flags]) linebreak dbx_query() returns an object or 1 on success, and 0 on failure. The result object is returned only if the query given in sql_statement produces a result set. Ejemplo 1. How to handle the returned value <?php $link = dbx_connect(DBX_ODBC, "", "db", "username", "password") or die("Could not connect"); 334
  • 407. dbx $result = dbx_query($link, ’SELECT id, parentid, description FROM table’); if ( is_object($result) ) { // ... do some stuff here, see detailed examples below ... // first, print out field names and types // then, draw a table filled with the returned field values } else if ( $result == 1 ) { echo("Query executed successfully, but no result set returned"); } else { exit("Query failed"); } dbx_close($link); ?> The flags parameter is used to control the amount of information that is returned. It may be any combination of the following constants with the bitwise OR operator (|): DBX_RESULT_INDEX It is always set, that is, the returned object has a data property which is a 2 dimensional array indexed numerically. For example, in the expression data[2][3] 2 stands for the row (or record) number and 3 stands for the column (or field) number. The first row and column are indexed at 0. If DBX_RESULT_ASSOC is also specified, the returning object contains the information related to DBX_RESULT_INFO too, even if it was not specified. DBX_RESULT_INFO It provides info about columns, such as field names and field types. DBX_RESULT_ASSOC It effects that the field values can be accessed with the respective column names used as keys to the returned object’s data property. Associated results are actually references to the numerically indexed data, so modifying data[0][0] causes that data[0][’field_name_for_first_column’] is modified as well. Note that DBX_RESULT_INDEX is always used, regardless of the actual value of flags parameter. This means that the following combinations is effective only: • DBX_RESULT_INDEX • DBX_RESULT_INDEX | DBX_RESULT_INFO 335
  • 408. dbx • DBX_RESULT_INDEX | DBX_RESULT_INFO | DBX_RESULT_ASSOC - this is the default, if flags is not specified. The returing object has four or five properties depending on flags: handle It is a valid handle for the connected database, and as such it can be used in module specific functions (if required). $result = dbx_query ($link, "SELECT id FROM table"); mysql_field_len ($result->handle, 0); cols and rows These contain the number of columns (or fields) and rows (or records) respectively. $result = dbx_query ($link, ’SELECT id FROM table’); echo $result->rows; // number of records echo $result->cols; // number of fields info (optional) It is returned only if either DBX_RESULT_INFO or DBX_RESULT_ASSOC is specified in the flags parameter. It is a 2 dimensional array, that has two named rows (name and type) to retrieve column information. Ejemplo 2. lists each field’s name and type $result = dbx_query ($link, ’SELECT id FROM table’, DBX_RESULT_INDEX | DBX_RESULT_INFO); for ($i = 0; $i < $result->cols; $i++ ) { echo $result->info[’name’][$i] . "n"; echo $result->info[’type’][$i] . "n"; } 336
  • 409. dbx data This property contains the actual resulting data, possibly associated with column names as well depending on flags. If DBX_RESULT_ASSOC is set, it is possible to use $result->data[2]["field_name"]. Ejemplo 3. outputs the content of data property into HTML table $result = dbx_query ($link, ’SELECT id, parentid, description FROM table’); echo "<table>n"; foreach ( $result->data as $row ) { echo "<tr>n"; foreach ( $row as $field ) { echo "<td>$field</td>"; } echo "</tr>n"; } echo "</table>n"; Nota: Always refer to the module-specific documentation as well. See also: dbx_connect(). dbx_sort (PHP 4 >= 4.0.6) Sort a result from a dbx_query by a custom sort function bool dbx_sort ( object result, string user_compare_function) linebreak Devuelve TRUE si todo fue bien, FALSE en caso de fallo. Nota: It is always better to use ORDER BY SQL clause instead of dbx_sort(), if possible. Ejemplo 1. dbx_sort() example <?php function user_re_order ($a, $b) { $rv = dbx_compare ($a, $b, "parentid", DBX_CMP_DESC); 337
  • 410. dbx if ( !$rv ) { $rv = dbx_compare ($a, $b, "id", DBX_CMP_NUMBER); } return $rv; } $link = dbx_connect (DBX_ODBC, "", "db", "username", "password") or die ("Could not connect"); $result = dbx_query ($link, "SELECT id, parentid, description FROM tbl ORDER BY id"); // data in $result is now ordered by id dbx_sort ($result, "user_re_order"); // data in $result is now ordered by parentid (descending), then by id dbx_close ($link); ?> See also dbx_compare(). 338
  • 411. XXII. DB++ Functions Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. Introducción db++, made by the German company Concept asa (http://www.concept-asa.de/), is a relational database system with high performance and low memory and disk usage in mind. While providing SQL as an additional language interface, it is not really a SQL database in the first place but provides its own AQL query language which is much more influenced by the relational algebra then SQL is. Concept asa always had an interest in supporting open source languages, db++ has had Perl and Tcl call interfaces for years now and uses Tcl as its internal stored procedure language. Requerimientos This extension relies on external client libraries so you have to have a db++ client installed on the system you want to use this extension on. Concept asa (http://www.concept-asa.de/) provides db++ Demo versions (http://www.concept-asa.de/down-eng.html) and documentation (http://www.concept-asa.de/downloads/doc-eng.tar.gz) for Linux, some other UNIX versions. There is also a Windows version of db++, but this extension doesn’t support it (yet). Instalación In order to build this extension yourself you need the db++ client libraries and header files to be installed on your system (these are included in the db++ installation archives by default). You have to run configure with option --with-dbplus to build this extension. configure looks for the client libraries and header files under the default paths /usr/dbplus, /usr/local/dbplus and /opt/dblus. If you have installed db++ in a different place you have add 339
  • 412. DB++ the installation path to the configure option like this: --with-dbplus=/your/installation/path. Configuración en tiempo de ejecución Esta extensión no define ninguna directiva de configuración. Tipos de recursos dbplus_relation Most db++ functions operate on or return dbplus_relation resources. A dbplus_relation is a handle to a stored relation or a relation generated as the result of a query. Constantes predefinidas Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinamicamente en tiempo de ejecución. db++ error codes Tabla 1. DB++ Error Codes PHP Constant db++ constant meaning DBPLUS_ERR_NOERR (integer) ERR_NOERR Null error condition DBPLUS_ERR_DUPLICATE ERR_DUPLICATE Tried to insert a duplicate tuple (integer) DBPLUS_ERR_EOSCAN (integer) ERR_EOSCAN End of scan from rget() DBPLUS_ERR_EMPTY (integer) ERR_EMPTY Relation is empty (server) DBPLUS_ERR_CLOSE (integer) ERR_CLOSE The server can’t close DBPLUS_ERR_WLOCKED (integer) ERR_WLOCKED The record is write locked DBPLUS_ERR_LOCKED (integer) ERR_LOCKED Relation was already locked DBPLUS_ERR_NOLOCK (integer) ERR_NOLOCK Relation cannot be locked DBPLUS_ERR_READ (integer) ERR_READ Read error on relation DBPLUS_ERR_WRITE (integer) ERR_WRITE Write error on relation DBPLUS_ERR_CREATE (integer) ERR_CREATE Create() system call failed DBPLUS_ERR_LSEEK (integer) ERR_LSEEK Lseek() system call failed 340
  • 413. DB++ PHP Constant db++ constant meaning DBPLUS_ERR_LENGTH (integer) ERR_LENGTH Tuple exceeds maximum length DBPLUS_ERR_OPEN (integer) ERR_OPEN Open() system call failed DBPLUS_ERR_WOPEN (integer) ERR_WOPEN Relation already opened for writing DBPLUS_ERR_MAGIC (integer) ERR_MAGIC File is not a relation DBPLUS_ERR_VERSION (integer) ERR_VERSION File is a very old relation DBPLUS_ERR_PGSIZE (integer) ERR_PGSIZE Relation uses a different page size DBPLUS_ERR_CRC (integer) ERR_CRC Invalid crc in the superpage DBPLUS_ERR_PIPE (integer) ERR_PIPE Piped relation requires lseek() DBPLUS_ERR_NIDX (integer) ERR_NIDX Too many secondary indices DBPLUS_ERR_MALLOC (integer) ERR_MALLOC Malloc() call failed DBPLUS_ERR_NUSERS (integer) ERR_NUSERS Error use of max users DBPLUS_ERR_PREEXIT (integer) ERR_PREEXIT Caused by invalid usage DBPLUS_ERR_ONTRAP (integer) ERR_ONTRAP Caused by a signal DBPLUS_ERR_PREPROC (integer) ERR_PREPROC Error in the preprocessor DBPLUS_ERR_DBPARSE (integer) ERR_DBPARSE Error in the parser DBPLUS_ERR_DBRUNERR ERR_DBRUNERR Run error in db (integer) DBPLUS_ERR_DBPREEXIT ERR_DBPREEXIT Exit condition caused by prexit() * (integer) procedure DBPLUS_ERR_WAIT (integer) ERR_WAIT Wait a little (Simple only) DBPLUS_ERR_CORRUPT_TUPLE ERR_CORRUPT_TUPLE A client sent a corrupt tuple (integer) DBPLUS_ERR_WARNING0 ERR_WARNING0 The Simple routines encountered (integer) a non fatal error which was corrected DBPLUS_ERR_PANIC (integer) ERR_PANIC The server should not really die but after a disaster send ERR_PANIC to all its clients DBPLUS_ERR_FIFO (integer) ERR_FIFO Can’t create a fifo DBPLUS_ERR_PERM (integer) ERR_PERM Permission denied DBPLUS_ERR_TCL (integer) ERR_TCL TCL_error DBPLUS_ERR_RESTRICTED ERR_RESTRICTED Only two users (integer) DBPLUS_ERR_USER (integer) ERR_USER An error in the use of the library by an application programmer 341
  • 414. DB++ PHP Constant db++ constant meaning DBPLUS_ERR_UNKNOWN (integer) ERR_UNKNOWN 342
  • 415. DB++ dbplus_add (4.1.0 - 4.2.1 only) Add a tuple to a relation int dbplus_add ( resource relation, array tuple) linebreak Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. This function will add a tuple to a relation. The tuple data is an array of attribute/value pairs to be inserted into the given relation. After successful execution the tuple array will contain the complete data of the newly created tuple, including all implicitly set domain fields like sequences. The function will return zero (aka. DBPLUS_ERR_NOERR) on success or a db++ error code on failure. See dbplus_errcode() or the introduction to this chapter for more information on db++ error codes. dbplus_aql (4.1.0 - 4.2.1 only) Perform AQL query resource dbplus_aql ( string query [, string server [, string dbpath]]) linebreak Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. dbplus_aql() will execute an AQL query on the given server and dbpath. On success it will return a relation handle. The result data may be fetched from this relation by calling dbplus_next() and dbplus_current(). Other relation access functions will not work on a result relation. Further information on the AQL A... Query Language is provided in the original db++ manual. dbplus_chdir (4.1.0 - 4.2.1 only) Get/Set database virtual current directory string dbplus_chdir ( [string newdir]) linebreak 343
  • 416. DB++ Aviso Este módulo es EXPERIMENTAL. Esto significa que el comportamineto de estas funciones, nombre de funciones y en definitiva TODO lo documentado aqui, puede cambiar en una futura version de PHP SIN AVISO. Quedas avisado, y utilizar este módulo es tu responsabiliad. dbplus_chdir() will change the virtual current directory where relation files will be looked for by dbplus_open(). dbplus_chdir() will return the absolute path of the current directory. Calling dbplus_chdir() without giving any newdir may be used to query the current working directory. dbplus_close (4.1.0 - 4.2.1 only) Close a relation int dbplus_close ( resource relation) lineb