martes, 25 de julio de 2017

[Fecha de publicación: 2017-07-25]

Temas a tener en cuenta:


chmod

(PHP 4, PHP 5, PHP 7)
chmod — Cambia el modo de un fichero

Descripción ¶

bool chmod ( string $filename , int $mode )
Intenta cambiar el modo de un fichero especificado por el dado en mode.

Parámetros ¶

filename
Ruta del fichero.
mode
Observe que no se asume que mode sea automáticamente un valor octal, por lo que, para asegurarse de que la opración sea la esperada, es necesario prefijar mode con un cero (0). String tales como "g+w" no funcionarán adecuadamente.
<?php
chmod
("/directorio/fichero"755);   // decimal; probablemente incorrectochmod("/directorio/fichero""u+rwx,go+rx"); // string; incorrectochmod("/directorio/fichero"0755);  // octal; valor de modo correcto?>
El parámetro mode consiste en tres componentes numéricos octales que especifican las restricciones de acceso para el propietario, el grupo de usuarios al que pertenece el propietario, y para todos los demás, en este orden. Un componente puede ser computado sumando los permisos necesarios para ese usuario objetivo base. El número 1 significa que se conceden derechos de ejecución, el número 2 significa que se puede escribir en el fichero, el número 4 significa que el fichero se puede leer. Sume estos números para especificar los derechos necesarios. Se puede leer más sobre los modos en sistemas Unix con 'man 1 chmod' y 'man 2 chmod'.
<?php// Lectura y escritura para el propietario, nada para los demáschmod("/directorio/fichero"0600);
// Lectura y escritura para el propietario, lectura para los demáschmod("/directorio/fichero"0644);
// Todo para el propietario, lectura y ejecución para los otroschmod("/directorio/fichero"0755);
// Todo para el propietario, lectura y ejecución para el grupo del propietariochmod("/directorio/fichero"0750);?>

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Notas ¶

Nota:
El usuario actual es el usuario bajo el que se ejecuta PHP. Probablemente no sea el mismo usuario que se utilize para el intérprete de comandos normal o el acceso FTP. EL modo puede ser cambiado sólo por el usuario al que pertenece el fichero en la mayoría de sistemas.
NotaEsta función no funcionará en ficheros remotos ya que el fichero debe ser accesible vía el sistema de ficheros del servidor para poder ser examinado.
Nota:
Cuando modo seguro está habilitado, PHP verifica si los ficheros o directorios sobre los que se va a operar tienen el mismo UID (propietario) que el del script que está siendo ejecutado. Además, no se pueden establecer los bits SUID, SGID y sticky.
tomado de: http://php.net/manual/es/function.chmod.php

NAME

getcwd - get the pathname of the current working directory

SYNOPSIS

#include <unistd.h>

char *getcwd(char *
buf, size_t size);

DESCRIPTION

The getcwd() function shall place an absolute pathname of the current working directory in the array pointed to by buf, and return buf. The pathname copied to the array shall contain no components that are symbolic links. The size argument is the size in bytes of the character array pointed to by the buf argument. If buf is a null pointer, the behavior of getcwd() is unspecified.

RETURN VALUE

Upon successful completion, getcwd() shall return the buf argument. Otherwise, getcwd() shall return a null pointer and set errno to indicate the error. The contents of the array pointed to by buf are then undefined.

ERRORS

The getcwd() function shall fail if:
[EINVAL]
The size argument is 0.
[ERANGE]
The size argument is greater than 0, but is smaller than the length of the pathname +1.
The getcwd() function may fail if:
[EACCES]
Read or search permission was denied for a component of the pathname.
[ENOMEM]
Insufficient storage space is available.

The following sections are informative.

EXAMPLES

Determining the Absolute Pathname of the Current Working Directory
The following example returns a pointer to an array that holds the absolute pathname of the current working directory. The pointer is returned in the ptr variable, which points to the bufarray where the pathname is stored.
#include <stdlib.h>
#include <unistd.h>
...
long size;
char *buf;
char *ptr;


size = pathconf(".", _PC_PATH_MAX);


if ((buf = (char *)malloc((size_t)size)) != NULL)
    ptr = getcwd(buf, (size_t)size);
...

tomado de: http://pubs.opengroup.org/onlinepubs/009695399/functions/getcwd.html


strpos

(PHP 4, PHP 5, PHP 7)
strpos — Encuentra la posición de la primera ocurrencia de un substring en un string

Descripción ¶

mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Encuentra la posición numérica de la primera ocurrencia del needle (aguja) en el string haystack (pajar).

Parámetros ¶

haystack
El string en donde buscar.
needle
Si la needle no es una cadena, es convertida a integer y se interpreta como el valor ordinal de un carácter.
offset
Si se específica, la búsqueda iniciará en éste número de caracteres contados desde el inicio del string. A diferencia de strrpos() y strripos(), el offset no puede ser negativo.

