Marcofbb Noticias y Artículos Webmasters



Publicidad marcored

Signed manually url google storage PHP

  • 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;
	}

Gist: https://gist.github.com/marcofbb/97c875bb51f2dc9740588f8e550aac77

Instalar Memcached en Vestacp Centos 7

  • 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/

Fix error 500 (internal server error) Webuzo

  • 18/08/2014
  • 1:17 am
  • marcofbb

webuzo_tour[1]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.

Tamaño de carpeta SSH Centos

  • 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 [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

Listar archivos pesados SSH Centos Linux

  • 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

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

Pasar timestamp a días horas minutos y segundos PHP

  • 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

Explorar carpeta con PHP

  • 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
Páginas: 1 2 3 4 5 6 7 8 9 10 ... 14 15 16 Siguiente