Actualizar función "eregi"

Rhazz Seguir

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
15 May 2012
Mensajes
388
Hola amigos, hoy me he encontrado con que un script que poseo no funciona correctamente debido a que la función "eregi" está en desuso y dicho script la posee.
Yo no tengo ni idea de PHP y por lo tanto no entiendo cómo actualizarla, he leído sobre cómo reemplazar esa función pero no termino de comprender. Espero puedan ayudarme.
El código donde se encuentra la función "eregi" es el siguiente:
PHP:
if(eregi($valid, $url))
{
$fp = fopen($file, 'a');
fwrite($fp, "{$url}\r\n");
fclose($fp);

$id		= count(file($file));
$dir		= dirname($_SERVER['PHP_SELF']);
$filename	= explode('/', $_SERVER['PHP_SELF']);
$filename	= $filename[(count($filename) - 1)];

$shorturl = ($use_rewrite == 1) ? "http://{$_SERVER['HTTP_HOST']}{$dir}/{$id}" : "http://{$_SERVER['HTTP_HOST']}{$dir}/{$filename}?id={$id}";

$output = "{$l_yoururl} <a href='{$shorturl}'>{$shorturl}</a>";
}
else
{
$output = $l_invalidurl;
}
Espero puedan ayudarme.
 

nestornoe

Épsilon
Programador
Desde
11 Mar 2013
Mensajes
884
Hola

lo puedes cambiar por preg_match pero posiblemente te de un error depéndiendo de las variables $valid, $url ya que no acepta delimitadores alfanuméricos ahi.

o sea en la url tienes que agregar por cada / una \

Pruaba

Saludos
 

gersun

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
20 Sep 2009
Mensajes
419
Hola,

Reemplaza la primera línea:

PHP:
if(eregi($valid, $url))

Por esta:

PHP:
if(preg_match('<'.quotemeta($valid).'>i', $url))

Y prueba.

Saludos.
 

Rhazz

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
15 May 2012
Mensajes
388
Hola

lo puedes cambiar por preg_match pero posiblemente te de un error depéndiendo de las variables $valid, $url ya que no acepta delimitadores alfanuméricos ahi.

o sea en la url tienes que agregar por cada / una \

Pruaba

Saludos
No entendí :ambivalence: no pude hacer lo que me indicas.

Hola,

Reemplaza la primera línea:

PHP:
if(eregi($valid, $url))

Por esta:

PHP:
if(preg_match('<'.quotemeta($valid).'>i', $url))

Y prueba.

Saludos.
Me da como resultado siempre "$l_invalidurl", es decir, me sale el mensaje de que el URL que inserté para acortar no es válido (el script que quiero arreglar es un acortador de URLs).

Esta función quedó obsoleta desde php 5.3
Editado: no dije nada XD

PHP: eregi - Manual

Funciones deprecated en PHP 5.3.x (ereg y eregi) | 3VASES BLOG

tienes
PHP:
if(eregi($valid, $url))

pon:
PHP:
if(stripos($url,$valid) !== false)
Me pasa lo mismo que con el código de [MENTION=737]gersun[/MENTION].


Les dejo el index, por si alguien quiere ayudar, pero sino, lo entenderé.

PHP:
<?php
ob_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Short URL script</title>
<style type="text/css">
<!--
	body {
		font-family:Geneva, Arial, Helvetica, sans-serif;
		font-size:0.9em;
	}
	a, a:hover, a:visited {
		color:#d20000;
	}
	form {
		padding:15px;
		margin:0;
		border:1px solid #dddddd;
		width:50%;
	}
	form label {
		font-weight:bold;
		padding-right:10px;
	}
	form input {
		border:1px solid #dddddd;
		border-right:2px solid #cccccc;
		border-bottom:2px solid #cccccc;
		padding:4px;
	}
	form input.button {
		background-color:#D20000;
		font-weight:bold;
		font-size:0.8em;
		color:#ffffff;
		border:1px solid #FF0505;
		border-right-color:#9E0000;
		border-bottom-color:#9E0000;
		font-family:Verdana, Arial, Helvetica, sans-serif;
	}
//-->
</style>
</head>
<body>

<?php
/*
*
*	script by spyka Webmaster - www.spyka.net
*	version 1.0.2
*	copyright (c) 2008 spyka Web Group
*	license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0
*	support: http://www.spyka.net/forums
*
*/

/*
location of file to store URLS
*/
$file = 'urls.txt';

/* 
use mod_rewrite: 0 - no or 1 - yes
*/
$use_rewrite = 1;