Valores devueltos ¶

Devuelve la posición donde la aguja existe, en relación al inicio del string haystack (independiente del offset). También tener en cuenta que las posiciones de inicio de los string empiezan en 0 y no 1.
Devuelve FALSE si no fue encontrada la aguja.
Advertencia
Esta función puede devolver el valor booleano FALSE, pero también puede devolver un valor no booleano que se evalúa como FALSE. Por favor lea la sección sobre Booleanos para más información. Use el operador === para comprobar el valor devuelto por esta función.

Ejemplos ¶

Ejemplo #1 Usando ===
<?php
$mystring 
'abc';$findme   'a';$pos strpos($mystring$findme);
// Nótese el uso de ===. Puesto que == simple no funcionará como se espera
// porque la posición de 'a' está en el 1° (primer) caracter.
if ($pos === false) {
    echo 
"La cadena '$findme' no fue encontrada en la cadena '$mystring'";
} else {
    echo 
"La cadena '$findme' fue encontrada en la cadena '$mystring'";
    echo 
" y existe en la posición $pos";
}
?>
Ejemplo #2 Usando !==
<?php
$mystring 
'abc';$findme   'a';$pos strpos($mystring$findme);
// El operador !== también puede ser usado. Puesto que != no funcionará como se espera
// porque la posición de 'a' es 0. La declaración (0 != false) se evalúa a
// false.
if ($pos !== false) {
     echo 
"La cadena '$findme' fue encontrada en la cadena '$mystring'";
         echo 
" y existe en la posición $pos";
} else {
     echo 
"La cadena '$findme' no fue encontrada en la cadena '$mystring'";
}
?>
Ejemplo #3 Uso de offset
<?php// Se puede buscar por el caracter, ignorando cualquier cosa antes del offset$newstring 'abcdef abcdef';$pos strpos($newstring'a'1); // $pos = 7, no 0
CODIGO IMPORTANTE: 

<?php
   $destination_path = getcwd().DIRECTORY_SEPARATOR;
   $result = 0;
   $miarchivito = basename( $_FILES['myfile']['name']);
   $pos = strpos($miarchivito, ".");
   $extension = substr($miarchivito, ($pos +1));
   $miarchivito = substr($miarchivito,0, $pos);

   $miarchivito = $miarchivito . "." . $extension;

   $target_path = $destination_path . '/adjuntados/'.$miarchivito;

   if ($extension == "zip"){
   if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
      $result = 1;
   }
}
   sleep(1);
?>
<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>

jueves, 20 de julio de 2017

[Fecha de publicación: 2017-07-18]

EXPLICACIÓN DEL NUEVO TEMA


Repaso de tablas HTML:

Grupos de Filas

Ya hemos visto que las tablas se van definiendo por filas mediante el elemento tr. Pues dentro de HTML podemos agrupar estas filas por funcionalidad.
Para ello podemos agrupar las filas en tres partes:
Cada uno de estos elementos tendrá una o n filas, dependiendo de las que queramos agrupar. La estructura es la misma para los tres casos:
<thead>
  <tr> <!-- fila(s) --></tr>
</thead>

<tbody>
  <tr> <!-- fila(s) --></tr>
</tbody>

<tfoot>
  <tr> <!-- fila(s) --></tr>
</tfoot>
Es importante saber que no es necesario que aparezcan en ese orden dentro de la tabla, este podría ser alterados. Si bien el navegador si que las representará en dicho orden.
De esta forma podríamos tener la siguiente tabla con agrupaciones:
<table>
  <thead>
    <tr>
    <td scope=”row”>Mes</td>
      <td>Enero</td>
      <td>Febrero</td>
    </tr>
  </thead>
  <tfoot>
    <tr>
    <td>Total</td>
      <td>15</td>
      <td>25</td>
    </tr>
  </tfoot>
  <tbody>
    <tr>
    <td>Agua</td>
      <td>10</td>
      <td>15</td>
    </tr>
    <tr>
    <td>Gas</td>
      <td>5</td>
      <td>10</td>
    </tr>
  </tbody>
</table>
Que representaría lo siguiente:
MesEneroFebrero
Total1525
Agua1015
Gas510

Grupos de columnas

