8610
De acordo com o manual esta é a quantidade de funções que a linguagem PHP oferece. Usei o seguinte código javascript + jquery para chegar a este número:
E olha que todas estas funções estão no namespace global da linguagem. Mas também estão incluídas funções presentes em extensões como mysql, gd, simplexml etc.
Por isso eu não falo nada quando dizem que PHP é uma linguagem cujo design é feito por acidente. Mas isso não importa.
Update:
Neste link no fórum devshed tem um comando que permite saber a quantidade de funções definidas no seu ambiente. A função get_defined_functions retorna um array com todas as funções definidas, divididas em "internal", as funções definidas pelo php, e "user", funções definidas pelo usuário. Aqui está o comando:
$f = get_defined_functions();
echo "Functions: ".count($f["internal"])."\n";
No meu ambiente
PHP 5.3.3-1ubuntu9.10 with Suhosin-Patch (cli) (built: Feb 11 2012 06:40:29)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
são reportadas 1762 funções do tipo internal.
Mostrando postagens com marcador javascript. Mostrar todas as postagens
Mostrando postagens com marcador javascript. Mostrar todas as postagens
quarta-feira, 4 de abril de 2012
segunda-feira, 5 de março de 2012
Fazer download de arquivos via Ajax
Na verdade o método que vou mencionar aqui não usa ajax. Mas permite que sejam enviadas requisições do tipo post ou get e que a partir destas requisições seja possível fazer um download de um arquivo.
A ideia não é minha e todos os créditos vão para o autor deste post. A implementação é bem simples e o truque usado é no mínimo inteligente. A requisição é enviada através de um form criado em tempo de execução, basta que o servidor que recebeu a requisição responda com o download do arquivo (em PHP geralmente é usada a função readfile). Ao invés de uma requisição ajax o browser envia uma requisição de form via post ou get conforme definido na chamada da função no parâmetro method. O autor criou a função na forma de um plugin jQuery, aqui está o código:
O uso é bem simples:
$.download('./url_download.php','parametro_1=valor_1¶metro_2=' + valor_2 );
Aqui está o projeto github do plugin. É isso aí até a próxima.
A ideia não é minha e todos os créditos vão para o autor deste post. A implementação é bem simples e o truque usado é no mínimo inteligente. A requisição é enviada através de um form criado em tempo de execução, basta que o servidor que recebeu a requisição responda com o download do arquivo (em PHP geralmente é usada a função readfile). Ao invés de uma requisição ajax o browser envia uma requisição de form via post ou get conforme definido na chamada da função no parâmetro method. O autor criou a função na forma de um plugin jQuery, aqui está o código:
O uso é bem simples:
$.download('./url_download.php','parametro_1=valor_1¶metro_2=' + valor_2 );
Aqui está o projeto github do plugin. É isso aí até a próxima.
domingo, 18 de dezembro de 2011
Como escrever javascript com PHP?
Quem já tem alguma experiência com desenvolvimento web já deve ter passado pela experiência de escrever código javascript usando código PHP. A técnica é bem interessante e poderosa, pois você está gerando código javascript dinamicamente usando PHP que também é uma linguagem dinâmica, Batman e Robin ficariam orgulhosos.
Aqui vai um exemplo: Você tem um site bastante visitado e que usa bastante ajax para evitar recarregar toda a página para cada ação do usuário. Mas e que tal você economizar até nas chamadas ajax? Supondo aquela situação básica onde o usuário do site escolhe uma opção em um select e algum lugar da página é recarregado automaticamente de acordo com a opção escolhida. Supondo ainda que as informações envolvidas não mudem com muita frequência, vamos fazer com todas as informações já estejam na página permitindo o código javascript carregar as informações na página sem uma requisição ajax.
O código simplesmente preenche o input "sentimento_cor" de acordo com a cor escolhida no select. Como vocês podem ver estou preenchendo o array javascript "sentimentos_cores" com os valores vindos do array PHP "sentimento_cores". Desta forma a função "mostra_sentimentos" vai somente pegar o valor do input diretamente do array javascript sem a necessidade de uma requisição ajax.
Até aí tudo bem. No entanto se você testar este código vai perceber que um erro javascript vai aparecer logo de cara na seguinte linha:
sentimentos_cores.push("depressão, luto e "escuridão"");
Como a palavra escuridão está entres aspas duplas estas se misturaram com as aspas duplas do código javascript formando um comando inválido. O problema aqui foi que nós não escapamos a saída javascript. E como já comentei em um artigo anterior não escapar a saída pode trazer sérios problemas para sua aplicação web.
E como escapamos a saída javascript? Muito simples, a linguagem PHP já possui uma função que faz isso, embora o nome da função não seja óbvio, a função json_encode. Assim o trecho onde a PHP gera o código javascript ficaria assim:
Agora vá e observe a saída gerada pela linguagem PHP:
As aspas foram escapadas e os acentos foram convertidos para uma representação unicode. Na verdade nós poderíamos ter simplificado o código usando a função json_encode diretamente no array PHP o teria gerado a seguinte string:
["al\u00edvio e paz","amor e paix\u00e3o","depress\u00e3o, luto e \"escurid\u00e3o\""];
Esta string é código javascript, e pode ser usado diretamente no código javascript da página:
Espero que este post seja útil para quem estiver usando PHP para gerar javascript, até a próxima!
Aqui vai um exemplo: Você tem um site bastante visitado e que usa bastante ajax para evitar recarregar toda a página para cada ação do usuário. Mas e que tal você economizar até nas chamadas ajax? Supondo aquela situação básica onde o usuário do site escolhe uma opção em um select e algum lugar da página é recarregado automaticamente de acordo com a opção escolhida. Supondo ainda que as informações envolvidas não mudem com muita frequência, vamos fazer com todas as informações já estejam na página permitindo o código javascript carregar as informações na página sem uma requisição ajax.
O código simplesmente preenche o input "sentimento_cor" de acordo com a cor escolhida no select. Como vocês podem ver estou preenchendo o array javascript "sentimentos_cores" com os valores vindos do array PHP "sentimento_cores". Desta forma a função "mostra_sentimentos" vai somente pegar o valor do input diretamente do array javascript sem a necessidade de uma requisição ajax.
Até aí tudo bem. No entanto se você testar este código vai perceber que um erro javascript vai aparecer logo de cara na seguinte linha:
sentimentos_cores.push("depressão, luto e "escuridão"");
Como a palavra escuridão está entres aspas duplas estas se misturaram com as aspas duplas do código javascript formando um comando inválido. O problema aqui foi que nós não escapamos a saída javascript. E como já comentei em um artigo anterior não escapar a saída pode trazer sérios problemas para sua aplicação web.
E como escapamos a saída javascript? Muito simples, a linguagem PHP já possui uma função que faz isso, embora o nome da função não seja óbvio, a função json_encode. Assim o trecho onde a PHP gera o código javascript ficaria assim:
Agora vá e observe a saída gerada pela linguagem PHP:
As aspas foram escapadas e os acentos foram convertidos para uma representação unicode. Na verdade nós poderíamos ter simplificado o código usando a função json_encode diretamente no array PHP o teria gerado a seguinte string:
["al\u00edvio e paz","amor e paix\u00e3o","depress\u00e3o, luto e \"escurid\u00e3o\""];
Esta string é código javascript, e pode ser usado diretamente no código javascript da página:
Espero que este post seja útil para quem estiver usando PHP para gerar javascript, até a próxima!
quarta-feira, 22 de setembro de 2010
Mude suas idéias sobre o Javascript
É do time dos programadores que odeiam Javascript e amaldiçoam o dia em que a linguagem surgiu? Bom no vídeo abaixo Doug Crockford fala das partes boas da linguagem. Ele admite que muita coisa na linguagem é medonha e nos faz duvidar da qualidade da mesma como o operador "+" que serve para somar e concatenar e os erros silenciosos que podem surgir no código entre outras inconveniências. Mas ele comenta que muita coisa chata é devido ao modelo DOM adotado pelos browsers (maior fonte de incompatibilidades). Além do mais a vida de um programador Javascript hoje em dia é bem melhor do que alguns anos atrás, hoje temos bibliotecas como JQuery, ferramentas como FireBug e browsers um pouco mais compatíveis.
Vendo o cara falar da linguagem com uma certa paixão me fez olhar para ela com outros olhos. Ah! E de quebra a apresentação tem umas partes bem engraçadas.
Vendo o cara falar da linguagem com uma certa paixão me fez olhar para ela com outros olhos. Ah! E de quebra a apresentação tem umas partes bem engraçadas.
sábado, 21 de novembro de 2009
AjaxUpload para uploads sem complicação
Olá galera! Recentemente acabei um pequeno projeto em que estive trabalhando e que vocês podem conferir aqui (pcveiculos.com). Devo falar mais sobre ele depois, mas este post é para falar de um plugin bem legal que usei junto com o jquery (se você não usa, não sabe o que está perdendo) no projeto , é o AjaxUpload. Obs: No site do AjaxUpload fala que ele pode ser usado com outras bibliotecas como a Prototype, Mootools etc.
O AjaxUpload basicamente permite que o usuário clique em um botão (por exemplo) em uma página web e escolha um arquivo que ele deseja enviar para o servidor web. Depois de o usuário escolher o arquivo, o plugin pode automaticamente enviar o arquivo escolhido para o servidor. Isso mesmo, sem refresh da página inteira, sem precisar criar um formulário e um "input" tipo "file", tudo bem prático e simples. E o usuário ainda pode enviar mais de um arquivo ao mesmo tempo.
Bom aqui vai um link para um exemplo pronto (usando PHP), adaptado do próprio código exemplo do AjaxUpload, a maior diferença é que eu adicionei alguns comentários no código que tentam explicar algumas opções básicas .Exemplo AjaxUpload. Como vocês podem ver no exemplo eu também usei a biblioteca jquery.
Quando for testar o exemplo não se esqueça de setar as permissões da pasta uploads para aceitar ler e escrever arquivos. Qualquer dúvida ou problema encontrado comentem aí!
O AjaxUpload basicamente permite que o usuário clique em um botão (por exemplo) em uma página web e escolha um arquivo que ele deseja enviar para o servidor web. Depois de o usuário escolher o arquivo, o plugin pode automaticamente enviar o arquivo escolhido para o servidor. Isso mesmo, sem refresh da página inteira, sem precisar criar um formulário e um "input" tipo "file", tudo bem prático e simples. E o usuário ainda pode enviar mais de um arquivo ao mesmo tempo.
Bom aqui vai um link para um exemplo pronto (usando PHP), adaptado do próprio código exemplo do AjaxUpload, a maior diferença é que eu adicionei alguns comentários no código que tentam explicar algumas opções básicas .Exemplo AjaxUpload. Como vocês podem ver no exemplo eu também usei a biblioteca jquery.
Quando for testar o exemplo não se esqueça de setar as permissões da pasta uploads para aceitar ler e escrever arquivos. Qualquer dúvida ou problema encontrado comentem aí!
sexta-feira, 27 de fevereiro de 2009
Verificar se um ponto está dentro de um polígono no Google Maps
Dica rápida para quem está usando Google Maps e javascript (se bem que é quase impossível usar o google maps sem javascript).
Estes códigos permitem verificar se determinado ponto está ou não dentro de um objeto GPolygon(polígono).
Primeiro código:
Ele adiciona a funcao Contains(point) no objeto GPolygon. Eu a retirei do seguinte endereço:http://econym.org.uk/gmap/inside.htm.
Aliás nesta página tem um excelente tutorial sobre o Google Maps. Para usá-la você faria o seguinte:
var polygon = new GPolygon(points);
polygon.Contains(algumPonto);
O outro código é este:
Ele basicamente faz a mesma coisa, adiciona a função containsLatLng() no objeto GPolygon. Esta eu peguei em: http://dawsdesign.com/drupal/google_maps_point_in_polygon.
O uso é o mesmo também:
var polygon = new GPolygon(points);
polygon.containsLatLng(algumPonto);
Ambas as funções retornam true ou false.
A primeira não estava identificando corretamente alguns pontos em um polígono com quatro lados de tamanhos irregulares, equanto a segunda
funcionou neste caso. A primeira função funcionou corretamente em um polígono com a forma de um círculo.
Espero que elas ajudem vocês como me ajudaram.
PS.:Me desculpem pelo código, é melhor vocês olharem nos links, ainda não sei o que fazer para publicar código decentemente.
Estes códigos permitem verificar se determinado ponto está ou não dentro de um objeto GPolygon(polígono).
Primeiro código:
// // === A method for testing if a point is inside a polygon
// === Returns true if poly contains point
// === Algorithm shamelessly stolen from http://alienryderflex.com/polygon/
GPolygon.prototype.Contains = function(point) {
var j=0;
var oddNodes = false;
var x = point.lng();
var y = point.lat();
for (var i=0; i < this.getVertexCount(); i++) {
j++;
if (j == this.getVertexCount()) {j = 0;}
if (((this.getVertex(i).lat() < y) && (this.getVertex(j).lat() >= y))
|| ((this.getVertex(j).lat() < y) && (this.getVertex(i).lat() >= y))) {
if ( this.getVertex(i).lng() + (y - this.getVertex(i).lat())
/ (this.getVertex(j).lat()-this.getVertex(i).lat())
* (this.getVertex(j).lng() - this.getVertex(i).lng())oddNodes = !oddNodes
}
}
}
return oddNodes;
}
Ele adiciona a funcao Contains(point) no objeto GPolygon. Eu a retirei do seguinte endereço:http://econym.org.uk/gmap/inside.htm.
Aliás nesta página tem um excelente tutorial sobre o Google Maps. Para usá-la você faria o seguinte:
var polygon = new GPolygon(points);
polygon.Contains(algumPonto);
O outro código é este:
// Create polygon method for collision detection
GPolygon.prototype.containsLatLng = function(latLng) {
// Do simple calculation so we don't do more CPU-intensive calcs for obvious misses
var bounds = this.getBounds();
if(!bounds.containsLatLng(latLng)) {
return false;
}
var numPoints = this.getVertexCount();
var inPoly = false;
var i;
var j = numPoints-1;
for(var i=0; i < numPoints; i++) {
var vertex1 = this.getVertex(i);
var vertex2 = this.getVertex(j);
if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) {
if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {
inPoly = !inPoly;
}
}
j = i;
}
return inPoly;
};
Ele basicamente faz a mesma coisa, adiciona a função containsLatLng() no objeto GPolygon. Esta eu peguei em: http://dawsdesign.com/drupal/google_maps_point_in_polygon.
O uso é o mesmo também:
var polygon = new GPolygon(points);
polygon.containsLatLng(algumPonto);
Ambas as funções retornam true ou false.
A primeira não estava identificando corretamente alguns pontos em um polígono com quatro lados de tamanhos irregulares, equanto a segunda
funcionou neste caso. A primeira função funcionou corretamente em um polígono com a forma de um círculo.
Espero que elas ajudem vocês como me ajudaram.
PS.:Me desculpem pelo código, é melhor vocês olharem nos links, ainda não sei o que fazer para publicar código decentemente.
quarta-feira, 18 de fevereiro de 2009
Como limpar um array em Javascript?
Vocês sabiam que podem limpar os valores de um array em javascript usando "array.length = 0" ?
Assinar:
Postagens (Atom)