mirror of
https://github.com/php/doc-es.git
synced 2026-03-23 23:12:09 +01:00
update revision EN yaf and security (#165)
* update revision EN yaf and security * Review * fix review * Reviewed --------- Co-authored-by: Marcos Porto Mariño <php@marcospor.to>
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8c094a0d91e2154833af5bd85c984fe6e80cdbbc Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 4d17b7b4947e7819ff5036715dd706be87ae4def Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<reference xml:id="class.yaf-action-abstract" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
|
||||
<title>La clase Yaf_Action_Abstract</title>
|
||||
<titleabbrev>Yaf_Action_Abstract</titleabbrev>
|
||||
|
||||
|
||||
<partintro>
|
||||
|
||||
|
||||
<!-- {{{ Yaf_Action_Abstract intro -->
|
||||
<section xml:id="yaf-action-abstract.intro">
|
||||
&reftitle.intro;
|
||||
@@ -19,28 +19,27 @@
|
||||
también puede ser una clase <classname>Yaf_Action_Abstract</classname>.
|
||||
</para>
|
||||
<para>
|
||||
Ya que debería existir un punto de entrada el cual pueda ser llamado por Yaf (a partir de PHP 5.3,
|
||||
existe un nuevo método mágico, __invoke, pero Yaf no sólo funciona con PHP 5.3+,
|
||||
Yaf elige otro método mágico de ejecución), se debe implementar el método abstracto
|
||||
Dado que debe haber un punto de entrada que pueda ser llamado por Yaf,
|
||||
debe implementar el método abstracto
|
||||
<methodname>Yaf_Action_Abstract::execute</methodname> en la clase de
|
||||
acción personalizada.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
|
||||
<section xml:id="yaf-action-abstract.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis>
|
||||
<ooclass><classname>Yaf_Action_Abstract</classname></ooclass>
|
||||
|
||||
|
||||
<!-- {{{ Class synopsis -->
|
||||
<classsynopsisinfo>
|
||||
<ooclass>
|
||||
<classname>Yaf_Action_Abstract</classname>
|
||||
</ooclass>
|
||||
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>Yaf_Controller_Abstract</classname>
|
||||
@@ -52,20 +51,20 @@
|
||||
<modifier>protected</modifier>
|
||||
<varname linkend="yaf-action-abstract.props.controller">_controller</varname>
|
||||
</fieldsynopsis>
|
||||
|
||||
|
||||
|
||||
|
||||
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-action-abstract')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
|
||||
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.yaf-controller-abstract')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
|
||||
|
||||
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- {{{ Yaf_Action_Abstract properties -->
|
||||
<section xml:id="yaf-action-abstract.props">
|
||||
&reftitle.properties;
|
||||
@@ -115,12 +114,12 @@
|
||||
</variablelist>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
|
||||
|
||||
|
||||
</partintro>
|
||||
|
||||
|
||||
&reference.yaf.entities.yaf-action-abstract;
|
||||
|
||||
|
||||
</reference>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: 7541512acf899391b68c3b6bae66a4fcc65e6c4e Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<reference xml:id="class.yaf-loader" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
@@ -80,6 +80,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
|
||||
public function _initLoader($dispatcher) {
|
||||
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
|
||||
}
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-application.bootstrap" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -46,7 +46,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Un ejemplo de <function>A Bootstrap</function></title>
|
||||
<title>Un ejemplo de Bootstrap</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8bf3b3f0732d2b5c635f950e04e27a44b36f0cb0 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 7541512acf899391b68c3b6bae66a4fcc65e6c4e Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-application.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -106,7 +106,7 @@ ap.modules=Index
|
||||
<![CDATA[
|
||||
<?php
|
||||
defined('APPLICATION_PATH') // APPLICATION_PATH será usada en el archivo de configuración ini
|
||||
|| define('APPLICATION_PATH', __DIR__));
|
||||
|| define('APPLICATION_PATH', __DIR__);
|
||||
|
||||
$application = new Yaf_Application(APPLICATION_PATH.'/conf/application.ini');
|
||||
$application->bootstrap()->run();
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: 2ba031cea18ed772310819005eeb1557c6a8ec75 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-config-ini.isset" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Config_Ini::__isset</refname>
|
||||
<refpurpose>Determinar si existe una clave</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
@@ -16,13 +16,13 @@
|
||||
<methodparam><type>string</type><parameter>name</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
&warn.undocumented.func;
|
||||
|
||||
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<variablelist>
|
||||
@@ -30,21 +30,21 @@
|
||||
<term><parameter>name</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 30f488ae241fa5c58a735d0e4c1b913dbc4bc73e Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-dispatcher.setview" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Dispatcher::setView</refname>
|
||||
<refpurpose>Establecer un motor de vistas personalizado</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
@@ -16,12 +16,12 @@
|
||||
<methodparam><type>Yaf_View_Interface</type><parameter>view</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Este método proporciona una solución para aquellos que quieran utilizar un motor de vistas
|
||||
personalizado en lugar de la clase <classname>Yaf_View_Simple</classname>
|
||||
Este método ofrece una solución si desea utilizar una vista personalizada
|
||||
personalizado en lugar de <classname>Yaf_View_Simple</classname>.
|
||||
</para>
|
||||
|
||||
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<variablelist>
|
||||
@@ -29,24 +29,24 @@
|
||||
<term><parameter>view</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Una instancia de la clase Yaf_View_Interface
|
||||
Una instancia de <classname>Yaf_View_Interface</classname>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>un motor de Vistas personalizado</function></title>
|
||||
<title>Ejemplo de un motor de Vistas personalizado</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -59,7 +59,7 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
* @var Smarty
|
||||
*/
|
||||
public $_smarty;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -69,16 +69,16 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
*/
|
||||
public function __construct($tmplPath = null, $extraParams = array()) {
|
||||
$this->_smarty = new Smarty;
|
||||
|
||||
|
||||
if (null !== $tmplPath) {
|
||||
$this->setScriptPath($tmplPath);
|
||||
}
|
||||
|
||||
|
||||
foreach ($extraParams as $clave => $valor) {
|
||||
$this->_smarty->$clave = $valor;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Establecer la ruta a las plantillas
|
||||
*
|
||||
@@ -91,10 +91,10 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
$this->_smarty->template_dir = $ruta;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
throw new Exception('La ruta proporcionada no es válida');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Asignar una variable a la plantilla
|
||||
*
|
||||
@@ -106,7 +106,7 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
{
|
||||
$this->_smarty->assign($clave, $valor);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Permite que funcionen las pruebas con empty() y isset()
|
||||
*
|
||||
@@ -117,7 +117,7 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
{
|
||||
return (null !== $this->_smarty->get_template_vars($clave));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Permite que funcione unset() con las porpiedades de los objetos
|
||||
*
|
||||
@@ -128,7 +128,7 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
{
|
||||
$this->_smarty->clear_assign($clave);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Asignar variables a la plantilla
|
||||
*
|
||||
@@ -147,10 +147,10 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
$this->_smarty->assign($spec);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$this->_smarty->assign($spec, $valor);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limpiar todas las variables asignadas
|
||||
*
|
||||
@@ -163,7 +163,7 @@ class Smarty_Adapter implements Yaf_View_Interface
|
||||
public function clearVars() {
|
||||
$this->_smarty->clear_all_assign();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Procesa una plantilla y devuelve la salida.
|
||||
*
|
||||
@@ -221,7 +221,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract {
|
||||
</programlisting>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
@@ -229,7 +229,7 @@ class Bootstrap extends Yaf_Bootstrap_Abstract {
|
||||
<member><classname>Yaf_View_Simple</classname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 7418592d82d6cde8d052effd3607e5761d6c4e67 Maintainer: andresdzphp Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: cd2604567488ad612ac52d30ff7596beee1beba4 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-loader.getnamespacepath" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: andresdzphp Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: cd2604567488ad612ac52d30ff7596beee1beba4 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-loader.getnamespaces" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 7418592d82d6cde8d052effd3607e5761d6c4e67 Maintainer: andresdzphp Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 16a1bdfd1c36108534b5af08dc4b751c7ac0fdaf Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-loader.registernamespace" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -18,7 +18,7 @@
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Registra un espacio de nombres con una ruta de búsqueda, <classname>Yaf_Loader</classname>
|
||||
busca clases bajo este espacio de nombres en la ruta, el uno es también podría ser
|
||||
busca clases bajo este espacio de nombres en la ruta, el uno es también podría ser
|
||||
configurado vía <link linkend="configuration.yaf.library.namespace">
|
||||
application.library.directory.namespace</link>(in application.ini);
|
||||
</para>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 007c6c097fcd8a3cf692e39089a21fa24ac08736 Maintainer: andresdzphp Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 5442ab5aab2c2eb0226b56308626ef35fa37ed51 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-request-abstract.clearparams" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 85ff795121d5ce5380ff65efff532adfe705f5e8 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-request-abstract.setcontrollername" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Request_Abstract::setControllerName</refname>
|
||||
<refpurpose>El propósito de setControllerName</refpurpose>
|
||||
<refpurpose>Establecer el nombre del controlador</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
@@ -14,9 +14,10 @@
|
||||
<methodsynopsis>
|
||||
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setControllerName</methodname>
|
||||
<methodparam><type>string</type><parameter>controller</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>bool</type><parameter>format_name</parameter><initializer>true</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
|
||||
Establecer el nombre del controlador a solicitar, esto es generalmente utilizado por el enrutador personalizado para establecer el nombre del controlador de resultado de ruta.
|
||||
</para>
|
||||
|
||||
&warn.undocumented.func;
|
||||
@@ -30,7 +31,16 @@
|
||||
<term><parameter>controller</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
&string;, nombre del controlador, debe ser en estilo camel, como "Index" o "Foo_Bar".
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>format_name</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
esto se introduce en Yaf 3.2.0, por defecto Yaf formateará el nombre en modo camel,
|
||||
si esto se establece a &false;, Yaf establecerá el nombre original a petición.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 85ff795121d5ce5380ff65efff532adfe705f5e8 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-request-abstract.setmodulename" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Request_Abstract::setModuleName</refname>
|
||||
<refpurpose>El propósito de setModuleName</refpurpose>
|
||||
<refpurpose>Establecer el nombre del módulo</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
@@ -14,9 +14,10 @@
|
||||
<methodsynopsis>
|
||||
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setModuleName</methodname>
|
||||
<methodparam><type>string</type><parameter>module</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>bool</type><parameter>format_name</parameter><initializer>true</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
|
||||
Establecer el nombre del módulo a la petición, esto se utiliza generalmente por un enrutador personalizado para establecer el nombre del módulo del resultado de la ruta.
|
||||
</para>
|
||||
|
||||
&warn.undocumented.func;
|
||||
@@ -30,7 +31,16 @@
|
||||
<term><parameter>module</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
&string; nombre del módulo, debe estar en estilo camel, como "Index" o "Foo_Bar"
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>format_name</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Esto se introdujo en Yaf 3.2.0, por omisión Yaf formateará el nombre en modo camel,
|
||||
si esto se establece como &false;, Yaf establecerá el nombre original a la petición.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 8b6d169424ff189bb563ef4c3f35f8adff3f42c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: b91741b2890ffede77890516280158f11c0c44cd Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-request-abstract.setparam" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Request_Abstract::setParam</refname>
|
||||
<refpurpose>El propósito de setParam</refpurpose>
|
||||
<refpurpose>Establecer un argumento de llamada a una petición</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
<modifier>public</modifier> <type>void</type><methodname>Yaf_Request_Abstract::setParam</methodname>
|
||||
<modifier>public</modifier> <type>bool</type><methodname>Yaf_Request_Abstract::setParam</methodname>
|
||||
<methodparam><type>string</type><parameter>name</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>string</type><parameter>value</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
|
||||
Establecer un argumento a la petición, que puede ser recuperado por <methodname>Yaf_Request_Abstract::getParam</methodname>
|
||||
</para>
|
||||
|
||||
&warn.undocumented.func;
|
||||
@@ -31,7 +31,7 @@
|
||||
<term><parameter>name</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -39,7 +39,7 @@
|
||||
<term><parameter>value</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -53,6 +53,13 @@
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><methodname>Yaf_Request_Abstract::getParam</methodname></member>
|
||||
<member><methodname>Yaf_Request_Abstract::getParams</methodname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: 0d4f735ed7f59c0ac5a5b3bbe90fa72dc84d8cee Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-response-abstract.appendbody" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -64,7 +64,7 @@
|
||||
<?php
|
||||
$respuesta = new Yaf_Response_Http();
|
||||
|
||||
$respuesta->setBody("Hola")->prependBody(" Mundo");
|
||||
$respuesta->setBody("Hola")->appendBody(" Mundo");
|
||||
|
||||
echo $respuesta;
|
||||
?>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-map.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Route_Map::assemble</refname>
|
||||
<refpurpose>Ensamblar un URL</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
@@ -20,7 +20,7 @@
|
||||
Ensamblar un URL.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<variablelist>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,27 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve &string; en caso de éxito o &null; en caso de fallo.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="errors">
|
||||
&reftitle.errors;
|
||||
<para>
|
||||
Puede lanzar <classname>Yaf_Exception_TypeError</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -92,14 +106,7 @@ string(%d) "/foo/bar/_/tkey1/tval1/tkey2/tval2"
|
||||
</screen>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-map.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -54,7 +54,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Map</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -79,7 +79,7 @@ array(
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Map</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -111,7 +111,7 @@ array(
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title><function>Yaf_Route_Map</function>example</title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Map</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-regex.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Route_Regex::assemble</refname>
|
||||
<refpurpose>Ensamblar un URL</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
<modifier>public</modifier> <type>string</type><methodname>Yaf_Route_Regex::assemble</methodname>
|
||||
<modifier>public</modifier> <type class="union"><type>string</type><type>null</type></type><methodname>Yaf_Route_Regex::assemble</methodname>
|
||||
<methodparam><type>array</type><parameter>info</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>array</type><parameter>query</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
@@ -20,7 +20,7 @@
|
||||
Ensamblar un URL
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<variablelist>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,20 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve &string; en caso de éxito o &null; en caso de fallo.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -88,14 +95,7 @@ string(49) "/module/controller/action?tkey1=tval1&tkey2=tval2"
|
||||
</screen>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: argosback Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-regex.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -94,7 +94,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Regex</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Regex</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -118,7 +118,7 @@
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Regex(como en 2.3.0)</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Regex</classname>(como en 2.3.0)</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -142,7 +142,7 @@
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Regex y el nombre de la zona de captura (a partir de 2.3.0)</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Regex</classname> y el nombre de la zona de captura (a partir de 2.3.0)</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -166,7 +166,7 @@
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Regex</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Regex</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-rewrite.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,20 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve &string;.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -85,13 +92,6 @@ string(57) "/product/foo/bar/tmpkey1/tmpval1/?tkey1=tval1&tkey2=tval2"
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-rewrite.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -74,7 +74,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Rewrite</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -116,7 +116,7 @@ array(
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Rewrite</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@@ -160,7 +160,7 @@ array(
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Rewrite (como en 2.3.0)</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Rewrite</classname> (como en 2.3.0)</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-simple.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,27 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve un &string;.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="errors">
|
||||
&reftitle.errors;
|
||||
<para>
|
||||
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> o <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -80,13 +94,6 @@ string(64) "?m=yafmodule&c=yafcontroller&a=yafaction&tkey1=tval1&tkey2=tval2"
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-static.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,27 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve un &string;.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="errors">
|
||||
&reftitle.errors;
|
||||
<para>
|
||||
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> y <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -93,13 +107,6 @@ string(%d) "/yafmodule/yafcontroller/yafaction?tkey1=tval1&tkey2=tval2"
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 056281820311a8059f561e83537c252fd7e7f07b Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: c9389e4a0e96801fd14d91336ff3f12e45929a73 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-supervar.assemble" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -28,7 +28,7 @@
|
||||
<term><parameter>info</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -36,13 +36,27 @@
|
||||
<term><parameter>query</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve un &string;.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="errors">
|
||||
&reftitle.errors;
|
||||
<para>
|
||||
Lanza <classname>Yaf_Exception_TypeError</classname> si las claves <literal>':c'</literal> y <literal>':a'</literal> de <parameter>info</parameter> no están establecidas.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -98,13 +112,6 @@ string(%d) "You need to specify the controller by ':c'"
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-route-supervar.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -46,7 +46,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_Route_Supervar</function></title>
|
||||
<title>Ejemplo de <classname>Yaf_Route_Supervar</classname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 30c2d6226d1576647c91b36b912ac841abfcafab Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 22583751fbfdaa3eaa41aeb6470d1343f5cb2c78 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-router.addconfig" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>Yaf_Router::addConfig</refname>
|
||||
<refpurpose>Añadir rutas definidas en configuración al Enrutador</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
@@ -20,12 +20,12 @@
|
||||
la pila de rutas de <classname>Yaf_Router</classname>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
&no.function.parameters;
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
@@ -33,7 +33,7 @@
|
||||
contener una o más configuraciones de rutas válidas.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
@@ -91,12 +91,13 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
|
||||
*/
|
||||
$router->addConfig(Yaf_Registry::get("config")->routes);
|
||||
}
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
@@ -107,9 +108,9 @@ class Bootstrap extends Yaf_Bootstrap_Abstract{
|
||||
<member><classname>Yaf_Route_Regex</classname></member>
|
||||
<member><classname>Yaf_Route_Rewrite</classname></member>
|
||||
<member><classname>Yaf_Route_Map</classname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-view-simple.assign" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -70,7 +70,7 @@ class IndexController extends Yaf_Controller_Abstract {
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>template</function></title>
|
||||
<title>Ejemplo de template</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 73fae4ee51b644b72028e610abefefced57c18ad Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 4a211b7c8fb2b4410851d06c6f90f751d1f670d0 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-view-simple.assignref" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -77,7 +77,7 @@ class IndexController extends Yaf_Controller_Abstract {
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Ejemplo de <function>template</function></title>
|
||||
<title>Ejemplo de template</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: ecaa2146429a7f88de40dfce14718afc896b74c5 Maintainer: seros Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: b37bddfde36975bf6bf06ce98867e62d489d49c5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="yaf-view-simple.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -62,7 +62,7 @@
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Ejemplo de <function>Yaf_View_Simple::__constructor</function></title>
|
||||
<title>Ejemplo de <methodname>Yaf_View_Simple::__construct</methodname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: d4b0e5ea18a47ee567fdad728e3d4c3081a0c602 Maintainer: yago Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="function.yaml-parse-file" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
@@ -56,7 +56,7 @@
|
||||
<term><parameter>callbacks</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
|
||||
etiquetas YAML => asociando sus <type>callback</type> correspondientes. Ver
|
||||
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más
|
||||
información.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 5e154f6c4444d45d9a5befcc012cb2dbe5000a8f Maintainer: yago Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: yago -->
|
||||
|
||||
<!-- EN-Revision: 7c1cbb3254ee96fe77b5bdf21dd3531680ef9f7b Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<refentry xml:id="function.yaml-parse-url" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>yaml_parse_url</refname>
|
||||
@@ -16,7 +16,7 @@
|
||||
<methodparam><type>string</type><parameter>url</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>int</type><parameter>pos</parameter><initializer>0</initializer></methodparam>
|
||||
<methodparam choice="opt"><type>int</type><parameter role="reference">ndocs</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>array</type><parameter>callbacks</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>array</type><parameter>callbacks</parameter><initializer>&null;</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Convierte toda o parte de una secuencia de texto en YAML a una variable en PHP.
|
||||
@@ -61,7 +61,7 @@
|
||||
<term><parameter>callbacks</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
|
||||
etiquetas YAML => asociando sus <type>callback</type> correspondientes. Ver
|
||||
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más información
|
||||
</para>
|
||||
@@ -74,12 +74,24 @@
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Devuelve el valor codificado de <parameter>input</parameter> en el formato
|
||||
Devuelve el valor codificado de <parameter>url</parameter> en el formato
|
||||
apropiado de PHP&return.falseforfailure;. Si el valor de <parameter>pos</parameter> es <literal>-1</literal> devolverá un
|
||||
<type>array</type> con una entrada por cada documento encontrado en el texto.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="notes">
|
||||
&reftitle.notes;
|
||||
<warning>
|
||||
<para>
|
||||
El procesamiento de entradas de usuario no confiables con <function>yaml_parse_url</function>
|
||||
es peligroso si el uso de <function>unserialize</function> está habilitado para
|
||||
nodos que utilizan la etiqueta <literal>!php/object</literal>. Este comportamiento puede ser
|
||||
deshabilitado utilizando la configuración ini <literal>yaml.decode_php</literal>.
|
||||
</para>
|
||||
</warning>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<para>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: b8758b0605e80c4e3610137b7502a6abeea5c69b Maintainer: yago Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: yago -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<refentry xml:id="function.yaml-parse" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>yaml_parse</refname>
|
||||
@@ -56,7 +56,7 @@
|
||||
<term><parameter>callbacks</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> associativo de
|
||||
Controlador de contenido para los nodos YAML. Es un <type>array</type> asociativo de
|
||||
etiquetas YAML => asociando sus <type>callback</type> correspondientes. Ver
|
||||
<link linkend="yaml.callbacks.parse">Analizar callbacks</link> para más
|
||||
información.
|
||||
@@ -201,7 +201,7 @@ array(8) {
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="notes">
|
||||
&reftitle.notes;
|
||||
<warning>
|
||||
@@ -213,7 +213,7 @@ array(8) {
|
||||
</para>
|
||||
</warning>
|
||||
</refsect1>
|
||||
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<para>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: f052ac1bd73549125c3fc3dc68a36d4b0608a16d Maintainer: julionc Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: d4d5216e7a965ca194f6b1c9dee84cecab2674e5 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
|
||||
<section xml:id="yaml.configuration" xmlns="http://docbook.org/ns/docbook">
|
||||
&reftitle.runtime;
|
||||
@@ -25,6 +25,12 @@
|
||||
<entry><constant>INI_ALL</constant></entry>
|
||||
<entry><!-- leave empty, this will be filled by an automatic script --></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><link linkend="ini.yaml.decode-php">yaml.decode_php</link></entry>
|
||||
<entry>0</entry>
|
||||
<entry><constant>INI_ALL</constant></entry>
|
||||
<entry>Añadido en 1.2.0, antes de 2.0.0 el valor predeterminado era 1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><link linkend="ini.yaml.decode-timestamp">yaml.decode_timestamp</link></entry>
|
||||
<entry>0</entry>
|
||||
@@ -69,21 +75,37 @@
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="ini.yaml.decode-timestamp">
|
||||
<varlistentry xml:id="ini.yaml.decode-php">
|
||||
<term>
|
||||
<parameter>yaml.decode_timestamp</parameter>
|
||||
<type>integer</type>
|
||||
<parameter>yaml.decode_php</parameter>
|
||||
<type>bool</type>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Controla la decodificación tanto implicita y explicita escalar de "tag:yaml.org,2002:timestamp" en documentos YAML. El valor determinado es <literal>0</literal> que no se aplica a ningunca decodificación. Un ajuste de <literal>1</literal> a usar <function>strtotime</function> para analizar el valor de un Unix timestamp. Un ajuste de <literal>2</literal> debe usar <function>date_create</function> para analizar el valor del objeto <type>DateTime</type>.
|
||||
Desactivado por omisión, pero puede ser configurado como activado para que los objetos PHP serializados que tienen la etiqueta explícita "!php/object" sean deserializados.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="ini.yaml.decode-timestamp">
|
||||
<term>
|
||||
<parameter>yaml.decode_timestamp</parameter>
|
||||
<type>int</type>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Controla la decodificación de los escalares "tag:yaml.org,2002:timestamp" tanto implícitos como explícitos
|
||||
en el flujo del documento YAML. La configuración predeterminada de <literal>0</literal> no aplicará ninguna
|
||||
decodificación. Una configuración de <literal>1</literal> utilizará <function>strtotime</function>
|
||||
para analizar el valor de la marca de tiempo como una marca de tiempo Unix. Una configuración
|
||||
de <literal>2</literal> utilizará <function>date_create</function> para analizar el valor de la marca
|
||||
de tiempo como un objeto <type>DateTime</type>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="ini.yaml.output-canonical">
|
||||
<term>
|
||||
<parameter>yaml.output_canonical</parameter>
|
||||
<type>boolean</type>
|
||||
<type>bool</type>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
@@ -94,7 +116,7 @@
|
||||
<varlistentry xml:id="ini.yaml.output-indent">
|
||||
<term>
|
||||
<parameter>yaml.output_indent</parameter>
|
||||
<type>integer</type>
|
||||
<type>int</type>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
@@ -106,7 +128,7 @@
|
||||
<varlistentry xml:id="ini.yaml.output-width">
|
||||
<term>
|
||||
<parameter>yaml.output_width</parameter>
|
||||
<type>integer</type>
|
||||
<type>int</type>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: jesus_cova Status: ready -->
|
||||
<!-- EN-Revision: 22583751fbfdaa3eaa41aeb6470d1343f5cb2c78 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<refentry xml:id="function.yaz-ccl-parse" xmlns="http://docbook.org/ns/docbook">
|
||||
<refnamediv>
|
||||
<refname>yaz_ccl_parse</refname>
|
||||
@@ -16,11 +17,11 @@
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Esta función invoca un analizador CCL. Convierte una consulta dada CCL FIND a
|
||||
una consulta RPN la cual puede ser pasada también a la función <function>yaz_search</function>
|
||||
una consulta RPN la cual puede ser pasada también a la función <function>yaz_search</function>
|
||||
para ejecutar la búsqueda.
|
||||
</para>
|
||||
<para>
|
||||
Para definir un conjunto de campos validos CCL llaman preferiblemente a <function>yaz_ccl_conf</function>
|
||||
Para definir un conjunto de campos validos CCL llaman preferiblemente a <function>yaz_ccl_conf</function>
|
||||
para definirlo en la función.
|
||||
</para>
|
||||
</refsect1>
|
||||
@@ -53,24 +54,24 @@
|
||||
</para>
|
||||
<para>
|
||||
En caso de fallo, tres índices son establecidos en este arreglo para indicar la causa
|
||||
del fallo:
|
||||
del fallo:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>errorcode</literal> - El código de error CCL (entero)
|
||||
</para>
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>errorstring</literal> - El error CCL de cadena
|
||||
</para>
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>errorpos</literal> - aproxima la posición en una consulta de fallo
|
||||
(el entero es el carácter de posición)
|
||||
</para>
|
||||
</listitem>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</listitem>
|
||||
@@ -89,15 +90,15 @@
|
||||
<example>
|
||||
<title>Análisis CCL</title>
|
||||
<para>
|
||||
Se va a intentar hacer una búsqueda con CCL. En el ejemplo de abajo,
|
||||
<literal>$ccl</literal> es una consulta CCL.
|
||||
Se va a intentar hacer una búsqueda con CCL. En el ejemplo de abajo,
|
||||
<literal>$ccl</literal> es una consulta CCL.
|
||||
</para>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
yaz_ccl_conf($id, $fields); // ver el ejemplo para yaz_ccl_conf
|
||||
if (!yaz_ccl_parse($id, $ccl, &$cclresult)) {
|
||||
if (!yaz_ccl_parse($id, $ccl, $cclresult)) {
|
||||
echo 'Error: ' . $cclresult["errorstring"];
|
||||
} else {
|
||||
$rpn = $cclresult["rpn"];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 6a5b42e0d34c76890fd96be2b0b57516363b4c8a Maintainer: edwincartagenah Status: ready -->
|
||||
<!-- EN-Revision: 87d3bf2e9ea7da5abbeca3e60ea7cf7abfa6f7f3 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<!-- splitted from ./index.xml, last change in rev 1.66 -->
|
||||
<chapter xml:id="security.cgi-bin" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Instalado como CGI binario</title>
|
||||
@@ -12,11 +13,12 @@
|
||||
configuraciones que por alguna razón no desean integrar PHP como un
|
||||
módulo dentro del software de servidor (como Apache), o usarán PHP con
|
||||
diferentes tipos de envoltorios <acronym>CGI</acronym> para crear entornos
|
||||
seguros chroot y setuid para scripts. Esta configuración usualmente involucra la instalación
|
||||
del binario ejecutable de PHP en el directorio cgi-bin del servidor web. La recomendación
|
||||
<link xlink:href="&url.cert;">CA-96.11</link> del CERT recomienda
|
||||
que está en contra de colocar cualquiera de los intérpretes dentro de cgi-bin. Aún si
|
||||
el binario de PHP puede ser usado como un intérprete independiente, PHP está diseñado
|
||||
seguros <command>chroot</command> y <command>setuid</command> para scripts.
|
||||
Esta configuración usualmente involucra la instalación del binario
|
||||
ejecutable de <command>php</command> en el directorio <filename class="directory">cgi-bin</filename>
|
||||
del servidor web. La recomendación <link xlink:href="&url.cert;">CA-96.11</link> del CERT recomienda
|
||||
que está en contra de colocar cualquiera de los intérpretes dentro de <filename class="directory">cgi-bin</filename>.
|
||||
Aún si el binario de <command>php</command> puede ser usado como un intérprete independiente, PHP está diseñado
|
||||
para prevenir los ataques que esta configuración hace posible:
|
||||
</simpara>
|
||||
<itemizedlist>
|
||||
@@ -26,13 +28,13 @@
|
||||
role="url">http://mi.servidor/cgi-bin/php?/etc/passwd</filename>
|
||||
</simpara>
|
||||
<simpara>
|
||||
La consulta de información en una URL después del signo de interrogación (?) es
|
||||
La consulta de información en una URL después del signo de interrogación (<literal>?</literal>) es
|
||||
pasado como argumento de la línea de comandos al intérprete por la interfaz
|
||||
del CGI. Usualmente los intérpretes abren y ejecutan el fichero
|
||||
especificado como el primer argumento en la línea de comandos.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Cuando es invocado como un binario de CGI, PHP se rehusa a interpretar los
|
||||
Cuando es invocado como un binario de CGI, <command>php</command> se niega a interpretar los
|
||||
argumentos de línea de comandos.
|
||||
</simpara>
|
||||
</listitem>
|
||||
@@ -47,7 +49,7 @@
|
||||
convencionalmente utilizado para especificar el nombre del fichero
|
||||
a ser abierto e interpretado por el programa <acronym>CGI</acronym>.
|
||||
Usualmente las directivas de configuración de algunos servidores web (Apache:
|
||||
Acción) son utilizados para redirigir peticiones a los documentos como
|
||||
<literal>Action</literal>) son utilizados para redirigir peticiones a los documentos como
|
||||
<filename role="url">http://mi.servidor/directorio/secreto/script.php</filename> al
|
||||
intérprete de PHP. Con esta configuración, el servidor web revisa primero
|
||||
los permisos de acceso a los directorios <filename
|
||||
@@ -57,7 +59,7 @@
|
||||
Desafortunadamente, si la petición es proporcionada originalmente en esta forma,
|
||||
no se revisan los accesos a los directorios hechos por el servidor web <filename
|
||||
role="uri">/directorio/secreto/script.php</filename>, sino solamente al fichero
|
||||
<filename role="uri">/cgi-bin/php</filename>. De esta forma
|
||||
<filename role="uri">/cgi-bin/php</filename>. De esta forma
|
||||
<filename role="uri">/cgi-bin/php</filename> cualquier usuario está habilitado a acceder
|
||||
a cualquier documento protegido en el servidor web.
|
||||
</simpara>
|
||||
@@ -92,7 +94,7 @@
|
||||
</simpara>
|
||||
<simpara>
|
||||
La redirección puede ser configurada en Apache utilizando directivas
|
||||
Action y AddHandler (vea más abajo).
|
||||
<literal>Action</literal> y <literal>AddHandler</literal> (vea más abajo).
|
||||
</simpara>
|
||||
</sect1>
|
||||
|
||||
@@ -104,7 +106,7 @@
|
||||
previene a cualquiera que llame a PHP
|
||||
directamente por medio de una URL como esta <filename
|
||||
role="php">http://mi.servidor/cgi-bin/php/directoriosecreto/script.php</filename>.
|
||||
En cambio, PHP solamente lo analizará en este modo si éste se ha ido a través de
|
||||
En cambio, <command>php</command> solamente lo analizará en este modo si éste se ha ido a través de
|
||||
una regla directa del servidor web.
|
||||
</simpara>
|
||||
<simpara>
|
||||
@@ -120,7 +122,7 @@ AddHandler php-script .php
|
||||
<simpara>
|
||||
Esta opción ha sido probada solamente con el servidor web Apache, y
|
||||
se basa en que en Apache se configure en una variable de entorno no-estándar de CGI
|
||||
<envar>REDIRECT_STATUS</envar> para peticiones de redirección. Si su
|
||||
<envar>REDIRECT_STATUS</envar> para peticiones de redirección. Si su
|
||||
servidor web no soporta ninguna forma de decirle si la petición es
|
||||
directa o redirigida, usted no puede utilizar esta opción y debe usar
|
||||
una de las otras formas de ejecutar la versión CGI aquí documentadas.
|
||||
@@ -132,10 +134,10 @@ AddHandler php-script .php
|
||||
<simpara>
|
||||
Para incluir contenido activo, como scripts y ejecutables, en los
|
||||
directorios de documentos del servidor web es algunas veces considerado una práctica
|
||||
insegura. Si, por el hecho del algún error de configuración, los scripts
|
||||
insegura. Si, por el hecho del algún error de configuración, los scripts
|
||||
no se ejecutan y son mostrados como documentos HTML regulares, esto
|
||||
podría resultar en una fuga de información de propiedad intelectual
|
||||
o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas
|
||||
o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas
|
||||
preferirán configurar otra estructura de directorios para scripts que sean
|
||||
accesibles solamente a través del CGI de PHP, y por lo tanto siempre interpretado y no desplegado como tal.
|
||||
</simpara>
|
||||
@@ -159,7 +161,7 @@ AddHandler php-script .php
|
||||
</simpara>
|
||||
<simpara>
|
||||
Otra opción utilizable es esta <link
|
||||
linkend="ini.user-dir">user_dir</link>. Cuando user_dir no está configurado,
|
||||
linkend="ini.user-dir">user_dir</link>. Cuando user_dir no está configurado,
|
||||
lo único que controla el fichero abierto es <parameter>doc_root</parameter>.
|
||||
Al abrir una URL como <filename
|
||||
role="url">http://mi.servidor/~usuario/documento.php</filename> no resulta
|
||||
@@ -168,7 +170,7 @@ AddHandler php-script .php
|
||||
doc_root (si, un nombre de directorio que inicia con una a tilde [<literal>~</literal>]).
|
||||
</simpara>
|
||||
<simpara>
|
||||
Si user_dir es configurado, por ejemplo <filename
|
||||
Si <parameter>user_dir</parameter> es configurado, por ejemplo <filename
|
||||
role="dir">public_php</filename>, una petición como <filename
|
||||
role="url">http://mi.servidor/~usuario/doc.php</filename> abrirá un
|
||||
fichero llamado <filename>doc.php</filename> bajo el directorio
|
||||
@@ -189,7 +191,7 @@ AddHandler php-script .php
|
||||
<title>Caso 4: El analizador de PHP fuera del árbol de la web</title>
|
||||
<para>
|
||||
Una opción muy segura es poner el binario analizador de PHP en algún lugar
|
||||
fuera del árbol de ficheros de la web. En <filename
|
||||
fuera del árbol de ficheros de la web. En <filename
|
||||
role="dir">/usr/local/bin</filename>, por ejemplo. El único inconveniente
|
||||
real con esta opción es que ahora tendrá que poner una línea similar a:
|
||||
<informalexample>
|
||||
@@ -199,8 +201,8 @@ AddHandler php-script .php
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
como la primera línea de cualquier fichero que contenga etiquetas de PHP. También
|
||||
necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente
|
||||
como la primera línea de cualquier fichero que contenga etiquetas de PHP. También
|
||||
necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente
|
||||
como trataría cualquier otro script de CGI escrito en Perl, sh, bash, o cualquier
|
||||
otro lenguaje común de script el cual utilice <literal>#!</literal> como mecanismo
|
||||
de ejecución de si mismo.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 5f7a949cfc6f43d481d3a9513f9ee19db9afe21d Maintainer: andresdzphp Status: ready -->
|
||||
<!-- Reviewed: no Maintainer: andresdzphp -->
|
||||
<!-- EN-Revision: 7204e2dbb9b484c8b67bb5ad4a93fa1369c5b317 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<chapter xml:id="security.database" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Seguridad en bases de datos</title>
|
||||
|
||||
|
||||
<simpara>
|
||||
Hoy en día, las bases de datos son componentes esenciales de cualquier aplicación web,
|
||||
permitiendo a los sitios web proveer variedad de contenido dinámico. Puesto que se puede
|
||||
@@ -30,7 +30,7 @@
|
||||
que tenga almacenada. Un buen diseño del esquema de la base de datos y de la aplicación
|
||||
se ocupará de sus mayores temores.
|
||||
</simpara>
|
||||
|
||||
|
||||
<sect1 xml:id="security.database.design">
|
||||
<title>Diseño de bases de datos</title>
|
||||
<simpara>
|
||||
@@ -56,7 +56,7 @@
|
||||
solamente puede efectuar los cambios que la aplicación permita.
|
||||
</simpara>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 xml:id="security.database.connection">
|
||||
<title>Conexión a una base de datos</title>
|
||||
<simpara>
|
||||
@@ -72,7 +72,7 @@
|
||||
<acronym>PHP</acronym> y la base de datos por medio de SSL.
|
||||
</simpara-->
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 xml:id="security.database.storage">
|
||||
<title>Modelo de almacenamiento cifrado</title>
|
||||
<simpara>
|
||||
@@ -97,7 +97,7 @@
|
||||
descifra al obtenerlos. Véanse las referencias para ejemplos adicionales del
|
||||
funcionamiento del cifrado.
|
||||
</simpara>
|
||||
|
||||
|
||||
<sect2 xml:id="security.database.storage.hashing">
|
||||
<title>'Hashing'</title>
|
||||
<simpara>
|
||||
@@ -122,20 +122,20 @@
|
||||
<?php
|
||||
|
||||
// Almacenar el hash de la contraseña
|
||||
$consulta = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
|
||||
pg_escape_string($nombre_usuario),
|
||||
password_hash($contraseña, PASSWORD_DEFAULT));
|
||||
$resultado = pg_query($conexión, $consulta);
|
||||
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
|
||||
pg_escape_string($nombre_usuario),
|
||||
password_hash($password, PASSWORD_DEFAULT));
|
||||
$result = pg_query($connection, $query);
|
||||
|
||||
// Consultar si el usuario envió la contraseña correcta
|
||||
$consulta = sprintf("SELECT pwd FROM users WHERE name='%s';",
|
||||
$query = sprintf("SELECT pwd FROM users WHERE name='%s';",
|
||||
pg_escape_string($nombre_usuario));
|
||||
$fila = pg_fetch_assoc(pg_query($conexión, $consulta));
|
||||
$row = pg_fetch_assoc(pg_query($connection, $query));
|
||||
|
||||
if ($fila && password_verify($contraseña, $fila['pwd'])) {
|
||||
echo 'Bienvenido, ' . htmlspecialchars($nombre_usuario) . '!';
|
||||
if ($row && password_verify($contraseña, $row['pwd'])) {
|
||||
echo 'Bienvenido, ' . htmlspecialchars($username) . '!';
|
||||
} else {
|
||||
echo 'La autenticación ha fallado para ' . htmlspecialchars($nombre_usuario) . '.';
|
||||
echo 'La autenticación ha fallado para ' . htmlspecialchars($username) . '.';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -144,7 +144,7 @@ if ($fila && password_verify($contraseña, $fila['pwd'])) {
|
||||
</example>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 xml:id="security.database.sql-injection">
|
||||
<title>Inyección de SQL</title>
|
||||
<simpara>
|
||||
@@ -163,9 +163,9 @@ if ($fila && password_verify($contraseña, $fila['pwd'])) {
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$índice = $_GET['offset']; // ¡Cuidado, no hay validación en la entrada de datos!
|
||||
$consulta = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $índice;";
|
||||
$resultado = pg_query($conexión, $consulta);
|
||||
$offset = $_GET['offset']; // ¡Cuidado, no hay validación en la entrada de datos!
|
||||
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
|
||||
$result = pg_query($conn, $query);
|
||||
|
||||
?>
|
||||
]]>
|
||||
@@ -192,7 +192,7 @@ insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
|
||||
<note>
|
||||
<para>
|
||||
Es una técnica común forzar al analizador SQL a ignorar el resto de la
|
||||
consulta escrita por el desarrollador con <literal>--</literal>, lo cual
|
||||
consulta escrita por el desarrollador con <literal>--</literal>, lo cual
|
||||
representa un comentario en SQL.
|
||||
</para>
|
||||
</note>
|
||||
@@ -213,9 +213,9 @@ insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$consulta = "SELECT id, name, inserted, size FROM products
|
||||
WHERE size = '$tamaño'";
|
||||
$resultado = odbc_exec($conexión, $consulta);
|
||||
$query = "SELECT id, name, inserted, size FROM products
|
||||
WHERE size = '$size'";
|
||||
$result = odbc_exec($conexión, $query);
|
||||
|
||||
?>
|
||||
]]>
|
||||
@@ -242,7 +242,7 @@ union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from use
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$consulta = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
|
||||
$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
@@ -258,10 +258,10 @@ $consulta = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
|
||||
<?php
|
||||
|
||||
// $uid: ' or uid like '%admin%
|
||||
$consulta = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%';";
|
||||
$query = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%';";
|
||||
|
||||
// $pwd: jejeje', trusted=100, admin='yes
|
||||
$consulta = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
|
||||
$query = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
|
||||
...;";
|
||||
|
||||
?>
|
||||
@@ -282,8 +282,8 @@ $consulta = "UPDATE usertable SET pwd='jejeje', trusted=100, admin='yes' WHERE
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$consulta = "SELECT * FROM products WHERE id LIKE '%$prod%'";
|
||||
$resultado = mssql_query($consulta);
|
||||
$query = "SELECT * FROM products WHERE id LIKE '%$prod%'";
|
||||
$result = mssql_query($query);
|
||||
|
||||
?>
|
||||
]]>
|
||||
@@ -291,16 +291,16 @@ $resultado = mssql_query($consulta);
|
||||
</example>
|
||||
Si un atacante envía el valor
|
||||
<literal>a%' exec master..xp_cmdshell 'net user test testpass /ADD' --</literal>
|
||||
a <varname>$prod</varname>, la <varname>$consulta</varname> será:
|
||||
a <varname>$prod</varname>, la <varname>$query</varname> será:
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$consulta = "SELECT * FROM products
|
||||
$query = "SELECT * FROM products
|
||||
WHERE id LIKE '%a%'
|
||||
exec master..xp_cmdshell 'net user test testpass /ADD' --%'";
|
||||
$resultado = mssql_query($consulta);
|
||||
$result = mssql_query($query);
|
||||
|
||||
?>
|
||||
]]>
|
||||
@@ -323,10 +323,14 @@ $resultado = mssql_query($consulta);
|
||||
<imageobject>
|
||||
<imagedata fileref="en/security/figures/xkcd-bobby-tables.png" format="PNG"/>
|
||||
</imageobject>
|
||||
<caption>
|
||||
<simpara>
|
||||
Imagen cortesía de <link xlink:href="&url.xkcd;327">xkcd</link>
|
||||
</simpara>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
Imagen cortesía de <link xlink:href="&url.xkcd;327">xkcd</link>
|
||||
</para>
|
||||
|
||||
|
||||
<sect2 xml:id="security.database.avoiding">
|
||||
<title>Técnicas de evitación</title>
|
||||
<para>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: edwincartagenah Status: ready -->
|
||||
<!-- EN-Revision: ae725a44023db78b9f6e9d2a0baac8c8dc337d38 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<!-- splitted from ./index.xml, last change in rev 1.66 -->
|
||||
<chapter xml:id="security.errors" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Reportando errores</title>
|
||||
@@ -33,7 +34,7 @@
|
||||
el desarrollador que está intentando depurar un script, indicando qué cosas,
|
||||
como por ejemplo, qué función o qué fichero de PHP falló, y el número de línea en donde
|
||||
la falla ocurrió. Toda esta es la información que puede ser explotada.
|
||||
Esto no es algo raro para un desarrollador de PHP que utilice las funciones
|
||||
Esto no es algo raro para un desarrollador de PHP que utilice las funciones
|
||||
<function>show_source</function>, <function>highlight_string</function>, o
|
||||
<function>highlight_file</function> como una medida de depuración, pero en
|
||||
un sitio en escena, esto puede exponer variables ocultas, sintáxis sin revisar,
|
||||
@@ -62,7 +63,7 @@
|
||||
</para>
|
||||
<para>
|
||||
Por ejemplo, el estilo común de un error genérico de PHP indica que un sistema
|
||||
ciertamente está ejecutando PHP. Si un atacante está en una página .html, y quiere
|
||||
ciertamente está ejecutando PHP. Si un atacante está en una página <literal>.html</literal>, y quiere
|
||||
probar qué motor hay tras de ese servidor (para buscar debilidades en el sistema),
|
||||
lo alimenta con datos erróneos que lo podrían habilitar a que determine
|
||||
que ese sistema fue construido con PHP.
|
||||
@@ -112,10 +113,10 @@
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
if ($usuario) { // No se ha inicializado o revisado antes de utilizar
|
||||
$permitir_acceso = 1;
|
||||
if ($username) { // No se ha inicializado o revisado antes de utilizar
|
||||
$good_login = 1;
|
||||
}
|
||||
if ($permitir_acceso == 1) { // Si la prueba anterior falla, los que no estén inicializados o comprobados antes de utilizar, tendrán acceso
|
||||
if ($good_login == 1) { // Si la prueba anterior falla, los que no estén inicializados o comprobados antes de utilizar, tendrán acceso
|
||||
readfile("/ruta/hacia/datos/altamente/sensibles/index.html");
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: c5d92fd7127e059d448d43ba339f19956f83b05a Maintainer: jvenegasperu Status: ready -->
|
||||
<!-- Reviewed: no -->
|
||||
<!-- EN-Revision: 91570644fbbe4d23e79908e1a04c4c4d003fe587 Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<!-- splitted from ./index.xml, last change in rev 1.66 -->
|
||||
<chapter xml:id="security.filesystem" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Seguridad del Sistema de Archivos</title>
|
||||
<simpara>
|
||||
<acronym>PHP</acronym> está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con
|
||||
<acronym>PHP</acronym> está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con
|
||||
respecto a los permisos de archivos y directorios. Esto permite
|
||||
controlar qué archivos en el sistema de archivos se pueden leer. Se debe
|
||||
tener cuidado con los archivos que son legibles para garantizar
|
||||
@@ -16,16 +16,16 @@
|
||||
<simpara>
|
||||
Desde que <acronym>PHP</acronym> fue diseñado para permitir el acceso a nivel de usuarios para el sistema de archivos,
|
||||
es perfectamente posible escribir un script <acronym>PHP</acronym> que le permita
|
||||
leer archivos del sistema como /etc/passwd, modificar sus conexiones de red,
|
||||
leer archivos del sistema como <filename>/etc/passwd</filename>, modificar sus conexiones de red,
|
||||
enviar trabajos de impresión masiva, etc. Esto tiene algunas
|
||||
implicaciones obvias, es necesario asegurarse que los archivos
|
||||
que se van a leer o escribir son los apropiados.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Considere el siguiente script, donde un usuario indica que
|
||||
quiere borrar un archivo en su directorio home. Esto supone una
|
||||
quiere borrar un archivo en su directorio home. Esto supone una
|
||||
situación en la que una interfaz web en <acronym>PHP</acronym> es usada regularmente para gestionar archivos,
|
||||
por lo que es necesario que el usuario Apache pueda borrar archivos en los
|
||||
por lo que es necesario que el usuario Apache pueda borrar archivos en los
|
||||
directorios home de los usuarios.
|
||||
</simpara>
|
||||
<para>
|
||||
@@ -34,6 +34,7 @@
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// eliminar un archivo del directorio personal del usuario
|
||||
$username = $_POST['user_submitted_name'];
|
||||
$userfile = $_POST['user_submitted_filename'];
|
||||
@@ -43,20 +44,22 @@ unlink("$homedir/$userfile");
|
||||
|
||||
echo "El archivo ha sido eliminado!";
|
||||
?>
|
||||
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario,
|
||||
Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario,
|
||||
estos pueden representar un nombre de archivo y un nombre de usuario que pertenecen a otra persona,
|
||||
incluso se podría borrar el archivo a pesar que se supone que no estaría permitido hacerlo.
|
||||
En este caso, usted desearía usar algún otro tipo de autenticación.
|
||||
Considere lo que podría suceder si las variables enviadas son
|
||||
"../etc/" y "passwd". El código entonces se ejecutaría efectivamente como:
|
||||
<literal>"../etc/"</literal> y <literal>"passwd"</literal>. El código entonces se ejecutaría efectivamente como:
|
||||
<example>
|
||||
<title>... Un ataque al sistema de archivos</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// elimina un archivo desde cualquier lugar en el disco duro al que
|
||||
// el usuario de PHP tiene acceso. Si PHP tiene acceso de root:
|
||||
$username = $_POST['user_submitted_name']; // "../etc"
|
||||
@@ -67,6 +70,7 @@ unlink("$homedir/$userfile"); // "/home/../etc/passwd"
|
||||
|
||||
echo "El archivo ha sido eliminado!";
|
||||
?>
|
||||
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
@@ -90,6 +94,7 @@ echo "El archivo ha sido eliminado!";
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// elimina un archivo del disco duro al que
|
||||
// el usuario de PHP tiene acceso.
|
||||
$username = $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
|
||||
@@ -103,6 +108,7 @@ if (file_exists($filepath) && unlink($filepath)) {
|
||||
} else {
|
||||
$logstring = "No se ha podido eliminar $filepath\n";
|
||||
}
|
||||
|
||||
$fp = fopen("/home/logging/filedelete.log", "a");
|
||||
fwrite($fp, $logstring);
|
||||
fclose($fp);
|
||||
@@ -113,15 +119,16 @@ echo htmlentities($logstring, ENT_QUOTES);
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
Sin embargo, incluso esto no está exento de defectos. Si la autenticación
|
||||
Sin embargo, incluso esto no está exento de defectos. Si la autenticación
|
||||
del sistema permite a los usuarios crear sus propios inicios de sesión de usuario, y un usuario
|
||||
eligió la entrada "../etc/", el sistema está expuesto una vez más. Por
|
||||
eligió la entrada <literal>"../etc/"</literal>, el sistema está expuesto una vez más. Por
|
||||
esta razón, puede que prefiera escribir un chequeo más personalizado:
|
||||
<example>
|
||||
<title>Comprobación más segura del nombre de archivo</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$username = $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
|
||||
$userfile = $_POST['user_submitted_filename'];
|
||||
$homedir = "/home/$username";
|
||||
@@ -132,7 +139,8 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
|
||||
die("nombre de usuario o nombre de archivo incorrecto");
|
||||
}
|
||||
|
||||
//etc...
|
||||
// etc.
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
@@ -140,18 +148,18 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
|
||||
</para>
|
||||
<para>
|
||||
Dependiendo de sus sistema operativo, hay una gran variedad de archivos
|
||||
a los que debe estar atento, esto incluye las entradas de dispositivos (/dev/
|
||||
o COM1), archivos de configuracion (archivos /etc/ y archivos .ini),
|
||||
las muy conocidas carpetas de almacenamiento (/home/, Mis documentos), etc. Por esta
|
||||
a los que debe estar atento, esto incluye las entradas de dispositivos (<filename>/dev/</filename>
|
||||
o <filename>COM1</filename>), archivos de configuracion (archivos <filename>/etc/</filename> y archivos <literal>.ini</literal>),
|
||||
las muy conocidas carpetas de almacenamiento (<filename>/home/</filename>, <filename>My Documents</filename>), etc. Por esta
|
||||
razón, por lo general es más fácil crear una política en donde se prohíba
|
||||
todo excepto lo que expresamente se permite.
|
||||
todo excepto lo que expresamente se permite.
|
||||
</para>
|
||||
<sect1 xml:id="security.filesystem.nullbytes">
|
||||
<title>Cuestiones relacionadas a bytes nulos</title>
|
||||
<simpara>
|
||||
Como <acronym>PHP</acronym> utiliza las funciones de C para operaciones relacionadas al sistema de archivos,
|
||||
se podría manejar bytes nulos de manera bastante inesperada.
|
||||
Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos
|
||||
Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos
|
||||
no serán consideradas por completo, sino sólo hasta que ocurra un byte nulo.
|
||||
|
||||
El siguiente ejemplo muestra un código vulnerable que presenta este problema:
|
||||
@@ -161,12 +169,14 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$file = $_GET['file']; // "../../etc/passwd\0"
|
||||
if (file_exists('/home/wwwrun/'.$file.'.php')) {
|
||||
if (file_exists('/home/wwwrun/' . $file . '.php')) {
|
||||
// file_exists devolverá true si el archivo /home/wwwrun/../../etc/passwd existe
|
||||
include '/home/wwwrun/'.$file.'.php';
|
||||
include '/home/wwwrun/' . $file . '.php';
|
||||
// el archivo /etc/passwd se incluirá
|
||||
}
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
@@ -180,7 +190,8 @@ if (file_exists('/home/wwwrun/'.$file.'.php')) {
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$file = $_GET['file'];
|
||||
|
||||
$file = $_GET['file'];
|
||||
|
||||
// Lista blanca de valores posibles
|
||||
switch ($file) {
|
||||
@@ -192,6 +203,7 @@ switch ($file) {
|
||||
default:
|
||||
include '/home/wwwrun/include/main.php';
|
||||
}
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: ab6785b01ce1006e3a9761988575289f40c9b678 Maintainer: yago Status: ready -->
|
||||
<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: PhilDaiguille Status: ready -->
|
||||
<!-- Reviewed: yes Maintainer: Marqitos -->
|
||||
<!-- splitted from ./index.xml, last change in rev 1.66 -->
|
||||
<chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Datos Enviados por el Usuario</title>
|
||||
@@ -19,14 +20,14 @@
|
||||
// eliminar un archivo del directorio personal del usuario .. ¿o
|
||||
// quizás de alguien más?
|
||||
|
||||
unlink ($variable_malvada);
|
||||
unlink ($evil_var);
|
||||
|
||||
// Imprimir el registro del acceso... ¿o quizás una entrada de /etc/passwd?
|
||||
fwrite ($desc_archivo, $variable_malvada);
|
||||
fwrite ($fp, $evil_var);
|
||||
|
||||
// Ejecutar algo trivial.. ¿o rm -rf *?
|
||||
system ($variable_malvada);
|
||||
exec ($variable_malvada);
|
||||
system ($evil_var);
|
||||
exec ($evil_var);
|
||||
|
||||
?>
|
||||
]]>
|
||||
@@ -73,13 +74,24 @@ exec ($variable_malvada);
|
||||
su sistema, pero puede ayudar a mejorarla.
|
||||
</para>
|
||||
<para>
|
||||
Puede que también desee considerar la deshabilitación de register_globals,
|
||||
magic_quotes, u otros parámetros convenientes que pueden causar confusión
|
||||
sobre la validez, fuente o valor de una determinada variable. Trabajar con
|
||||
<acronym>PHP</acronym> en modo error_reporting(E_ALL) también puede ayudarle a advertir
|
||||
variables que están siendo usadas antes de ser chequeadas o inicializadas
|
||||
(de modo que puede prevenir que datos inusuales produzcan operaciones
|
||||
inadvertidas).
|
||||
Mejore la seguridad deshabilitando las configuraciones de conveniencia que
|
||||
oscurecen el origen, la validez o la integridad de los datos de entrada.
|
||||
La creación implícita de variables y la entrada no verificada pueden llevar a
|
||||
vulnerabilidades como ataques de inyección y manipulación de datos.
|
||||
</para>
|
||||
<para>
|
||||
Características como <literal>register_globals</literal> y
|
||||
<literal>magic_quotes</literal> (ambas eliminadas en PHP 5.4.0) contribuyeron
|
||||
a estos riesgos al crear automáticamente variables a partir de la entrada del
|
||||
usuario y escapar datos de manera inconsistente. Aunque ya no están en PHP,
|
||||
riesgos similares persisten si la gestión de la entrada es incorrecta.
|
||||
</para>
|
||||
<para>
|
||||
Habilite <link linkend="function.error-reporting">error_reporting(E_ALL)</link> para
|
||||
ayudar a detectar variables no inicializadas y validar la entrada. Utilice
|
||||
tipos estrictos (<link linkend="language.types.declarations.strict">declare(strict_types=1)</link>,
|
||||
introducido en PHP 7) para imponer la seguridad de tipos, prevenir conversiones
|
||||
de tipos no intencionadas y mejorar la seguridad general.
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user