Ya hemos visto que las tablas se definen por filas. Pero una de las cosas que nos ofrece HTML es la posibilidad de definir, sobre dichas filas, grupos de columnas que tengan una relación semántica entre ellas.
Por ejemplo en la siguiente tabla vemos que hay una relación semántica de las columnas relativa a los meses.
EneroFebrero
IngresosGastosIngresosGastos
1.000€700€1.100€580€
1.800€920€1.750€920€
Para poder definir estas relaciones semánticas entre las columnas HTML nos ofrece el elemento colgroup.
El elemento colgroup se define al principio de la tabla y tiene la siguiente estructura.
<colgroup span=”numero-columnas” width=”ancho”></colgroup>
Dónde el atributo span indica el número de columnas que representa la agrupación. Empezando de izquierda a derecha.
Además contamos con el atributo width el cual nos permite especificar un ancho para la columna.
En la tabla que hemos visto el código HTML quedaría de la siguiente forma:
<table>
  <colgroup span=”2” width=”100”></colgroup>
  <colgroup span=”2” width=”100”></colgroup>
  <tr>
    <td colspan=”2”>Enero</td>
    <td colspan=”2”>Febrero</td>
  </tr>
  <tr>
    <td>Ingresos</td>
    <td>Gastos</td>
    <td>Ingresos</td>
    <td>Gastos</td>
  </tr>
  <tr>
    <td>1.000€</td>
    <td>700€/td>
    <td>1.100€</td>
    <td>580€</td>
  </tr>
  <tr>
    <td>1.800€</td>
    <td>920€</td>
    <td>1.750€</td>
    <td>920€</td>
  </tr>
</table>
Si no queremos utilizar el atributo span o si bien queremos manipular los estilos gráficos de las columnas, tenemos otro elemento, este es el elemento col.
El elemento col aparecerá dentro del elemento colgroup tantas veces como columnas queramos agrupar.
La estructura del elemento col es:
<col span=”numero-columnas” width=”ancho-columna” />
Es decir que también permite agrupar columnas mediante su atributo width y darles un ancho mediante el atributo width.
El anterior ejemplo utilizando el elemento col quedaría de la siguiente forma:
<table>
  <colgroup>
    <col width=”100”>
    <col width=”100”>
  </colgroup>
  <colgroup>
    <col width=”100”>
    <col width=”100”>
  </colgroup>
  <tr>
    <td colspan=”2”>Enero</td>
    <td colspan=”2”>Febrero</td>
  </tr>
  <tr>
    <td>Ingresos</td>
    <td>Gastos</td>
    <td>Ingresos</td>
    <td>Gastos</td>
  </tr>
  <tr>
    <td>1.000€</td>
    <td>700€/td>
    <td>1.100€</td>
    <td>580€</td>
  </tr>
  <tr>
    <td>1.800€</td>
    <td>920€</td>
    <td>1.750€</td>
    <td>920€</td>
  </tr>
</table>

Tablas para agentes de usuario no visuales

Las tablas no siempre serán representadas por un navegador web o agente de usuario visual. Hay otro tipo de agentes de usuario que son no visuales y que suelen estar adaptados para discapacitados.

Asociar celdas a cabeceras

En este sentido tenemos que saber cómo dar formato a las tablas para que estos agentes de usuario no visuales puedan interpretar la información de forma correcta.
El elemento sobre el que nos podemos apoyar es el atributo header. El atributo header relaciona una celda con una celda de la cabecera, para poder establecer esta relación semántica.
Partamos de la siguiente tabla…
NombreEdadLocalidad
Víctor38Madrid
Esther25Salamanca
Para ello lo primero que hay que hacer es darle un atributo id a las celdas de cabecera.
<tr>
  <th id=”nombre”>Nombre</th>
  <th id=”edad”>Edad</th>
  <th id=”localidad”>Localidad</th>
</tr>
Ahora, para cada celda deberemos de asociar el identificador, atributo id, de la cabecera que les aplique en el atributo headers.
<tr>
  <th headers=”nombre”>Víctor</th>
  <th headers=”edad”>38</th>
  <th headers=”localidad”>Madrid</th>
</tr>
<tr>
  <th headers=”nombre”>Esther</th>
  <th headers=”edad”>25</th>
  <th headers=”localidad”>Salamanca</th>
</tr>
Así, el agente de usuario no visual, cuando vaya leyendo la fila hará lo siguiente:
Nombre, Víctor. Edad, 38. Localidad, Madrid.
Nombre, Esther. Edad, 25. Localidad, Salamanca.”

Categorizar Celdas

Otra de las cosas que podemos hacer para los agentes de usuario no visuales es categorizar las celdas. En HTML tenemos un atributo que es axis, de esta manera podemos establecer ejes de agrupación.
El atributo axis aplica a las celdas td y celdas de cabecera th. Y permite darle una categoría textual.
La estructura sería:
<td axis=”categoria”>...</td>
ComidaHotelTransporte
Madrid
1 de marzo15120
2 de marzo1812034
3 de marzo25120
Ávila
4 de marzo107512
5 de marzo127514
En esta tabla podemos establecer que haya 3 tipos de categorías. Los gastos (comida, hotel y transporte), las ciudades (Madrid y Ávila) y las fechas.