WordPress alterar estado posts

Para solucionar o problema colocado no fórum WordPress-PT fiz um pequeno comando SQL que permite alterar o estado de todos os posts numa categoria de uma vez só para ‘draft’, publico este pequeno UPADTE porque com pequenas modificações pode ser bastante útil a quem necessite de actualizar vários posts ou páginas de uma só vez directamente na base de dados do WordPress.

UPDATE wp_posts p /*Tabela onde estão os posts e páginas*/
LEFT OUTER JOIN wp_term_relationships r ON r.object_id = p.ID /*tabela com as relações dos posts*/
LEFT OUTER JOIN wp_terms t ON t.term_id = r.term_taxonomy_id /*tabela onde estao as descrições das categorias*/
SET p.post_status = ‘draft’ /*estados possiveis draft, publish ou pending*/
WHERE p.post_status = ‘publish’ AND p.post_type = ‘post’ AND t.slug = ‘NomeDaCategoria’ /*condições para proceder ao update*/

Reset WordPress admin Password

Ia hoje fazer alguns testes numa instalação do wordpress que tenho no meu computador, após várias tentativas não me lembrava da password de admin que configurei para esta instalação. Ainda fui á base de dados mas lá tem apenas um md5 da password.

Lá fiz um ficheiro php que faz “echo md5(password)” e colei o valor na base de dados e ficou ok.

Para me facilitar o trabalho em futuros e previsíveis esquecimentos criei um pequeno script em php que faz todo o processo de reset da password de admin, bastando para isso editar o valor da password em plain text que está no topo do ficheiro.

Em baixo disponibilizo a source em php do ficheiro, para usar basta colar este texto num ficheiro .php na pasta da raiz da instalação do wordpress e visitar o mesmo no browser.

<?php
/*Nome do utilizador do qual queremos alterar a password*/
$nome_utilizador = "admin";
/*Nova password para o utilizador configurado em cima!*/
$nova_password = "teste";
/*
ATENÇÃO: se deixar este ficheiro no servidor sempre que alguém aceder ao mesmo a password
será alterada para esta.
Não é necessário alterar nada daqui para baixo, este script lê as configurações de acesso à
base de dados através do ficheiro de configuração do wordpress
*/
require( dirname(__FILE__) . '/wp-config.php' );
$ligacao = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
if (!
$ligacao) {
die(
'Não foi possível Ligar: <br />' . mysql_error());
}
echo
'Ligação á base de dados bem sucedida!!<br />';
$base_dados = mysql_select_db(DB_NAME, $ligacao);
$nova_password = md5($nova_password);
if (
mysql_query ("update ".$table_prefix."users set user_pass = '".$nova_password."' where user_login = '".$nome_utilizador."'"))
{
echo
"Password alterada com sucesso!!!<br />";
}
else
{
echo
"Ocorreu um erro ao alterar a password!!<br />".mysql_error();
}
echo
"Deve agora apagar este ficheiro do servidor!!<br /><a href=\"http://antoniocampos.net\">Antonio Campos</a>";
mysql_close($ligacao);
?>

PHP init_set o que é??

As configurações do php independentemente da plataforma em que corre são por defeito feitas num ficheiro que se chama php.ini , quem precisa de alterar uma das confiurações para um script especifico ou não tem acesso a editar o php.ini pode contornar isso usando a função init_set a sintaxe é a seguinte:

init_set (“Nome_Parametro”, “Valor_parametro”);

Esta função retorna false no caso de por alguma razão o parâmetro não ter sido alterado e retorna o valor antigo no caso da alteração ter sido bem sucedida!

Se por exemplo quisermos alterar o limite de memoria alocável podemos usar o init_set da seguinte forma:

ini_set(“memory_limit”,”64M”;

Nem todas os parâmetros do php.ini são alteráveis, não encontrei nenhuma lista dos parâmetros alteráveis, mas é fácil quando usarem esta função se a sintaxe estiver correcta e se o valor do parâmetro for válido e mesmo assim a função retornar false é porque provavelmente descobriram um parâmetro não editável em runtime!

PHP Geoip – Fatal error: Allowed memory size of…

Para aqueles que estão a usar o código que disponibilizei neste post sobre a API do GeoIP, ou que usam o GeoIP de qualquer outra forma!

Hoje uma das aplicações em PHP que fiz utilizando a API do GeoIP, começou a dar um erro “Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 27609379 bytes) in /path_para_o_site/my-ip-info/geoipapi/geoip.inc.php on line 316

A primeira coisa que fiz foi tentar com o init_set do PHP aumentar o “memory_limit” do PHP (ini_set(“memory_limit”,”64M”);) que não deu resultado apesar do valor a alocar fosse bastante mais baixo do que o limite.

Após vários testes falhados alterei um parametro na linha em que crio o apontador para a base de dados e ficou a funcionar correctamente! Na linha onde estava “$gcity = geoip_open(“db/GeoLiteCity.dat”,GEOIP_MEMORY_CACHE);” passou a estar “$gcity = geoip_open(“db/GeoLiteCity.dat”,none);” ficou a funcionar embora se note uma pequena perda de velocidade quase imperceptivel mas está mais lento!

Depois de o problema estar resolvido fui ao site da MaxMind dar uma vista de olhos e encontrei um benchmark dos diferentes tipos de cache que se pode ter e qual o numero de queries/segundo conforme o tipo de cache!