Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas con una función

Estas en el tema de Problemas con una función en el foro de PHP en Foros del Web. Hola de nuevo... Tengo una función que me almacena archivos dentro de mi Base de Datos, funciona perfectamente, pero ahora quisiera también almacenar archivos pdf. ...
  #1 (permalink)  
Antiguo 10/06/2014, 03:29
 
Fecha de Ingreso: septiembre-2004
Ubicación: Vigo - Pontevedra
Mensajes: 39
Antigüedad: 19 años, 7 meses
Puntos: 1
Problemas con una función

Hola de nuevo...

Tengo una función que me almacena archivos dentro de mi Base de Datos, funciona perfectamente, pero ahora quisiera también almacenar archivos pdf. Si bien la función las almacena por que esta hecha para cualquier tipo de archivo, por defecto muestra una imagen en pequeño de la imagen almacenada, no se si me explico bien. El caso es que cuando coloco archivos que son imagen, me muestra el típico cuadro de que no hay imagen (la hoja rota) y quisiera que cuando fuese ese el caso me colocara una imagen estandar de un archivo para que el usuario que navegue en la página sepa que es y no que es un error. Coloco el código abajo para ver si alguien me puede dar alguna ayuda al respecto y gracias por la colaboración.

<?php

/**
* Handle file uploads via XMLHttpRequest
*/
class qqUploadedFileXhr {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);

if ($realSize != $this->getSize()){
return false;
}

$target = fopen($path, "w");

fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);

return true;
}
function getName() {
return $_GET['qqfile'];
}
function getSize() {
if (isset($_SERVER["CONTENT_LENGTH"])){
return (int)$_SERVER["CONTENT_LENGTH"];
} else {
throw new Exception('Getting content length is not supported.');
}
}
}

/**
* Handle file uploads via regular form post (uses the $_FILES array)
*/
class qqUploadedFileForm {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
return false;
}
return true;
}
function getName() {
return $_FILES['qqfile']['name'];
}
function getSize() {
return $_FILES['qqfile']['size'];
}
}

class qqFileUploader {
private $allowedExtensions = array();
private $sizeLimit = 10485760;
private $file;

function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){
$allowedExtensions = array_map("strtolower", $allowedExtensions);

$this->allowedExtensions = $allowedExtensions;
$this->sizeLimit = $sizeLimit;

$this->checkServerSettings();

if (isset($_GET['qqfile'])) {
$this->file = new qqUploadedFileXhr();
} elseif (isset($_FILES['qqfile'])) {
$this->file = new qqUploadedFileForm();
} else {
$this->file = false;
}
}

private function checkServerSettings(){
$postSize = $this->toBytes(ini_get('post_max_size'));
$uploadSize = $this->toBytes(ini_get('upload_max_filesize'));

if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
$size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';
//die("{'error':'increase post_max_size and upload_max_filesize to $size'}");
}
}

private function toBytes($str){
$val = trim($str);
$last = strtolower($str[strlen($str)-1]);
switch($last) {
case 'g': $val *= 1024;
case 'm': $val *= 1024;
case 'k': $val *= 1024;
}
return $val;
}

/**
* Returns array('success'=>true) or array('error'=>'error message')
*/
function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
if (!is_writable($uploadDirectory)){
return array('error' => "Server error. Upload directory isn't writable.");
}

if (!$this->file){
return array('error' => 'No files were uploaded.');
}

$size = $this->file->getSize();

if ($size == 0) {
return array('error' => 'File is empty');
}

if ($size > $this->sizeLimit) {
return array('error' => 'File is too large');
}

$pathinfo = pathinfo($this->file->getName());

$filename = $pathinfo['filename'];

$replace="_";
$pattern="/[^a-zA-Z0-9\.]/";
$filename= preg_replace($pattern,$replace,$filename);

//$filename = md5(uniqid());
$ext = $pathinfo['extension'];

if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
$these = implode(', ', $this->allowedExtensions);
return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
}

if(!$replaceOldFile){
/// don't overwrite previous files that were uploaded
while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
$filename .= rand(10, 99);
}
}

if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
return array('success'=>true, 'nombre'=>$filename . '.' . $ext);
} else {
return array('error'=> 'Could not save uploaded file.' .
'The upload was cancelled, or server error encountered');
}

}
}

// list of valid extensions, ex. array("jpeg", "xml", "bmp")
$allowedExtensions = array();
// max file size in bytes
$sizeLimit = 10 * 1024 * 1024;

$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader->handleUpload('../../uploads/');
// to pass data through iframe you will need to encode all html tags
echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);



function esc($ho){
$fp = fopen("myarchivo.txt","a");
fwrite($fp, $ho . PHP_EOL);
fclose($fp);
}
  #2 (permalink)  
Antiguo 10/06/2014, 08:27
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problemas con una función

Lamento decirte que tu problema nada tiene que ver con el código que enviaste.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 10/06/2014, 10:11
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Problemas con una función

entiendo tu consulta, pero no se a que nivel de programación te refieres, por que en la forma que la haces la consulta podría decir que no fuiste quien la programo.
primero que nada lo ideal es subir el archivo por FTPS a una carpeta de tu hosting,
en ese momento crear en tu base de datos una referencia al nombre he ubicación del archivo sin impostar su formato archivo.
en el momento que un usuario despliegue una lista de consulta de estos archivos, hacer que por php dependiendo del formato muestra una imagen por defecto, y en tal caso sea una imagen JPG, PNG, Gif cargue la imagen en ves de la otra que esta por defecto, y si no encuentra el archivo por XYZ motivo cargar una imagen por defecto de archivo o link roto...

la verdad si hiciste el script o lo que programaste de seguro entenderás la solucion ya que es LOGICA

PD: usa la herramienta highlight del foro para resaltar el código por que no entendí nada de lo que posteaste.
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 11/06/2014, 04:22
 
Fecha de Ingreso: septiembre-2004
Ubicación: Vigo - Pontevedra
Mensajes: 39
Antigüedad: 19 años, 7 meses
Puntos: 1
Respuesta: Problemas con una función

Antes de nada quiero agradecer sus comentarios, ayer estaba trabajando en varios proyectos y la verdad coloque un codigo errado, no era este es otro asi que voy a dar como resuelto este tema y abrire otro en el rubro que corresponda ya que es en JS

Gracias nuevamente y espero seguir teniendo su ayuda

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:02.