function PFN_mover_inc($dir) { global $PFN_paths; $od = @opendir($dir); while ($cada = @readdir($od)) { if ($cada == '.' || $cada == '..') { continue; } if (is_dir($dir . $cada)) { PFN_mover_inc($dir . $cada . '/'); } elseif (preg_match('/^\\..*(jpg|png|gif|jpeg)$/i', $cada) || preg_match('/^\\..*\\.INC$/', $cada)) { PFN_crea_directorio_recursivo($PFN_paths['extra'] . $dir); if (preg_match('/^\\..*(jpg|png|gif|jpeg)$/i', $cada)) { $destino = $PFN_paths['extra'] . $dir . '/' . substr($cada, 1); } elseif (preg_match('/^\\..*\\.INC$/', $cada)) { $destino = $PFN_paths['extra'] . $dir . '/' . substr($cada, 1, -4) . '.php'; } else { $destino = $PFN_paths['extra'] . $dir . '/' . $cada; } if (@copy($dir . $cada, $destino)) { @unlink($dir . $cada); } } } @closedir($od); }
/** * function copiar (string $orixinal, string $destino) * * copia un fichero de información adicional * se usa siempre que se copie el fichero original asociado * * return boolean */ function copiar($orixinal, $destino) { if (is_dir($destino)) { $orixinal = PFN_get_path_extra($orixinal); $destino = PFN_get_path_extra($destino); } else { $orixinal = $orixinal; $destino = $destino; } PFN_crea_directorio_recursivo(dirname($destino)); $this->accions->rexistro(false); $ok = $this->accions->copiar($orixinal, $destino); $this->accions->rexistro(true); return $ok; }
/** * function escribe_inc (string $cal, array $campos) * $cal: fichero original (no de datos adicionales) * $campos: array con los datos a escribir * * escribe el fichero de datos adicionales a partir de los * datos recibidos por $campos * * devuelve el nombre del fichero de datos adicionales escrito * * return string */ function escribe_inc($cal, $campos) { $txt_arq = ''; $txt_tmp = ''; $nome_inc = $this->nome_inc($cal); foreach ($campos as $k => $v) { if (is_array($v) && trim($k) != '') { $txt_v2 = ''; foreach ($v as $k2 => $v2) { $v2 = trim($v2); $k2 = trim($k2); $txt_v2 .= strlen($k2) && strlen($v2) ? "'" . $k2 . "' => '" . $v2 . "'," : ''; } if (!empty($txt_v2)) { $txt_tmp .= "\n\t'" . $k . "' => array(" . $txt_v2; $txt_tmp = substr($txt_tmp, 0, -1) . '),'; } } else { if (trim($k) != '' && trim($v) != '') { $txt_tmp .= "\n\t'" . $k . "' => '" . $v . "',"; } } } if (!empty($txt_tmp)) { $txt_arq = "<?php\ndefined('OK') or die();" . "\nreturn array(" . substr($txt_tmp, 0, -1) . "\n);\n?>"; } PFN_crea_directorio_recursivo(dirname($nome_inc)); if ($this->arquivos->abre_escribe($nome_inc, $txt_arq)) { return $nome_inc; } }
/** * function temporal (array $datos, integer $posX, integer $posY, integer $ancho, integer $alto, boolean $manter) * $datos: array de valores devueltos por getimagesize * $posX: coordenada X donde se pulsa sobre la imagen $tmp * $posY: coordenada Y donde se pulsa sobre la imagen $tmp * $ancho: ancho en pixels que se deben coger de la imagen $tmp * $ancho: alto en pixels que se deben coger de la imagen $tmp * $mantener: mantiene o no las proporciones originales (copia, recorte) * * crea una imágen temporal a partir de los valores ($datos) de otra * la imágen será creada con inicio en $posX y $posY respecto a la * imágen original $tmp y cogiendo la zona marcada por $ancho y $alto * para reducirla. * la reducción sera proporcional a la original con limites de configuración * de $this->conf->g('imaxes','ancho') y $this->conf->g('imaxes','alto') en caso * de que $mater sea true, en caso contrario se creará una imagen cuadrada * con tamaño exacto $this->conf->g('imaxes','ancho') y $this->conf->g('imaxes','alto'). * * devuelve la ruta para poder ser visualizada por web * * return string */ function _reducir($datos, $posX = 0, $posY = 0, $ancho = 0, $alto = 0, $manter = true) { switch ($datos[2]) { case 1: $imaxe = @imageCreateFromGIF($this->orixinal); break; case 2: $imaxe = @imageCreateFromJPEG($this->orixinal); break; case 3: $imaxe = @imageCreateFromPNG($this->orixinal); break; default: return false; break; } if (!$imaxe) { return 0; } if ($manter) { list($dX, $dY) = $this->proporcions($datos[0], $datos[1]); list($ancho, $alto) = array($datos[0], $datos[1]); } else { $dX = $this->conf->g('imaxes', 'ancho'); $dY = $this->conf->g('imaxes', 'alto'); } list($posX, $posY) = $this->maximos($datos, $posX, $posY, $ancho, $alto); // Si da problemas usar imagecreate if ($this->conf->g('gd2') == true) { $pequena = imageCreateTrueColor($dX, $dY); } else { $pequena = imageCreate($dX, $dY); } if (!$this->conf->g('gd2') || $dX == $datos[0] && ($dY = $datos[1]) || ($ancho < $dX || $alto < $dY)) { // imageCopyResampled no funciona correctamente ya que omite las coordenadas // de la imagen original y siempre recorta desde la esquina superior izquierda // pero mantengo el código en caso de que se solucione en la próximas versiones if (function_exists('imageCopyResampled')) { // ImageCopyResized || ImageCopyResampled: // $pequena: imagen a reducida a crear // $imaxe: imagen original // 0, 0: coordenadas de inicio para la nueva imagen // $posX: coordenada X donde se pulsa sobre la imagen original // $posY: coordenada Y donde se pulsa sobre la imagen original // asi conseguimos que la imagen reducida empiece en las // coordenadas escogidas en la imagen original // $dX: ancho en pixels que debe medir la imagen reducida // $dY: alto en pixels que debe medir la imagen reducida // $ancho: ancho en pixels de la imagen original que debe coger en la imagen reducida // $alto: alto en pixels de la imagen original que debe coger en la imagen reducida // echo "ImageCopyResized($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto)"; // exit; //if (!ImageCopyResampled($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto)) { if (!@ImageCopyResampled($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto)) { @ImageCopyResized($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto); } } else { @ImageCopyResized($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto); } } else { $this->imageCopyResampleBicubic($pequena, $imaxe, 0, 0, $posX, $posY, $dX, $dY, $ancho, $alto); } PFN_crea_directorio_recursivo(dirname($this->destino)); if ($datos[2] == 1 && in_array(1, $this->conf->g('imaxes', 'validas'))) { imagecolortransparent($pequena, imagecolorallocate($imaxe, 0, 0, 0)); $ok = @imageGIF($pequena, $this->destino, $this->conf->g('imaxes', 'calidade')); } elseif ($datos[2] == 3 && in_array(3, $this->conf->g('imaxes', 'validas'))) { imagecolortransparent($pequena, imagecolorallocate($imaxe, 0, 0, 0)); $calidade = round($this->conf->g('imaxes', 'calidade') / 10); $calidade = $calidade < 0 ? 0 : ($calidade > 9 ? 9 : $calidade); $ok = @imagePNG($pequena, $this->destino, $calidade); } else { $ok = @imageJPEG($pequena, $this->destino, $this->conf->g('imaxes', 'calidade')); } if ($ok) { @imageDestroy($pequena); return true; } }
/** * function PFN_crea_dir_recursivo ($dir) * * Crea un directorio recursivamente * * return boolean */ function PFN_crea_directorio_recursivo($dir) { $mode = 0755; if (is_dir($dir) || @mkdir($dir, $mode)) { return true; } if (!PFN_crea_directorio_recursivo(dirname($dir))) { return false; } return @mkdir($dir, $mode); }