- 08/05/2020
- 12:44 pm
- marcofbb
Dejo un código para firmar URL para google storage con el lenguaje de programación PHP
<?php
/*
DOCS:
https://cloud.google.com/storage/docs/access-control/signed-urls
https://cloud.google.com/storage/docs/access-control/signing-urls-manually
Translate to PHP of code Python: https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/storage/signed_urls/generate_signed_urls.py
*/
function generate_signed_url_google($service_account_file, $bucket_name, $object_name, $subresource = null, $expiration=604800, $http_method='GET', $query_parameters = array(), $headers = array()){
date_default_timezone_set('UTC');
if($expiration > 604800){
echo 'Expiration Time can\'t be longer than 604800 seconds (7 days).';
return;
}
$google_credentials = json_decode(file_get_contents($service_account_file), true);
if(empty($google_credentials)){
echo 'Error credentials.';
return;
}
$escaped_object_name = implode('/', array_map('rawurlencode', explode('/', $object_name)));
$canonical_uri = '/'.$escaped_object_name;
$datetime_now = time();
$request_timestamp = date('Ymd\THis\Z', $datetime_now);
$datestamp = date('Ymd', $datetime_now);
$client_email = $google_credentials['client_email'];
$credential_scope = $datestamp.'/auto/storage/goog4_request';
$credential = $client_email.'/'.$credential_scope;
$host = $bucket_name.'.storage.googleapis.com';
$headers['host'] = $bucket_name.'.storage.googleapis.com';
$canonical_headers = '';
$signed_headers = '';
$ordered_headers = $headers;
ksort($ordered_headers, SORT_STRING);
foreach($ordered_headers as $key => $value){
$key = strtolower($key);
$value = ($value);
$canonical_headers .= $key.':'.$value."\n";
$signed_headers .= $key.';';
}
$signed_headers = substr($signed_headers, 0, -1);
$query_parameters['X-Goog-Algorithm'] = 'GOOG4-RSA-SHA256';
$query_parameters['X-Goog-Credential'] = $credential;
$query_parameters['X-Goog-Date'] = $request_timestamp;
$query_parameters['X-Goog-Expires'] = $expiration;
$query_parameters['X-Goog-SignedHeaders'] = $signed_headers;
if(!empty($subresource)){
$query_parameters[$subresource] = '';
}
$canonical_query_string = '';
$ordered_query_parameters = $query_parameters;
ksort($ordered_query_parameters, SORT_STRING);
foreach($ordered_query_parameters as $key => $value){
$key = rawurlencode($key);
$value = rawurlencode($value);
$canonical_query_string .= $key.'='.$value.'&';
}
$canonical_query_string = substr($canonical_query_string, 0, -1);
$canonical_request = implode("\n",array($http_method, $canonical_uri, $canonical_query_string, $canonical_headers, $signed_headers, 'UNSIGNED-PAYLOAD'));
$canonical_request_hash = hash('sha256', utf8_encode($canonical_request));
$string_to_sign = implode("\n",array('GOOG4-RSA-SHA256', $request_timestamp, $credential_scope, $canonical_request_hash));
$pkeyid = $google_credentials['private_key'];
if(!openssl_sign($string_to_sign,$signature,$pkeyid,'sha256')) {
$signature = 'none';
} else {
$signature = bin2hex($signature);
}
$scheme_and_host = 'https://'.$host;
$signed_url = $scheme_and_host.$canonical_uri.'?'.$canonical_query_string.'&x-goog-signature='.$signature;
return $signed_url;
} |
<?php
/*
DOCS:
https://cloud.google.com/storage/docs/access-control/signed-urls
https://cloud.google.com/storage/docs/access-control/signing-urls-manually
Translate to PHP of code Python: https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/storage/signed_urls/generate_signed_urls.py
*/
function generate_signed_url_google($service_account_file, $bucket_name, $object_name, $subresource = null, $expiration=604800, $http_method='GET', $query_parameters = array(), $headers = array()){
date_default_timezone_set('UTC');
if($expiration > 604800){
echo 'Expiration Time can\'t be longer than 604800 seconds (7 days).';
return;
}
$google_credentials = json_decode(file_get_contents($service_account_file), true);
if(empty($google_credentials)){
echo 'Error credentials.';
return;
}
$escaped_object_name = implode('/', array_map('rawurlencode', explode('/', $object_name)));
$canonical_uri = '/'.$escaped_object_name;
$datetime_now = time();
$request_timestamp = date('Ymd\THis\Z', $datetime_now);
$datestamp = date('Ymd', $datetime_now);
$client_email = $google_credentials['client_email'];
$credential_scope = $datestamp.'/auto/storage/goog4_request';
$credential = $client_email.'/'.$credential_scope;
$host = $bucket_name.'.storage.googleapis.com';
$headers['host'] = $bucket_name.'.storage.googleapis.com';
$canonical_headers = '';
$signed_headers = '';
$ordered_headers = $headers;
ksort($ordered_headers, SORT_STRING);
foreach($ordered_headers as $key => $value){
$key = strtolower($key);
$value = ($value);
$canonical_headers .= $key.':'.$value."\n";
$signed_headers .= $key.';';
}
$signed_headers = substr($signed_headers, 0, -1);
$query_parameters['X-Goog-Algorithm'] = 'GOOG4-RSA-SHA256';
$query_parameters['X-Goog-Credential'] = $credential;
$query_parameters['X-Goog-Date'] = $request_timestamp;
$query_parameters['X-Goog-Expires'] = $expiration;
$query_parameters['X-Goog-SignedHeaders'] = $signed_headers;
if(!empty($subresource)){
$query_parameters[$subresource] = '';
}
$canonical_query_string = '';
$ordered_query_parameters = $query_parameters;
ksort($ordered_query_parameters, SORT_STRING);
foreach($ordered_query_parameters as $key => $value){
$key = rawurlencode($key);
$value = rawurlencode($value);
$canonical_query_string .= $key.'='.$value.'&';
}
$canonical_query_string = substr($canonical_query_string, 0, -1);
$canonical_request = implode("\n",array($http_method, $canonical_uri, $canonical_query_string, $canonical_headers, $signed_headers, 'UNSIGNED-PAYLOAD'));
$canonical_request_hash = hash('sha256', utf8_encode($canonical_request));
$string_to_sign = implode("\n",array('GOOG4-RSA-SHA256', $request_timestamp, $credential_scope, $canonical_request_hash));
$pkeyid = $google_credentials['private_key'];
if(!openssl_sign($string_to_sign,$signature,$pkeyid,'sha256')) {
$signature = 'none';
} else {
$signature = bin2hex($signature);
}
$scheme_and_host = 'https://'.$host;
$signed_url = $scheme_and_host.$canonical_uri.'?'.$canonical_query_string.'&x-goog-signature='.$signature;
return $signed_url;
}
Gist: https://gist.github.com/marcofbb/97c875bb51f2dc9740588f8e550aac77
- 27/05/2015
- 10:53 pm
- marcofbb
El siguiente script lo que hace es pixelar una imagen con PHP. Utiliza la librería GD de PHP para pixelar la imagen.


