- Posts: 169
COMMUNITY FORUM
Cargar imágenes de K2 desde otro servidor
- Alfonso F. Moreno
- Topic Author
- Offline
- Elite Member
Less
More
12 years 11 months ago #60452
by Alfonso F. Moreno
Cargar imágenes de K2 desde otro servidor was created by Alfonso F. Moreno
Necesito una ayuda de alguien que sepa php bien...
A ver, la cosa es que he decidido complicarme la vida y cargar las imágenes de K2 desde otro servidor que no sea el mismo en el que tengo joomla. Para ello cree un subdominio del mio que es estaticos.madridout.es redireccionado al nuevo sevidor.
Entonces averigué que las imágenes de K2 no están en base de datos si no que se cargan desde /components/com_K2/models/item.php
En este archivo hay unas cadenas que lo que hacen es cargar la imagen en función de la id del artículo que transforma con md5. Ej:
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_L.jpg')){
$item->imageLarge = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_L.jpg';
if($params->get('imageTimestamp')){
$item->imageLarge.=$timestamp;
}
}
Hasta aquí bien, porque lo que he hecho es que como sigo subiendo imágenes a través de mi joomla+K2 hay algunas imágenes (las antiguas) que aún no están subidas al otro y por ello intento que si encuentra la imagen en el servidor actual de joomla la cargue (pretendo borrar las antiguas para que no las cargue) y si no la encuentra que la cargue de estaticos.madridout.es.
Para esto le digo que:
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_M.jpg')){
$item->imageMedium = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
if($params->get('imageTimestamp')){
$item->imageMedium.=$timestamp;
}
}
else
{
$file = 'estaticos.madridout.es/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$item->imageMedium = 'estaticos.madridout.es/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
} else {}}
¿Por qué lo de comprobar si la imagen existe con get_headers? Porque si no me carga la imagen incluso en aquellos que no deberían tener imagen.
¿Qué ocurre? que no me carga ni las unas ni las otras, salvo que lo ponga tras el else final y entonces me las cargas todas. Hay algo que no está haciendo bien y no sé qué hacer... ¿A alguien se le ocurre una solución aunque sea cambiando la manera en que comprueba si la imagen existe en el otro servidor?
¡¡¡Mil gracias!!!!
A ver, la cosa es que he decidido complicarme la vida y cargar las imágenes de K2 desde otro servidor que no sea el mismo en el que tengo joomla. Para ello cree un subdominio del mio que es estaticos.madridout.es redireccionado al nuevo sevidor.
Entonces averigué que las imágenes de K2 no están en base de datos si no que se cargan desde /components/com_K2/models/item.php
En este archivo hay unas cadenas que lo que hacen es cargar la imagen en función de la id del artículo que transforma con md5. Ej:
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_L.jpg')){
$item->imageLarge = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_L.jpg';
if($params->get('imageTimestamp')){
$item->imageLarge.=$timestamp;
}
}
Hasta aquí bien, porque lo que he hecho es que como sigo subiendo imágenes a través de mi joomla+K2 hay algunas imágenes (las antiguas) que aún no están subidas al otro y por ello intento que si encuentra la imagen en el servidor actual de joomla la cargue (pretendo borrar las antiguas para que no las cargue) y si no la encuentra que la cargue de estaticos.madridout.es.
Para esto le digo que:
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_M.jpg')){
$item->imageMedium = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
if($params->get('imageTimestamp')){
$item->imageMedium.=$timestamp;
}
}
else
{
$file = 'estaticos.madridout.es/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$item->imageMedium = 'estaticos.madridout.es/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
} else {}}
¿Por qué lo de comprobar si la imagen existe con get_headers? Porque si no me carga la imagen incluso en aquellos que no deberían tener imagen.
¿Qué ocurre? que no me carga ni las unas ni las otras, salvo que lo ponga tras el else final y entonces me las cargas todas. Hay algo que no está haciendo bien y no sé qué hacer... ¿A alguien se le ocurre una solución aunque sea cambiando la manera en que comprueba si la imagen existe en el otro servidor?
¡¡¡Mil gracias!!!!
Please Log in or Create an account to join the conversation.
- Alfonso F. Moreno
- Topic Author
- Offline
- Elite Member
Less
More
- Posts: 169
12 years 11 months ago #60453
by Alfonso F. Moreno
Replied by Alfonso F. Moreno on topic Re: Cargar imágenes de K2 desde otro servidor
Pues nada, al final lo he solucionado. Había que poner:
else {
$url = 'estaticos.madridout.es/cache/'.md5("Image".$item->id).'_M.jpg';
$header_response = get_headers($url, 1);
if ( strpos( $header_response[0], '404' ) !== false )
{}
else
{$item->imageMedium = 'estaticos.madridout.es/cache/'.md5("Image".$item->id).'_M.jpg';
}}
Y ya está, con eso lo carga desde el otro servidor siempre cuando no esté la imagen en el original. También hay que modificar algún módulo que tira de las imágenes de K2.
Espero que a alguien le sirva mi quebradero de cabeza
else {
$url = 'estaticos.madridout.es/cache/'.md5("Image".$item->id).'_M.jpg';
$header_response = get_headers($url, 1);
if ( strpos( $header_response[0], '404' ) !== false )
{}
else
{$item->imageMedium = 'estaticos.madridout.es/cache/'.md5("Image".$item->id).'_M.jpg';
}}
Y ya está, con eso lo carga desde el otro servidor siempre cuando no esté la imagen en el original. También hay que modificar algún módulo que tira de las imágenes de K2.
Espero que a alguien le sirva mi quebradero de cabeza
Please Log in or Create an account to join the conversation.