- 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
- 22/04/2020
- 9:17 am
- marcofbb
Soluciona los errores “memcached.so: cannot open shared object file” , “msgpack.so: cannot open shared object file”, “igbinary.so: cannot open shared object file”
yum -y install memcached
systemctl enable memcached
yum -y install php74-php-memcached --enablerepo=remi
yum -y install php74-php-igbinary --enablerepo=remi
yum -y install php74-php-msgpack --enablerepo=remi
ln -s /etc/opt/remi/php74/php.d/50-memcached.ini /etc/php.d/
ln -s /etc/opt/remi/php74/php.d/40-msgpack.ini /etc/php.d/
ln -s /etc/opt/remi/php74/php.d/40-igbinary.ini /etc/php.d/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/memcached.so /usr/lib64/php/modules/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/msgpack.so /usr/lib64/php/modules/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/igbinary.so /usr/lib64/php/modules/ |
yum -y install memcached
systemctl enable memcached
yum -y install php74-php-memcached --enablerepo=remi
yum -y install php74-php-igbinary --enablerepo=remi
yum -y install php74-php-msgpack --enablerepo=remi
ln -s /etc/opt/remi/php74/php.d/50-memcached.ini /etc/php.d/
ln -s /etc/opt/remi/php74/php.d/40-msgpack.ini /etc/php.d/
ln -s /etc/opt/remi/php74/php.d/40-igbinary.ini /etc/php.d/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/memcached.so /usr/lib64/php/modules/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/msgpack.so /usr/lib64/php/modules/
ln -s /opt/remi/php74/root/usr/lib64/php/modules/igbinary.so /usr/lib64/php/modules/
- 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..
- 18/08/2014
- 1:17 am
- marcofbb
El error 500 (internal server error) es muy frecuente en las webs cuyo panel de control es Webuzo, y tiene SUphp activado. Para solucionar el error 500 en Webuzo, hay que hacer lo siguiente.
1- Comprobar los permisos de los archivos y carpeta esten de la siguiente forma.
755 para las carpetas,
644 para los archivos.
2- Comprobar que los archivos estén bajo propiedad del usuario
3- Por ultimo la opción numero tres, que por general este es el problema, simplemente tienes que eliminar el apache desde el Panel de Webuzo y re-instalarlo.
Haciendo estos pasos, seguramente se soluciona el problema, recomendamos primero aplicar el paso numero tres, como dicho anteriormente, generalmente es ese el problema.
- 05/08/2014
- 12:52 am
- marcofbb
A continuación le dejo un código para ejecutarlo en SSH (Consola) para saber el tamaño de una carpeta específica.
du -hlsc <nombre de carpeta> |
du -hlsc <nombre de carpeta>
du [opción(es)] [ruta]
Este comando, usado sin opciones, indica el espacio total de almacenamiento utilizado por todos los archivos del directorio en el que nos encontremos. Si existen subdirectorios en él, también se indicará su tamaño total. Aqui les dejo los parámetros en el cual se pueden usar.
-a Muestra el uso de espacio de cada archivo.
-k Escribe el tamaño de los archivos en unidades de 1024 bytes, en vez de las unidades de 512 bytes por defecto.
-s En vez de el output por defecto, informa sólo de la suma total de cada uno de los archivos especificados.
-L Procesa los enlaces simbólicos usando el archivo o directorio al que el enlace simbólico referencia, en vez de el enlace en sí mismo.
-x Cuando evalúa los tamaños de archivo, evalúa sólo esos archivos que tengan el mismo dispositivo que el archivo especificado en el operando.
-h Listado en forma legible para el ser humano.
Visto en: Unidadlocal
- 21/03/2014
- 12:05 pm
- marcofbb
Este comando es de mucha utilidad, muchas veces nos vemos necesario de hacer un mantenimiento en nuestro servidor con el fin de borrar archivos innecesarios. Con este comando vamos a buscar todos los archivos que pesen más de 20MB y posteriormente darte una lista con ellos. Luego solo queda ver cual es un archivo que no sirve y cual sirve, para su eliminación.
Este proceso puede demorar unos segundos
find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -nrk 2,2 |
find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -nrk 2,2
Para editar el tamaño del archivo mínimo para que se liste, simplemente editamos el número “20000” por el valor que deseamos expresado en Kilobytes.
Fuente: Teoriza
- 08/03/2014
- 2:08 am
- marcofbb
Cuando virtualizamos nuestro servidor bajo OpenVZ, muchas veces cuando instalamos WHM/Cpanel y creamos una cuenta nos da como espacio de disco Unlimited, cuando en el paquete asignado tiene un limite. Siguiendo este tutorial van a poder arreglar ese problema.
Continuar leyendo..
- 06/01/2014
- 9:15 pm
- marcofbb
Este tutorial es muy útil para los que recién empiezan con el mundo de los VPS, hoy vamos a enseñarles a instalar Apache y montar su sitio web en CentOS 6 32bit y 64bit.
Primero nos tenemos que conectar vía SSH, como les enseñamos en este articulo.
Luego en consola tenemos que ejecutar los siguientes comandos
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
Páginas: 1
2
3
4
5
6
7
8
9
10
...
14
15
16
Siguiente