Continuar leyendo..
- 15/11/2013
- 9:36 pm
- marcofbb
Les dejo un código para pasar del formato UNIX time(); a días, horas, minutos y segundos. La función es muy sencilla, es simplemente matemática básica. Se puede modificar para crear una función que diga “Hace n tiempo” para darle un toque personalizado a las fechas.
function hace($time){
//
$time = time() - $time;
//
if($time < 10) $dato_dia = number_format(($time / (60*60)) / 24,6); else $dato_dia = ($time / (60*60)) / 24;
$data = explode('.',$dato_dia);
$dato_dia = $data[0];
$dato_hora = ('0.'.$data[1])*24;
$data = explode('.',$dato_hora);
$dato_hora = $data[0];
$dato_min = ('0.'.$data[1])*60;
$data = explode('.',$dato_min);
$dato_min = $data[0];
$dato_seg = ('0.'.$data[1])*60;
$data = explode('.',$dato_seg);
$dato_seg = $data[0];
if($dato_dia < 10) $dato_dia = '0'.$dato_dia;
if($dato_hora < 10) $dato_hora = '0'.$dato_hora;
if($dato_min < 10) $dato_min = '0'.$dato_min;
if($dato_seg < 10) $dato_seg = '0'.$dato_seg;
//
if($dato_dia == '00'){
return $dato_hora.':'.$dato_min.':'.$dato_seg;
} else {
return $dato_dia.' days '.$dato_hora.':'.$dato_min.':'.$dato_seg;
}
}
echo hace(1384428541);
// 01 days 13:01:39 |
function hace($time){
//
$time = time() - $time;
//
if($time < 10) $dato_dia = number_format(($time / (60*60)) / 24,6); else $dato_dia = ($time / (60*60)) / 24;
$data = explode('.',$dato_dia);
$dato_dia = $data[0];
$dato_hora = ('0.'.$data[1])*24;
$data = explode('.',$dato_hora);
$dato_hora = $data[0];
$dato_min = ('0.'.$data[1])*60;
$data = explode('.',$dato_min);
$dato_min = $data[0];
$dato_seg = ('0.'.$data[1])*60;
$data = explode('.',$dato_seg);
$dato_seg = $data[0];
if($dato_dia < 10) $dato_dia = '0'.$dato_dia;
if($dato_hora < 10) $dato_hora = '0'.$dato_hora;
if($dato_min < 10) $dato_min = '0'.$dato_min;
if($dato_seg < 10) $dato_seg = '0'.$dato_seg;
//
if($dato_dia == '00'){
return $dato_hora.':'.$dato_min.':'.$dato_seg;
} else {
return $dato_dia.' days '.$dato_hora.':'.$dato_min.':'.$dato_seg;
}
}
echo hace(1384428541);
// 01 days 13:01:39
- 13/11/2013
- 10:03 pm
- marcofbb
En muchos casos necesitamos recorrer el directorio para obtener los archivos de la carpeta con PHP, a continuación le dejo el código para lograrlo. Con el siguiente código vamos a poder leer y/o explorar X carpeta para listar todos los archivos.
$dir = "carpeta";//Especifica el directorio a leer
$rep = opendir($dir);//Abrimos el directorio
while ($arc = readdir($rep)) {//Recorremos el array
// No mostramos los archivos .. ; . y ''
if($arc != '..' && $arc != '.' && $arc != ''){
echo "<a href=".$dir."/".$arc." target='_blank'>".$arc."</a><br />"; //Imprimimos el nombre del archivo con un link
}
}
closedir($rep);//Cerramos el directorio
clearstatcache(); //Limpia la caché de estado de un archivo |
$dir = "carpeta";//Especifica el directorio a leer
$rep = opendir($dir);//Abrimos el directorio
while ($arc = readdir($rep)) {//Recorremos el array
// No mostramos los archivos .. ; . y ''
if($arc != '..' && $arc != '.' && $arc != ''){
echo "<a href=".$dir."/".$arc." target='_blank'>".$arc."</a><br />"; //Imprimimos el nombre del archivo con un link
}
}
closedir($rep);//Cerramos el directorio
clearstatcache(); //Limpia la caché de estado de un archivo
- 24/10/2013
- 12:15 am
- marcofbb
Este código php es para crear una tabla de multiplicar de tamaño 10×10, véase imagen. El código es muy sencillo, por ahí aburrido para la gente medianamente experimentada con el PHP, pero siempre es bueno recordar y practicar.
Continuar leyendo..
- 06/07/2013
- 6:22 pm
- marcofbb

