Foros del Web » Programando para Internet » PHP »

Problema con el comando unlink

Estas en el tema de Problema con el comando unlink en el foro de PHP en Foros del Web. Hola, soy nuevo en el foro....y un novato en programación. Muchas veces he leido este foro y he sacado mucha información de ayuda a vuestros ...
  #1 (permalink)  
Antiguo 22/11/2007, 10:53
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Pregunta Problema con el comando unlink

Hola, soy nuevo en el foro....y un novato en programación.
Muchas veces he leido este foro y he sacado mucha información de ayuda a vuestros mensajes... no me había dado de alta pues un novato como yo poco puede aportar de su experiencia...pero ahora me veo en la necesidad de recurrir a vuestra ayuda.

Tengo el siguiente problema:

unlink (adjuntos/logo.gif) funciona en mi servidor de ******* mientras que unlink ($vinculo) sólo funciona si previamente defino la variable entre comillas:

ej.

$vinculo="adjuntos/logo.gif";
unlink ($vinculo)


El problema está en que yo la variable la obtengo de un formulario tal cual indico:

<?php
$vinculo=$_POST[textfield];
$vinculo=(substr ($vinculo,15));
if ($Submit) {
unlink ($vinculo);
}
?>


No encuentro el por qué en mi servidor de prueba funciona correctamente y en ******* no. Bueno si.... está claro que tiene que ver con las comillas...(no se si diré una chorrada strictlashes o ago así).


El caso es que no tengo ni "p.i" con perdón , de cómo readaptar mi script para que funcione y borre los archivos en *******...he probado de todo pero no doy con ello...y es que siguiendo el método ensayo/error a machacamartillo ya me empieza a consumir la paciencia

¿Alguien podría echarme una mano?

Ante todo muchas gracias.
  #2 (permalink)  
Antiguo 22/11/2007, 11:12
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Problema con el comando unlink

Primero, todas las cadenas de texto tienen que ir entre comillas... fijate que le agregué al índice en $_POST.
Después hay muchas cosas que pueden fallar... vamos a ver que puede ser...

Código PHP:
<?php
$vinculo
=$_POST['textfield'];
$vinculosubstr ($vinculo,15);
if (
$Submit) {
if (!
is_file($vinculo)) die('El archivo ' $vinculo ' no existe');
if (!
is_writeable($vinculo)) die('El archivo ' $vinculo ' no se puede borrar');
unlink ($vinculo);
}
?>
  #3 (permalink)  
Antiguo 22/11/2007, 12:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

Lo primero muchas gracias por contestar....te has ganado un amigo.

Por otro lado....tienes razón en lo de las comillas en $_POST['textfield'];...lo he publicado así porque de tantas pruebas que he hecho no me he dado cuenta y eso estaba mal.

Por cierto... el servidor no me da respuesta de error ninguna, he probado tu script y tampoco... creo que está relacionado con lo que te contaré ahora.

Te endico la siguiente información por si me puedes ayudar:

Este pequeño script va insertado en una página php que básicamente muestra los resultados de una base de datos mysql en un formulario y con esa información al enviarlo se debe borrar el registro y a la vez borrar el archivo referenciado en uno de los campos..... se que es una chapuza...que sería mejor poner un radiobutton como opción para borrar el archivo...pero quiero que se haga todo con el botón enviar para evitar que alguien borre los datos de la tabla mysql sin haber borrado el archivo....

Fuera como fuese...en mi servidor apache 2.2 con php 5.2.1 funciona correctamente, mientras que en proveedor de hosting (no sabía que no se podían nombrar...lo siento) no funciona.

Te envío el archivo completo a ver si encuentras el fallo:


<?php require_once('../Connections/basedatos.php'); ?>
<?php
session_start();
$MM_authorizedUsers = "administrador";
$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;

// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is NOT logged in if that Session variable is blank.
if (!empty($UserName)) {
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
// Parse the strings into arrays.
$arrUsers = Explode(",", $strUsers);
$arrGroups = Explode(",", $strGroups);
if (in_array($UserName, $arrUsers)) {
$isValid = true;
}
// Or, you may restrict access to only certain users based on their username.
if (in_array($UserGroup, $arrGroups)) {
$isValid = true;
}
if (($strUsers == "") && false) {
$isValid = true;
}
}
return $isValid;
}

$MM_restrictGoTo = "/mantenimiento/login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0)
$MM_referrer .= "?" . $QUERY_STRING;
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo);
exit;
}
?>
<?php
$currentPage = $_SERVER["PHP_SELF"];

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

