Foros del Web » Programando para Internet » PHP »

problema con funcion copy

Estas en el tema de problema con funcion copy en el foro de PHP en Foros del Web. Buenas amigos del foro!! Tengo una traba con un codigo php, al querer copiar un archivo, con el codigo de mas abajo no me realiza ...
  #1 (permalink)  
Antiguo 31/08/2011, 19:18
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
problema con funcion copy

Buenas amigos del foro!!

Tengo una traba con un codigo php,
al querer copiar un archivo,
con el codigo de mas abajo no me realiza nada.

Este codigo es para copiar canciones al azar de varias carpetas a una
todo funciona bien hasta que tengo que copiar el archivo,
ahi es donde ya no hace nada no me marca error y no imprime nada en pantalla

Tengo dos "echo" uno imprime la direccion donde esta el archivo seleccionado
y el otro imprime la direccion donde sera guardado, pero no los imprime.

Si le pongo un escape a la funcion copy ( //copy ($rutotal,$hasta); ) ahi si me
funciona imprime las direcciones de todos los archivos que deveria copiar!!
no se que es lo que esta mal.


Código PHP:
Ver original
  1. <?php
  2. include "conexion.php";
  3. $genero = array('rock','metal','ska','punk');
  4.  
  5.  
  6. for($i=0;$i<4;$i++)
  7.  {
  8.    $cambio="SELECT `nombre` , `diario` FROM `bandas` WHERE `genero` LIKE '".$genero[$i]."' ORDER BY `bandas`.`diario` DESC LIMIT 0 , 15";
  9.    $result=mysql_query($cambio);
  10.    $a=1;
  11.  
  12.  
  13. while($array=mysql_fetch_array($result))
  14. {
  15. $rutaa ='../';
  16. $ruta ='banda/'.$array['nombre'].'/mp3';
  17. $rutab = $rutaa.$ruta;
  18. $cancion = scandir ($rutab,1);
  19. $total = "/home/xxxx/public_html/php/";
  20. $rutotal=$total.$ruta.'/'.$cancion[rand(0, $cantidad)];
  21. $hasta="/home/xxxx/public_html/php/generos/".$genero[$i]."/mp3/cancion".$a.".mp3";
  22. $comp="/home/xxxx/public_html/php/banda/".$array['nombre']."/mp3/..";
  23.  
  24.      if ($rutotal!=$comp)
  25.         {
  26.             echo $rutotal."</br>";
  27.             echo $hasta."</br>";                                                 
  28.             copy ($rutotal,$hasta);
  29.             $a=$a+1;
  30.         }
  31.  
  32. }
  33.  
  34. }
  35. ?>


Desde ahora gracias por la atencion al tema y a sus sugerencias!!
  #2 (permalink)  
Antiguo 31/08/2011, 20:20
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: problema con funcion copy

En ese código hay un lio de variables impresionante. He tenido que leerlo varias veces para poder pillarlo. Empiezo (lo voy escribiendo a medida que lo voy leyendo):

- El uso del for no lo comprendo, porqué no usar un foreach, que están para recorrer arrays.
- El uso del like en la consulta de la base de datos ¿porque? ¿cómo tienes escrito los géneros en la bd?
- La variable $rutaa te sobra, ya que en $rutab lo puedes sustitur por: $rutab = "../$ruta";
- La variable $rutab también te sobra, ya que se puede hacer: $cancion = scandir("../$ruta", 1);
- La función scandir (http://es.php.net/manual/es/function.scandir.php) también devuelve los directorios "." y ".." (aunque no creo que te afecte).
- La variable $cantidad, ¿Cuánto vale? ¿Qué contiene?
- En la variable $compo al final del path añades dos puntos, ¿porqué? eso haría que subieras un directorio (si no me equivoco).
- En general creo que $a se podría sustitur por "$key" si se sustituye por un foreach.

Espero que te sirva de ayuda.
  #3 (permalink)  
Antiguo 31/08/2011, 21:11
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: problema con funcion copy

hola hasdpk gracias por la atencion...

Primero te explico la funcion del codigo!!

Es un sitio dedicado a la music de los generos rock, metal, punk y ska.
Tengo una pagina donde pongo musica dependiendo el genero,
en otra pagina tengo a cada grupo que tengo publicando,
este codigo que expongo es para seleccionar una cancion al azar
de las 15 bandas (una cancion por cada banda) mas visitadas de cada genero (de mayor a menor),
despues de seleccionarlas las copie a la carpeta de su respectivo genero,

ahor te explico igual tus dudas!

-el for lo ocupo por ke en mi array tengo los cuatro generos y ocupo una busqueda en
mi base de datos por cada genero

-el like en la consulta es para seleccionar las bandas de el genero que indique el array

-las variables $rutaa y $rutab ya vi que si las puedo quitar

-la variable cantidad esa si no tengo idea de por que la tengo

Pero no creo que sea eso, ya que cuando pongo
como comentario la linea donde esta el copy
funciona bien me indica los archivos mp3 que fueron seleccionados
y tambien la direccion donde se van a copiar.

¿la funcion copy funciona relativamente a la ubicacion de donde se esta ejecutando?
  #4 (permalink)  
Antiguo 31/08/2011, 21:35
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: problema con funcion copy

Por simple curiosidad ¿Tu web está online, o es de uso privado (Local)?

- Opino lo mismo del for, se puede sustituir por foreach($genero as $key => $value) { ... }, consiguiendo quitarte del media la variable $a y $i sustituyendola por $key, eso sí, elminando la línea 10 y 29.
- La consulta opino que quedaría mejor con "... WHERE genero = $value ..." (si usas el foreach).
- Los dos puntos del final de $comp me sigue intrigando.
- En relación a copy, que yo sepa y según el manual, no tiene ninguna relación al directorio en donde está.
  #5 (permalink)  
Antiguo 01/09/2011, 10:29
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: problema con funcion copy

miren aki esta el link

http://lawebdelpol.uphero.com/php/auto/auto.php

como esta ahorita esta eliminado el if de la linea 24

y el copy de la linea 28

si miran en el resultado en la quinta linea
/home/a4773574/public_html/php/banda/THE DOORS/mp3/..
es por eso que pongo los 2 puntos en la variable $comp para que si existe
una carpeta vacia como esa no trate de copiarlo por que ahi si me indica un error!!

entonses yo pienzo que es algo con el copy el problema por que al ponerlo la pagina aparece en blanco!!
  #6 (permalink)  
Antiguo 01/09/2011, 10:51
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: problema con funcion copy

¡Al final entendí los dos puntos! :D

bueno, en un principio no encuentro ningún fallo. ¿Podrías poner cómo tienes el código ahora?
  #7 (permalink)  
Antiguo 01/09/2011, 18:33
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: problema con funcion copy

Asi es como esta ahora el codigo y sigue funcionando si pongo el " if " pero
no imprime la linea esa de la carpeta vacia
/home/a4773574/public_html/php/banda/THE DOORS/mp3/..

voy a buscar el codigo que copie para ver de que sirve la variable $cantidad
y te comento!!

Código PHP:
Ver original
  1. <?php
  2.  
  3.       include "conexion.php";
  4.  
  5.       $genero = array('rock','metal','ska','punk');
  6.  
  7.        
  8.  
  9.        
  10.  
  11.       for($i=0;$i<4;$i++)
  12.  
  13.        {
  14.  
  15.          $cambio="SELECT `nombre` , `diario` FROM `bandas` WHERE `genero` LIKE '".$genero[$i]."' ORDER BY `bandas`.`diario` DESC LIMIT 0 , 15";
  16.  
  17.          $result=mysql_query($cambio);
  18.  
  19.          $a=1;
  20.  
  21.        
  22.  
  23.        
  24.  
  25.       while($array=mysql_fetch_array($result))
  26.  
  27.       {
  28.  
  29.       $rutaa ='../';
  30.  
  31.       $ruta ='banda/'.$array['nombre'].'/mp3';
  32.  
  33.       $rutab = $rutaa.$ruta;
  34.  
  35.       $cancion = scandir ($rutab,1);
  36.  
  37.       $total = "/home/xxxx/public_html/php/";
  38.  
  39.       $rutotal=$total.$ruta.'/'.$cancion[rand(0, $cantidad)];
  40.  
  41.       $hasta="/home/xxxx/public_html/php/generos/".$genero[$i]."/mp3/cancion".$a.".mp3";
  42.  
  43.       $comp="/home/xxxx/public_html/php/banda/".$array['nombre']."/mp3/..";
  44.  
  45.        
  46.  
  47.   //         if ($rutotal!=$comp)
  48.  
  49.    //           {
  50.  
  51.                   echo $rutotal."</br>";
  52.  
  53.                   echo $hasta."</br>";                                                
  54.  
  55.      //             copy ($rutotal,$hasta);
  56.  
  57.                   $a=$a+1;
  58.  
  59.        //       }
  60.  
  61.        
  62.  
  63.       }
  64.  
  65.        
  66.  
  67.       }
  68.  
  69.       ?>
  #8 (permalink)  
Antiguo 01/09/2011, 20:55
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: problema con funcion copy

Bueno, después de crearme una base de datos con los campos "nombre", "diario" y "genero", de crear el archivo "conexion.php", desmenuzar el archivo del copy y crear todas las subcarpetas que tienes... ¡ya he consegido que funcione!

Le he aplicado los puntos que te he ido mencionando anteriormente como el foreach, $key y $vaue y he reducido el número de líneas y el copy() funciona perfectamente.

Código PHP:
Ver original
  1. <?php
  2.  
  3.     include_once('conexion.php');
  4.  
  5.     $genero = array('rock', 'metal', 'ska', 'punk');
  6.  
  7.     foreach($genero as $key => $value) {
  8.    
  9.         $sql = mysql_query("SELECT nombre FROM bandas WHERE genero = '$value' ORDER BY diario DESC LIMIT 0, 15");
  10.        
  11.         while($a = mysql_fetch_array($sql)) {
  12.        
  13.             $path_origen  = "./php/banda/{$a['nombre']}/mp3/";
  14.            
  15.             $path_destino = "./php/generos/$value/mp3/cancion" . ($key + 1) . ".mp3";
  16.            
  17.             $canciones = array_slice(scandir($path_origen, 1), 0, -2);
  18.            
  19.             $i = array_rand($canciones);
  20.            
  21.             copy($path_origen . $canciones[$i], $path_destino);
  22.            
  23.         }
  24.        
  25.     }
  26.    
  27. ?>

¡ME SIENTO REALIZADO! :P
  #9 (permalink)  
Antiguo 02/09/2011, 10:28
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: problema con funcion copy

ok gracias por ponerle tanta atencion a el tema!! t dejo algo de karma!!

mira ya me estaba enfadando, hice lo siguiente.

cree otro documento llamado autorock.php
y le puse este codigo!!

Código PHP:
Ver original
  1. <?php  
  2. include "../con.php";
  3. $genero = 'rock';              
  4.                              
  5. $cambio="SELECT `nombre` , `diario` FROM `bandas` WHERE `genero` LIKE '".$genero."' ORDER BY `bandas`.`diario` DESC LIMIT 0 , 15";
  6. $result=mysql_query($cambio);
  7. $a=1;
  8.     while($array=mysql_fetch_array($result))
  9.          {
  10.                $ruta ='../banda/'.$array['nombre'].'/mp3/';
  11.                  $fotos = scandir ($ruta, 1);
  12.                $cantidad = count($fotos) - 3;
  13.                $total=$ruta.'/'.$fotos[rand(0, $cantidad)];
  14.       $hasta="/home/a4773574/public_html/php/generos/".$genero."/mp3/cancion".$a.".mp3";
  15.   $comparacion="../banda/".$array['nombre']."/mp3//..";
  16.         if($total!=$comparacion)
  17.             {
  18.              copy ($total,$hasta);
  19.                                      
  20.             $a=$a+1;
  21.               echo "</br>".$total."</br>";
  22.                 echo $hasta."</br>";
  23.             }          
  24.       }
  25. ?>

Lo probe varias veces y funciono perfectamente cada ves que lo ejecutava me mandaba
diferentes canciones y las copiaba bien!!

hice otro autoska.php

solo cambien la variable $genero y funciono igual!!

Lo mismo para el autopunk.php

Pero cuando cree uno autometal.php
con el mismo codigo solo cambiando la variable $genero me funciono una ves
despues me sucedia lo mismo no me imprimia en pantalla nada
yo ya me estoy rindiendo tal ves sea el servidor!!
ya que funciono la primera y que todas las demas si funcionaron con el mismo codigo!!

Mi hosting es gratuito solo que me empeño en esto por que estoy haciendo algo como una maqueta de un proyecto que quiero realizar.

Te agradesco tu atencion!!

igual voy aprobar tu codigo para ver si con ese si me funciona.

Gracias!! :)
  #10 (permalink)  
Antiguo 02/09/2011, 17:13
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: problema con funcion copy

En teoría con copiar y pegar mi código a tu página debería de funcionarte, a mi me lo hizo en local perfectamente.

No creo que sea problema del hosting, aunque si lo opinas así podrías montarte uno en tu máquina con XAMPP [url]http://www.apachefriends.org/es/xampp.html[/url], yo personalmente lo tengo así.

Ahora al tema, ¿Cuántos registros tienes en la bd de metal? ¿Cuántas bandas? y ¿Cuántos archivos de mp3?

Otra cosa por simple curiosidad, ¿de que va tu maqueta?

Etiquetas: copy, funcion, html, sql
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 02:31.