Tras algunos meses de trabajo intenso, versiones beta y algunos retrasos en la fecha de lanzamiento previsto, el pasado viernes 21/06/2013 se anuncia la inmediata disponibilidad de PHP 5.5.
Esta nueva actualización trae varias mejoras y correcciones a la versión anterior (5.4), entre ellas se encuentran la integración de Zend Optimizer + o la inclusión de la función “array_column” para mejorar la extracción de columnas.
En esta nueva versión se añade generadores que proporcionan una manera fácil de implementar itenadores, además de esto, se añade una nueva API que hace más fácil la seguridad y el manejo de contraseñas usando la misma biblioteca subyatente crypt () añadida en PHP.
También ha sido actualizada la libreria GD a la versión 2.1, añadiendo nuevas funciones y mejorando algunas ya existentes.
Con la llegada de PHP 5.5 ha sido liberada una versión beta del sitio php.net, esperada por muchos desarrolladores que usan día a día éste sitio, además se ha eliminado el soporte para Windows XP y Windows 2003.
Si deseas tener más información y seguir conociendo las características de PHP 5.5, así como acceder a su descarga, puedes visitar: php.net
- 26/05/2013
- 11:03 pm
- marcofbb
Muchos de ustedes seguramente utilizan la funcion query_posts() de wordpress para mostrar post según su criterio, como por ejemplo categoría o tag especial. Como se abran dado cuenta, la paginacion no anda automaticamente cuando se utiliza esta función. Para arreglarlo tienen que implementar este código en su consulta
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Obtenemos pagina actual
query_posts('posts_per_page=5&paged='.$paged); // Lo importante es el paged= |
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Obtenemos pagina actual
query_posts('posts_per_page=5&paged='.$paged); // Lo importante es el paged=
- 14/05/2013
- 8:26 pm
- marcofbb
Con el código dado abajo, vamos a utilizar la función de wordpress wp_insert_attachment() para subir imágenes desde una URL y luego ponerla como Thumbnail
$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
$file = $upload_dir['path'] . '/' . $filename;
else
$file = $upload_dir['basedir'] . '/' . $filename;
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );
// Ponemos la imagen como THUMBNAIL
set_post_thumbnail( $post_id, $attach_id ); |
$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
$file = $upload_dir['path'] . '/' . $filename;
else
$file = $upload_dir['basedir'] . '/' . $filename;
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );
// Ponemos la imagen como THUMBNAIL
set_post_thumbnail( $post_id, $attach_id );
La variable $post_id es el ID del post a poner el Thumbnail
- 31/03/2013
- 11:47 am
- marcofbb
El foro creció mucho en el desarrollo de Stream, ya sea con PHP y/o JAVA. En esta oportunidad el usuario “xlfederalelk0lx” descubrió una forma para burlar el sistema de GkPlugins, logrando sacar la limitación de una hora para los usuarios que no poseían licencias y poder utilizarlo sin limite. Es decir van a tener el stream GkPlugins nulled.
Hilo oficial en el foro, para soporte y/o dudas: https://www.marcofbb.com.ar/foro/stream/soporte-pack-gkplugins-liberados/
Lista de servidores soportados para el stream: http://gkplugins.com/
PD: Si le gusta como funciona GkPlugins recomiendo comprarlo, si nos ponemos a pensar en una web de películas online por ejemplo es muy necesario y si todo va bien, el valor de la licencia no seria un problema. Pueden comprar la lincencia desde http://gkplugins.com/order/

- 25/02/2013
- 11:47 pm
- marcofbb
Para obtener la url de un Thumbnail de WordPress para poder utilizarlo en tu tema, vamos a utilizar la función que nos brinda WordPress, una de ellas es wp_get_attachment_image_src y get_post_thumbnail_id.
$foto = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'thumbnail' );
$src = $foto['0'];
echo '<img src="'.$src.'">'; |
$foto = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'thumbnail' );
$src = $foto['0'];
echo '<img src="'.$src.'">';
En vez de thumbnail podemos utilizar medium, large or full.
La forma tradicional que nos da WordPress para obtener la imagen destacada del post, es la siguiente
if ( has_post_thumbnail() ) {
the_post_thumbnail('thumbnail'); // Nos devuelve <img src="IMAGEN" class="TAMAÑO" />
} |
if ( has_post_thumbnail() ) {
the_post_thumbnail('thumbnail'); // Nos devuelve <img src="IMAGEN" class="TAMAÑO" />
}
Páginas: 1
2
3
4
5
6
7
8
Siguiente