if ((isset($_POST['textfield25'])) && ($_POST['textfield25'] != "")) {
$deleteSQL = sprintf("DELETE FROM feeditems WHERE itemID=%s",
GetSQLValueString($_POST['textfield25'], "int"));

mysql_select_db($database_basedatos, $basedatos);
$Result1 = mysql_query($deleteSQL, $basedatos) or die(mysql_error());
}

$maxRows_Recordset1 = 1;
$pageNum_Recordset1 = 0;
if (isset($_GET['pageNum_Recordset1'])) {
$pageNum_Recordset1 = $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

mysql_select_db($database_basedatos, $basedatos);
$query_Recordset1 = "SELECT * FROM feeditems ORDER BY itemID DESC";
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $basedatos) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($_GET['totalRows_Recordset1'])) {
$totalRows_Recordset1 = $_GET['totalRows_Recordset1'];
} else {
$all_Recordset1 = mysql_query($query_Recordset1);
$totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$queryString_Recordset1 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
$params = explode("&", $_SERVER['QUERY_STRING']);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum_Recordset1") == false &&
stristr($param, "totalRows_Recordset1") == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_Recordset1 = "&" . htmlentities(implode("&", $newParams));
}
}
$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);
?>
<?php
//Esta parte de codigo esta generada por Gustavo para borrar adjuntos
//codigo propio
//codigo propio
$vinculo=$_POST['textfield'];
$vinculo="(substr ($vinculo,40))";
if ($Submit) {
unlink ($vinculo);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<p>&nbsp;</p>
<form name="form1" method="post" action="">
<?php do { ?>
<p>
<input name="textfield25" type="hidden" value="<?php echo $row_Recordset1['itemID']; ?>">
</p>
<p align="center">Fecha de publicaci&oacute;n: </p>
<p align="center"><?php echo $row_Recordset1['ItemAddedTime']; ?></p>
<p align="center">Titular de noticia: </p>
<p align="center">
<textarea name="textfield24" cols="60"><?php echo $row_Recordset1['ItemTitle']; ?></textarea>
</p>
<p align="center">Noticia insertada en: </p>
<p align="center"><?php echo $row_Recordset1['ItemDescription']; ?> </p>
<p align="center">V&iacute;nculo:</p>
<p align="center">
<textarea name="textfield" cols="120"><?php echo $row_Recordset1['ItemLink']; ?></textarea>
</p>
<p align="center">Adjunto: (Tambi&eacute;n se borrar&aacute;...pero si se intenta borrar y este campo est&aacute; vacio, la p&aacute;gina dar&aacute; un error...pese a todo se borrar&aacute; el registro) </p>
<p align="center">
<textarea name="textfield2" cols="120"><?php echo $row_Recordset1['ItemEnclosureUrl']; ?></textarea>
</p>
<p align="center">
<input type="submit" name="Submit" value="Borrar">
</p>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
<table border="0" width="50%" align="center">
<tr>
<td width="23%" align="center">
<?php if ($pageNum_Recordset1 > 0) { // Show if not first page ?>
<a href="<?php printf("%s?pageNum_Recordset1=%d%s", $currentPage, 0, $queryString_Recordset1); ?>"><img src="First.gif" border=0></a>
<?php } // Show if not first page ?>
</td>
<td width="31%" align="center">
<?php if ($pageNum_Recordset1 > 0) { // Show if not first page ?>
<a href="<?php printf("%s?pageNum_Recordset1=%d%s", $currentPage, max(0, $pageNum_Recordset1 - 1), $queryString_Recordset1); ?>"><img src="Previous.gif" border=0></a>
<?php } // Show if not first page ?>
</td>
<td width="23%" align="center">
<?php if ($pageNum_Recordset1 < $totalPages_Recordset1) { // Show if not last page ?>
<a href="<?php printf("%s?pageNum_Recordset1=%d%s", $currentPage, min($totalPages_Recordset1, $pageNum_Recordset1 + 1), $queryString_Recordset1); ?>"><img src="Next.gif" border=0></a>
<?php } // Show if not last page ?>
</td>
<td width="23%" align="center">
<?php if ($pageNum_Recordset1 < $totalPages_Recordset1) { // Show if not last page ?>
<a href="<?php printf("%s?pageNum_Recordset1=%d%s", $currentPage, $totalPages_Recordset1, $queryString_Recordset1); ?>"><img src="Last.gif" border=0></a>
<?php } // Show if not last page ?>
</td>
</tr>
</table>
</form>
<p>&nbsp;
</p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>


Gracias
  #4 (permalink)  
Antiguo 22/11/2007, 12:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

Por cierto...en cuanto a los permisos de la carpeta donde se alojan los archivos...ahora mismo está puesta con control total
  #5 (permalink)  
Antiguo 22/11/2007, 14:59
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

Se me olvidaba...el registro de la base de datos se borra perfectamente....pero el archivo sigue ahí cachondeándose de mi....jeje (hay que tomárselo a broma).

Espero que alguien se anime a devanarse los sesos conmigo.... no se ya ni que intentar.
  #6 (permalink)  
Antiguo 23/11/2007, 10:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

Hola compañeros:

Ayer dejé este mensaje y aun nadie se ha animado a ofrecer su opinión...salvo la primera persona a la que le agradezco su idea (que e incorporado)...

He pensado que ofrecer todo el código de la página es una pasada...soy novato y no calculo...perdón, por lo que he reducido el código a la mínima expresión..ahora soy yo el que introduzco la ruta en el textfield:


<?php
$vinculo=$_POST['textfield'];
$vinculo= substr ($vinculo,14);
if ($Submit) {
if (!is_file($vinculo)) die('El archivo ' . $vinculo . ' no existe');
if (!is_writeable($vinculo)) die('El archivo ' . $vinculo . ' no se puede borrar');
unlink ($vinculo);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<form name="form1" method="post" action="">
<p>
<input name="textfield" type="text" size="70">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>
</body>
</html>


A pesar de todo...el servidor que lo aloja sigue sin dar mensaje de error ninguno...ni siquiera los que acompañan a los if......


He probado también con get...obtengo algo así mantenimiento/borrar_adjunto_beta1.php?textfield=mantenimiento%2 Fadjuntos%2Flogo.gif&Submit=Enviar
La ruta debería ser mantenimiento/adjuntos/logo.gif....no se si luego a unlink ($vinculo) llega unlink (mantenimiento/borrar_adjunto_beta1.php?textfield=mantenimiento%2 Fadjuntos%2Flogo.gif) o realmente unlink (mantenimiento/adjuntos/logo.gif)...pero no obtengo mensaje alguno.


En mi servicio de hosting me digeron que activase las global register...no entiendo la relación...a pesar de todo lo hice...y sigo igual...en mi servidor funciona...en el hosting no.

Hay alguna directiva que deba activar en php...????---no se si digo una estupidez...pero activando/desactivando strictslashes o algo así cambiaría algo???

Yo utilizo php5...el servidor es php4...¿tiene algo que ver en un script tan sencillo?


Por favor...espero que alguien se anime a echar una mano.... ya no se ni que intentar...ya no tengo ideas que probar.
  #7 (permalink)  
Antiguo 23/11/2007, 11:21
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

Sigo añadiendo ladrillo....con get en mi servidor refleja exactamente lo mismo que el de hosting....pero lo borra sin problemas.....¿que ..... está pasando?....nadie puede indicarme qué directiva esta tocándome los puntos suspensivos?....(con perdón)
  #8 (permalink)  
Antiguo 23/11/2007, 15:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
Re: Problema con el comando unlink

El problema no era el comando unlink.......!!!!!! ni global_register ni ....(iba a decir una burrada)

Problema resuelto...a base de ensayo y error he llegado a la conclusión siguiente:

if ($Submit) no funciona correctamente en depende que configuración de php4...mientras que en php5 no da problemas.

if (isset ($_POST['Submit'])) funciona tanto en php4 como 5


He estado en jaque tres días por esta chorrada....espero que alguien pueda servirle de ayuda....debéis tomar esta conclusión sólo como ayuda...y que puede no ser totalmente correcta...no soy programador profesional
  #9 (permalink)  
Antiguo 24/11/2007, 00:19
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Problema con el comando unlink

Eso es justamente culpa de register_globals =)
  #10 (permalink)  
Antiguo 24/11/2007, 03:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 17 años
Puntos: 0
De acuerdo Re: Problema con el comando unlink

Gracias Seppo por la aclaración.

Ayer tenía un cabreo de..........., lo que es no tener ni idea (ya os decía que estaba empezando)...ni se cómo he llegado a sacarlo...bueno si a base de machacamartillo.
Bueno el caso es que logré corregirlo sin tener que tocar register_globals... mejor así, ¿no?...he leido (a lo mejor lo he mal interpretado) que activarlas puede dar problemas de seguridad en función del código que generes..por ejemplo con usuarios que podrían tener acceso a privilegios no concedidos (lo leí en la web oficial de php)...por lo tanto mejor.
El caso es que ya se una cosa más...no tiene nada que ver con php4/php5 si no con la configuración de php.
Por cierto...lo malo de saber esto es que ahora me pica la curiosidad de cómo cambiar la configuración en mi hosting vía .htaccess ¿Es posible???...voy a abrir un tema nuevo ...(aquí ya no tiene sentido)...espero que Seppo te animes a echarme un cable con el tema...abusando de tu generosidad...gracias
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 13:10.