/*
language/style/output variables
*/

$l_url			= 'URL';
$l_nourl		= '<strong>No URL supplied</strong>';
$l_yoururl		= '<strong>Your short url:</strong>';
$l_invalidurl	= '<strong>Invalid URL supplied.</strong>';
$l_createurl	= 'Make shorter!';

//////////////////// NO NEED TO EDIT BELOW ////////////////////

if(!is_writable($file) || !is_readable($file))
{
	die('Cannot write or read from file. Please CHMOD the url file (urls.txt) by default to 777 and make sure it is uploaded.');
}

$action = trim($_GET['id']);
$action = (empty($action) || $action == '') ? 'create' : 'redirect';

$valid = "^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$";

$output = '';

if($action == 'create')
{
	if(isset($_POST['create']))
	{
		$url = trim($_POST['url']);
		
		if($url == '')
		{
			$output = $l_nourl;
		}
		else
		{
			if(eregi($valid, $url))
			{
				$fp = fopen($file, 'a');
				fwrite($fp, "{$url}\r\n");
				fclose($fp);
				
				$id			= count(file($file));
				$dir		= dirname($_SERVER['PHP_SELF']);
				$filename	= explode('/', $_SERVER['PHP_SELF']);
				$filename   = $filename[(count($filename) - 1)];
				
				$shorturl = ($use_rewrite == 1) ? "http://{$_SERVER['HTTP_HOST']}{$dir}/{$id}" : "http://{$_SERVER['HTTP_HOST']}{$dir}/{$filename}?id={$id}";
				
				$output = "{$l_yoururl} <a href='{$shorturl}'>{$shorturl}</a>";
			}
			else
			{
				$output = $l_invalidurl;
			}
		}
	}
}

if($action == 'redirect')
{
	$urls = file($file);
	$id   = trim($_GET['id']) - 1;
	if(isset($urls[$id]))
	{
		header("Location: {$urls[$id]}");
		exit;
	}
	else
	{
		die('Script error');
	}
}

//////////////////// FEEL FREE TO EDIT BELOW ////////////////////
?>


<!-- start html output -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<p class="response"><?=$output?></p>
<p>
	<label for="s-url">URL:</label>
	<input id="s-url" type="text" name="url" />
</p>
<p>
	<input type="submit" class="button" name="create" value="<?=$l_createurl?>" />
</p>
</form>
<p>Short URL script (1.0.2) by <a href="http://www.spyka.net">spyka Webmaster</a></p>
<!-- end html output -->

</body>
</html>
<?php
ob_end_flush();
?>
 

gersun

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
20 Sep 2009
Mensajes
419
Hola,

Sin información no podemos ayudarte. Ahora veo qué variables lee esa línea; $valid es una expresión regular (RegEx), muy poco optimizada por cierto. El uso de stripos() no corresponde, no funciona con RegEx.

Puedes reemplazar:

PHP:
if(eregi($valid, $url))

Por esto otro:

PHP:
if(preg_match('<^(https?|ftp)://([a-z0-9\-]+\.)+[a-z]+(:[0-9]+)?/[a-z0-9_\-\?\&\=/]*>i',$url.'/'))

Usa una RegEx más compleja si quieres.

Si tienes PHP 5.2 o sup, lo ideal sería:

PHP:
if(filter_var($url, FILTER_VALIDATE_URL))

Saludos
 
Última edición:

Rhazz

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
15 May 2012
Mensajes
388
Hola,

Sin información no podemos ayudarte. Ahora veo qué variables lee esa línea; $valid es una expresión regular (RegEx), muy poco optimizada por cierto. El uso de stripos() no corresponde, no funciona con RegEx.

Puedes reemplazar:

PHP:
if(eregi($valid, $url))

Por esto otro:

PHP:
if(preg_match('<^(https?|ftp)://([a-z0-9\-]+\.)+[a-z]+(:[0-9]+)?/[a-z0-9_\-\?\&\=/]*>i',$url.'/'))

Usa una RegEx más compleja si quieres.

Si tienes PHP 5.2 o sup, lo ideal sería:

PHP:
if(filter_var($url, FILTER_VALIDATE_EMAIL))

Saludos

Pues si hubiese sido lo correcto poner el código completo al inicio, pero no me dí cuenta :p
Gracias por la ayuda! Ahora sí funciona! Aunque el URL queda nosolohoteles.com (dos barras) y he intentado cambiarlo pero no encuentro donde xD
Igual así está bien, funciona, que es lo primorcial.
Muchas gracias por su ayuda! :encouragement:
 
Arriba