tag:blogger.com,1999:blog-39718757427770018272024-03-21T11:10:01.419-03:00Folder CodeGuilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-3971875742777001827.post-5324917451795971582010-10-06T12:11:00.000-03:002010-10-06T12:11:12.434-03:00Free PDF Book de PHP e Oracle: The Underground PHP and Oracle Manual<div style="text-align: justify;">Este free PDF book é destinado a programadores PHP que desenvolvem aplicações para banco de dados Oracle.<br />
<br />
Este book é interessante para:<br />
- Quem está começando a aprender PHP com Oracle;<br />
- Quem é um programador PHP e deseja aprender Oracle;<br />
- Quem está inseguro sobre como instalar o PHP, ou Oracle;<br />
- Quem pretende apenas saber as boas práticas de PHP e Oracle. <br />
<br />
Este livro dá-lhe a base fundamental e necessária para criar aplicações web de alta performance com PHP e Oracle.<br />
<a name='more'></a><br />
Veja abaixo todo o conteúdo abordado no livro (conteúdo em inglês):<br />
<br />
<b>Chapter 1 Introduction</b><br />
Who Should Read This Book?<br />
Introduction to Oracle<br />
Databases and Instances<br />
Tablespaces<br />
Schemas and Users<br />
Introduction to PHP<br />
<b>Chapter 2 Getting Started With PHP</b><br />
Creating and Editing PHP Scripts<br />
PHP Syntax Overview<br />
Running PHP Scripts<br />
Running PHP Scripts in a Browser<br />
Running Scripts with Command Line PHP<br />
Debugging PHP Scripts<br />
<b>Chapter 3 PHP Oracle Extensions</b><br />
PHP Oracle Extensions<br />
Oracle Extension<br />
OCI8 Extension<br />
PDO Extension<br />
PHP Database Abstraction Libraries<br />
ADOdb<br />
PEAR DB<br />
PEAR MDB2<br />
Getting the OCI8 Extension<br />
OCI8 and Oracle Installation Options<br />
Getting the PDO Extension<br />
Zend Core for Oracle<br />
The PHP Release Cycle<br />
<b>Chapter 4 Installing Oracle Database 10g Express Edition</b><br />
Oracle Database Editions<br />
Oracle Database XE<br />
Installing Oracle Database XE on Linux<br />
Installing Oracle Database XE on Debian, Ubuntu, and Kubuntu<br />
Installing Oracle Database XE on Windows<br />
Testing the Oracle Database XE Installation<br />
Configuring Oracle Database XE<br />
Setting the Oracle Database XE Environment Variables on Linux<br />
Enabling Database Startup and Shutdown from Menus on Linux<br />
Starting and Stopping the Listener and Database<br />
Enabling Remote Client Connection<br />
<b>Chapter 5 Using Oracle Database</b><br />
Oracle Application Express<br />
Logging In To Oracle Application Express<br />
Unlocking the HR User<br />
Creating Database Objects<br />
Working with SQL Scripts<br />
Creating a PL/SQL Procedure<br />
Creating a Database User<br />
Monitoring Database Sessions<br />
Database Backup and Recovery<br />
Oracle SQL*Plus<br />
Starting SQL*Plus<br />
Executing SQL and PL/SQL Statements in SQL*Plus<br />
Controlling Query Output in SQL*Plus<br />
Running Scripts in SQL*Plus<br />
Information On Tables in SQL*Plus<br />
Accessing the Demonstration Tables in SQL*Plus<br />
Oracle SQL Developer<br />
Creating a Database Connection<br />
Creating a Table<br />
Executing a SQL Query<br />
Editing, Compiling and Running PL/SQL<br />
Running Reports<br />
Creating Reports<br />
<b>Chapter 6 Installing Apache HTTP Server</b><br />
Installing Apache HTTP Server on Linux<br />
Starting and Stopping Apache HTTP Server<br />
Configuring Apache HTTP Server on Linux<br />
Installing Apache HTTP Server on Windows<br />
Starting and Stopping Apache HTTP Server<br />
<b>Chapter 7 Installing PHP</b><br />
Installing PHP with OCI8 on Linux<br />
Installing OCI8 Using a Local Database<br />
Installing OCI8 Using Oracle Instant Client<br />
Upgrading PHP with PECL OCI8 on Linux<br />
Upgrading OCI8 as a Static Library on Linux<br />
Upgrading OCI8 on Linux Using the PECL Channel<br />
Upgrading OCI8 as a Shared Library on Linux<br />
Installing PHP With OCI8 on Windows<br />
Installing OCI8 Using a Local Database on Windows<br />
Installing OCI8 with Instant Client on Windows<br />
Upgrading OCI8 on Windows<br />
Installing OCI8 with Oracle Application Server on Linux<br />
Installing PHP With PDO<br />
Installing PDO on Linux<br />
Installing PDO on Windows<br />
Checking OCI8 and PDO_OCI Installation<br />
<b>Chapter 8 Installing Zend Core for Oracle</b><br />
Installing Zend Core for Oracle<br />
Installing Zend Core for Oracle on Linux<br />
Testing the Zend Core for Oracle Installation on Linux<br />
Installing Zend Core for Oracle on Windows<br />
Testing the Zend Core for Oracle Installation on Windows<br />
Configuring Zend Core for Oracle<br />
<b>Chapter 9 Connecting to Oracle Using OCI8</b><br />
Oracle Connection Types<br />
Standard Connections<br />
Multiple Unique Connections<br />
Persistent Connections<br />
Oracle Database Name Connection Identifiers<br />
Easy Connect String<br />
Database Connect Descriptor String<br />
Database Connect Name<br />
Common Connection Errors<br />
Setting Oracle Environment Variables for Apache<br />
Closing Oracle Connections<br />
Close Statement Resources Before Closing Connections<br />
Transactions and Connections<br />
Session State with Persistent Connections<br />
Optional Connection Parameters<br />
Connection Character Set<br />
Connection Session Mode<br />
Changing the Database Password<br />
Changing Passwords On Demand<br />
Changing Expired Passwords<br />
Tuning Oracle Connections in PHP<br />
Use the Best Connection Function<br />
Pass the Character Set<br />
Do Not Set the Date Format Unnecessarily<br />
Managing Persistent Connections<br />
Maximum Number of Persistent Connections Allowed<br />
Timeout for Unused Persistent Connections<br />
Pinging for Closed Persistent Connections<br />
Apache Configuration Parameters<br />
Reducing Database Server Memory Used By Persistent Connections<br />
Oracle Net and PHP<br />
Connection Rate Limiting<br />
Setting Connection Timeouts<br />
Configuring Authentication Methods<br />
Detecting Dead PHP Apache Sessions<br />
Other Oracle Net Optimizations<br />
Tracing Oracle Net<br />
Connection Management in Scalable Systems<br />
<b>Chapter 10 Executing SQL Statements With OCI8</b><br />
SQL Statement Execution Steps<br />
Query Example<br />
Oracle Datatypes<br />
Fetch Functions<br />
Fetching as a Numeric Array<br />
Fetching as an Associative Array<br />
Fetching as an Object<br />
Defining Output Variables<br />
Fetching and Working with Numbers<br />
Fetching and Working with Dates<br />
Insert, Update, Delete, Create and Drop<br />
Transactions<br />
Autonomous Transactions<br />
The Transactional Behavior of Connections<br />
PHP Error Handling<br />
Handling OCI8 Errors<br />
Tuning SQL Statements in PHP Applications<br />
Using Bind Variables<br />
Tuning the Prefetch Size<br />
Tuning the Statement Cache Size<br />
Using the Server and Client Query Result Caches<br />
Limiting Rows and Creating Paged Datasets<br />
Auto-Increment Columns<br />
Getting the Last Insert ID<br />
Exploring Oracle<br />
Case Insensitive Queries<br />
Analytic Functions in SQL<br />
<b>Chapter 11 Using PL/SQL With OCI8</b><br />
PL/SQL Overview<br />
Blocks, Procedures, Packages and Triggers<br />
Anonymous Blocks<br />
Stored or Standalone Procedures and Functions<br />
Packages<br />
Triggers<br />
Creating PL/SQL Stored Procedures in PHP<br />
End of Line Terminators in PL/SQL with Windows PHP<br />
Calling PL/SQL Code<br />
Calling PL/SQL Procedures<br />
Calling PL/SQL Functions<br />
Binding Parameters to Procedures and Functions<br />
Array Binding and PL/SQL Bulk Processing<br />
PL/SQL Success With Information Warnings<br />
Using REF CURSORS for Result Sets<br />
Closing Cursors<br />
Converting from REF CURSOR to PIPELINED Results<br />
Oracle Collections in PHP<br />
Using PL/SQL and SQL Object Types in PHP<br />
Using OCI8 Collection Functions<br />
Using a REF CURSOR<br />
Binding an Array<br />
Using a PIPELINED Function<br />
Getting Output with DBMS_OUTPUT<br />
PL/SQL Function Result Cache<br />
Using Oracle Locator for Spatial Mapping<br />
Inserting Locator Data<br />
Queries Returning Scalar Values<br />
Selecting Vertices Using SDO_UTIL.GETVERTICES<br />
Using a Custom Function<br />
Scheduling Background or Long Running Operations<br />
Reusing Procedures Written for MOD_PLSQL<br />
<b>Chapter 12 Using Large Objects in OCI8</b><br />
Working with LOBs<br />
Inserting and Updating LOBs<br />
Fetching LOBs<br />
Temporary LOBs<br />
LOBs and PL/SQL procedures<br />
Other LOB Methods<br />
Working with BFILEs<br />
<b>Chapter 13 Using XML with Oracle and PHP</b><br />
Fetching Relational Rows as XML<br />
Fetching Rows as Fully Formed XML<br />
Using the SimpleXML Extension in PHP<br />
Fetching XMLType Columns<br />
Inserting into XMLType Columns<br />
Fetching an XMLType from a PL/SQL Function<br />
XQuery XML Query Language<br />
Accessing Data over HTTP with XML DB<br />
<b>Chapter 14 PHP Scalability and High Availability</b><br />
Database Resident Connection Pooling<br />
How DRCP Works<br />
PHP OCI8 Connections and DRCP<br />
When to use DRCP<br />
Sharing the Server Pool<br />
Using DRCP in PHP<br />
Configuring and Enabling the Pool<br />
Configuring PHP for DRCP<br />
Application Deployment for DRCP<br />
Monitoring DRCP<br />
V$PROCESS and V$SESSION Views<br />
DBA_CPOOL_INFO View<br />
V$CPOOL_STATS View<br />
V$CPOOL_CC_STATS View<br />
High Availability with FAN and RAC<br />
Configuring FAN Events in the Database<br />
Configuring PHP for FAN<br />
Application Deployment for FAN<br />
RAC Connection Load Balancing with PHP<br />
<b>Chapter 15 Globalization</b><br />
Establishing the Environment Between Oracle and PHP<br />
Manipulating Strings<br />
Determining the Locale of the User<br />
Encoding HTML Pages<br />
Specifying the Page Encoding for HTML Pages<br />
Specifying the Encoding in the HTTP Header<br />
Specifying the Encoding in the HTML Page Header<br />
Specifying the Page Encoding in PHP<br />
Organizing the Content of HTML Pages for Translation<br />
Strings in PHP<br />
Static Files<br />
Data from the Database<br />
Presenting Data Using Conventions Expected by the User<br />
Oracle Number Formats<br />
Oracle Date Formats<br />
Oracle Linguistic Sorts<br />
Oracle Error Messages<br />
<b>Chapter 16 Testing PHP and the OCI8 Extension</b><br />
Running OCI8 Tests<br />
Running a Single Test<br />
Tests that Fail<br />
Creating OCI8 Tests <br />
OCI8 Test Helper Scripts<br />
Configuring the Database For Testing<br />
<b>Appendix A Tracing OCI8 Internals</b><br />
Enabling OCI8 Debugging output<br />
<b>Appendix B OCI8 php.ini Parameters</b><br />
<b>Appendix C OCI8 Function Names in PHP 4 and PHP 5</b><br />
<b>Appendix D The Obsolete Oracle Extension</b><br />
Oracle and OCI8 Comparison<br />
<b>Appendix E Resources</b><br />
General Information and Forums<br />
Oracle Documentation<br />
Selected PHP and Oracle Books<br />
Software and Source Code<br />
PHP Links<br />
<b>Glossary</b><br />
<br />
<b>Baixe o Book Aqui: <a href="http://www.4shared.com/document/1c__y2tG/Livro_php_oracle.html" target="_blank">Download</a></b><br />
<br />
Até a próxima <br />
:-)<br />
<br />
<br />
</div><div style="height: 120px; overflow: hidden; width: 468px;"><div style="overflow: hidden;"><script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script> <script language="javascript">
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "10749016";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "264909";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "2";
buscapeads_categorias = "6424";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
</script> <script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script></div></div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-91620811198138679912010-08-25T15:32:00.003-03:002010-09-02T15:36:07.430-03:00Problema de conexão com banco de dados localhost com PDORecentemente tive um problema de conexão com banco de dados em localhost usando CodeIgniter e Doctrine.<br />
<br />
Se você já usou Doctrine, sabe que ele se conecta ao banco de dados por PDO.<br />
<br />
O erro apresentado era este: <b>PDO::__construct() [pdo.--construct]: [2002] Invalid argument</b><br />
<a name='more'></a><br />
Ao exibir na tela a string de conexão usada pelo Doctrine (para ter certeza que os dados estavam todos corretos), nenhum supresa. <br />
<br />
A string de conexão apresentada foi essa (nenhum erro aparentemente):<br />
<b>mysql:host=localhost;dbname=noteste</b><br />
<br />
Para resolver o problema, altere no arquivo database.php (se estiver usando CodeIgniter) ou na variável que está utilizando para armazenar o endereço do host para: <b>127.0.0.1</b><br />
<br />
Sim, isso resolveu para mim, e deve resolver para você também! <br />
<br />
P.s.: A aplicação rodava sob Windows com EasyPHP 5.3.3.Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com1tag:blogger.com,1999:blog-3971875742777001827.post-90900134410809634252010-06-02T17:31:00.005-03:002010-06-13T22:56:19.188-03:00Como enviar/receber valores de um checkbox via POST<div style="text-align: justify;">Já vi vários programadores PHP apanhando para fazer um simples envio de valores via checkbox, portanto, vou deixar registrado aqui a simplicidade de se implementar esta funcionalidade.<br />
<br />
Crie uma página HTML com alguns checkbox. Coloque a propriedade "name" dos checkbox com o nome de <b>chk[]</b>. Na propriedade "value" coloque qualquer valor.<br />
<a name='more'></a><br />
<b>index.html</b><br />
<pre class="brush: xml"><html>
<head>
<title>Folder Code</title>
</head>
<body>
<form name="form1" method="POST" action="destino.php">
<input type="checkbox" name="chk[]" value="1" />Valor 1
<input type="checkbox" name="chk[]" value="3" />Valor 3
<input type="checkbox" name="chk[]" value="5" />Valor 5
<input type="checkbox" name="chk[]" value="7" />Valor 7
<input type="checkbox" name="chk[]" value="9" />Valor 9
<input type="submit" name="submit" value="Enviar" />
</form>
</body>
</html></pre>Na página PHP que receberá os dados do formulário, coloque este código:<br />
<br />
<b>destino.php</b><br />
<pre class="brush: php"><?php
foreach($_POST['chk'] as $chk) {
echo "Valor Recebido: ".$chk;
}
?></pre><b>Explicação:</b> O foreach só será executado se houver algum $_POST do formulário. <br />
<br />
<i>Note que colocamos o nome dos checkbox como um array, usando "[]".</i><br />
<br />
O foreach percorrerá todos os valores enviados pelos checkbox que forem marcados e colocará o valor na variável $chk.<br />
<br />
Até a próxima.<br />
</div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com1tag:blogger.com,1999:blog-3971875742777001827.post-74066282120489190662010-05-14T15:13:00.014-03:002010-05-16T00:31:01.213-03:00Perda de sessão php no Mozilla Firefox e Google Chrome<div align="justify">Fica registrado aqui mais uma dica encontrada durante o processo de desenvolvimento de sites.<br />
<br />
Este dica é referente a um erro encontrado e solucionado por Neil Tanaka, coordenador chefe da equipe de desenvolvimento do local onde trabalho, durante análises a um antigo site.<br />
<br />
<b>Descrição do problema: </b>Em um site comum (PHP), existe um painel de login dentro de um iframe. Este arquivo que faz o login do usuário é chamado dentro do iframe, e ele envia para si mesmo, os dados do formulário de login. Ao validar um usuário, o arquivo abre uma janela popup. Esta janela popup, verifica se existe uma sessão em PHP antes de exibir o conteúdo. Caso não encontre nenhuma sessão ativa, ela exibe o texto "acesso restrito". <br />
Em navegadores Internet Explorer, a sessão funcionava corretamente. Porém nos navegadores Mozilla Firefox e Google Chrome, a mensagem "acesso restrito" era exibida, indicando que a sessão não foi gravada. No entanto, o fato do Firefox e do Chrome não gravarem a sessão, não era uma regra. Em alguns computadores, a janela popup exibia o conteúdo corretamente, em outro computadores, "acesso restrito".<br />
<br />
<a name='more'></a><b>Testes:</b> Foram testados o login de usuário em quatro computadores, utilizando sempre o Internet Explorer, Google Chrome e Mozilla Firefox. Em dois dos computadores testados, a mensagem "acesso restrito" foi exibida, tanto no Google Chrome como no Mozilla Firefox, porém, nos outros dois computadores restantes, o conteúdo foi exibido corretamente em todos os navegadores. Vale ressaltar que o cache dos navegadores foram zerados em todos os computadores antes do teste.O código que estava sendo utilizado para o login, seguia essa linhagem:<br />
<br />
<b>login.php</b> <br />
<pre class="brush: xml;"><form action="" method="post" name="form1">
<input name="txt_login" type="text" />
<input name="txt_senha" type="password" />
</form></pre><pre class="brush: php;"><?php
if(isset($_POST['txt_login'])) {
//Inicia a sessão
session_start();
$_SESSION['S_login'] = $_POST['txt_login'];
$_SESSION['S_senha'] = $_POST['txt_senha'];
//Abre o PopUp, uma página que está no próprio servidor
echo "<script>window.open('http://www.site.com/diretorio/popup.php',,’’);</script>";
}
?></pre><i>Nota: Este é só um exemplo para demonstrar onde foi o erro. Esta NÂO é a melhor forma de se fazer uma página de login.</i><br />
<br />
A solução para o problema é mais simples do que parece, embora tenha feito gastar um precioso tempo até descobrir.<br />
<br />
O erro foi chamar a janela popup passando a URL toda até ela. De alguma forma, isto causava o estranho comportamento dos navegadores nos diferentes computadores. Após arrumar a linha, passando o endereço até o arquivo com base no local do arquivo que o chamava, o problema foi solucionado: <br />
<pre class="brush: php;">echo "<script>window.open(‘./diretorio/popup.php',,’’);</script>";</pre>Até a próxima :-)</div><br />
<div style="height: 120px; overflow: hidden; width: 468px;"><div style="overflow: hidden;"><script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script> <script language="javascript">
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "10749016";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "264909";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "2";
buscapeads_categorias = "6424";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
</script> <script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script></div></div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-48360183740306449852010-05-09T23:13:00.003-03:002010-05-12T10:52:30.208-03:00Como habilitar/desabilitar a exibição de erros no PHP em 4 passos<div style="text-align: justify;">Se você trabalha com desenvolvimento web ou cuida de servidores com suporte a PHP, é importante que saiba os passos para habilitar ou desabilitar a exibição de erros e warnings para os desenvolvedores.<br />
<br />
Os 4 passos para habilitar ou desabilitar a exibição de erros são os mesmos tanto no Windows como no Linux.<br />
<a name='more'></a><br />
<br />
<ol><li>Localize o arquivo de configuração do PHP: <b>php.ini</b>. <br />
Se estiver no Windows, o arquivo estará dentro da pasta do seu servidor web (EasyPHP, XAMPP, etc). Se estiver no Linux, o arquivo deve estar em <i>/etc/php.ini</i> (pode variar de acordo com a distribuição). Em todo caso, pode utilizar o pesquisar para localizar o arquivo.<br />
<br />
</li>
<li>Com o arquivo aberto localize a palavra <i>error_reporting</i>. Ela está seguida de uma palavra. Esta palavra significa o nível de exibição de erro que será mostrado. Caso a palavra seja <b>E_ALL</b>, será exibido todo tipo de erro, warnings e notices. Caso a palavra seja <b>E_WARNING</b>, será exibido somente warnings, e assim por diante. <br />
É possível montar combinações também, como "mostrar todos os erros menos <i>notices</i>". Neste caso, usariamos da seguinte forma: <b>E_ALL & ~E_NOTICE</b>. O "&" serve para acrescentar uma nova palavra a combinação, e o "~" é negação, ou seja, "notice não".<br />
<br />
</li>
<li>Logo abaixo, teremos a palavra <i>display_errors</i>. Esta é a palavra que controla se serão ou não exibidos os erros. Alterne entre On e Off se deseja habilitar ou desabilitar a exibição de erros, respectivamente.<br />
<br />
</li>
<li>Salve o arquivo e reinincie o seu web server.<br />
<br />
</li>
</ol><br />
Até a próxima!</div><br />
<br />
<div style="height: 120px; overflow: hidden; width: 468px;"><div style="overflow: hidden;"><script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script> <script language="javascript">
<!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9878754";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "236342";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "2922,2376,6973,3482,2918,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//-->
</script> <script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script></div></div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com4tag:blogger.com,1999:blog-3971875742777001827.post-87688056661691547382010-04-13T11:03:00.003-03:002010-05-12T12:01:59.547-03:00Trabalhando com arquivos de texto em PHP<div style="text-align: justify;">Olá,</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Hoje falarei um pouco sobre como trabalhar com arquivos no PHP.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Para trabalhar com arquivos, precisamos primeiramente abrir um arquivo ou então criá-lo (caso ainda não exista). Para abrir um arquivo, utilizamos o comando <b>fopen()</b>, seguido da letra que representa a opção do modo de abertura (leitura, escrita, leitura e escrita, etc).</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">A seguir, uma tabela com as opções do modo de abertura de arquivo:</div><div style="text-align: justify;"><br />
<a name='more'></a><br />
</div><ul><li style="text-align: justify;">r - Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo.</li>
<li style="text-align: justify;">r+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.</li>
<li style="text-align: justify;">w - Abre somente para escrita; coloca o ponteiro do arquivo no começo e apaga o conteúdo do arquivo (caso tenha). Se o arquivo não existir, tenta criá-lo. </li>
<li style="text-align: justify;">w+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no começo e apaga o conteúdo do arquivo (caso tenha). Se o arquivo não existir, tenta criá-lo. </li>
<li style="text-align: justify;">a - Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. </li>
<li style="text-align: justify;">a+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. </li>
<li style="text-align: justify;">x - Cria e abre o arquivo somente para escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a <span class="function"><b>fopen()</b></span> falhará, retornando <b><tt>FALSE</tt></b> e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo.</li>
<li style="text-align: justify;">x+ - Cria e abre o arquivo para leitura e escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a <span class="function"><b>fopen()</b></span> falhará, retornando <b><tt>FALSE</tt></b> e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo.</li>
</ul><span style="font-size: x-small;">Fonte: PHP.net - <a href="http://br2.php.net/manual/pt_BR/function.fopen.php" target="_blank">http://br2.php.net/manual/pt_BR/function.fopen.php</a></span><br />
<br />
<span style="font-size: large;"><b>COMO ESCREVER EM ARQUIVO</b></span><br />
<br />
A seguir, um exemplo comentado, de como escrever em arquivo.<br />
<pre class="brush: php"><?php
//String a ser escrita no arquivo
$string = "Escrevi no arquivo";
//Abre o arquivo no modo de escrita
//Cria o arquivo se não existir ou apaga o conteúdo do arquivo (caso tenha)
$handle = fopen("./arquivo.txt", "w");
//Tenta escrever uma string no arquivo
//Em caso de falha, imprime uma mensagem na tela
if(!fwrite($handle, $string))
{
echo "Não foi possível escrever no arquivo!";
}
//Fecha o arquivo
fclose($handle);
?>
</pre><div style="text-align: justify;">No exemplo acima, a variável <i>$handler</i> recebe o link de conexão para o arquivo aberto com o comando <b>fopen()</b>. O comando <b>fwrite() </b>é o responsável por fazer a escrita própriamente dita no arquivo, para isso, ele necessita de dois parâmetros: o link do arquivo aberto (<i>$handler</i>), e o texto a ser escrito.</div><br />
<span style="font-size: large;"><b>COMO LER UM ARQUIVO</b></span><br />
<br />
A seguir, um exemplo comentado, de como ler um arquivo.<br />
<pre class="brush: php"><?php
//Abre o arquivo no modo de leitura
$handle = fopen("./arquivo.txt", "r");
//Inicializa a variável que armazenará o conteúdo
$read = '';
//Enquanto não for final de arquivo
while (!feof($handle)) {
//Lê uma linha de um ponteiro no arquivo e armazena (concatenando) na variável $read
$read .= fgets($handle);
//Imprime na tela o que foi lido do arquivo
echo $read."<br />";
}
//Fecha o arquivo
fclose($handle);
?></pre><div style="text-align: justify;">O código acima faz basicamente o mesmo que o código de escrita, porém, com algumas pequenas diferenças, como abrir o arquivo que será lido no modo de leitura (parâmetro 'r'), e fazendo um laço até o final do arquivo <b>(feof())</b> para ir lendo linha à linha o conteúdo do arquivo.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">O comando fgets aceita um parâmetro adicional opcional, que é o tamanho em bytes a ser lido no arquivo, de modo que poderíamos utilzar o comando desta forma, por exemplo:</div><pre class="brush: php">$read .= fgets($handle, 4096);</pre><div style="text-align: justify;">Em alguns casos, pode ser interessante determinar o tamanho em bytes a ser lido do arquivo, portanto, é sempre bom saber que existe a opção.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Existem várias outras formas de escrever e ler arquivos, e pretendo ir atualizando esta seção gradativamente.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Quando ocorrer alguma atualização, notificarei na página principal do blog.</div><br />
Até a próxima!<br />
:-)<br />
<br />
<div style="height: 120px; overflow: hidden; width: 468px;"><div style="overflow: hidden;"><br />
<script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script><br />
<script language="javascript">
<!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9878754";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "236342";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "2922,2376,6973,3482,2918,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//-->
</script><br />
<script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script></div><br />
<a href="http://www.lomadee.com/"><span style="font-size: xx-small;"></span></a><br />
<div align="right"><a href="http://www.lomadee.com/"><span style="font-size: xx-small;"><br />
</span></a><br />
<a href="http://www.lomadee.com/"><span style="font-size: xx-small;">Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina</span></a></div><a href="http://www.lomadee.com/"><span style="font-size: xx-small;"></span></a></div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-90375225603982626552009-12-20T02:07:00.004-02:002009-12-20T02:14:57.660-02:00PHP: include() x require()Olá pessoal,<br />
<br />
Hoje estou aqui para falar de duas funções existentes no PHP: include() e require().<br />
<br />
Muitos jovens programadores podem se deparar com essas duas funções ao análisar arquivos de código de outros programadores, e ai começam as dúvidas: o que isso faz? pra que isso serve?<br />
<br />
Na verdade essas duas funções tem o mesmo princípio: tentam incluir um arquivo requisitado, no arquivo em que é executada.<br />
<br />
Ex.:<br />
<pre class="brush: php"><?php
//inclui o arquivo prog1.php no arquivo em que foi executada
include("../prog1.php");
//inclui o arquivo config.php no arquivo em que foi executada
require("config.php");
?>
</pre><i>Nota: Incluir um arquivo em outro significa que, todo o conteúdo do arquivo incluido está como se fizesse parte do arquivo que requisitou a inclusão.</i><br />
<br />
A diferença entre as funções fica por parte do "e se eu não conseguir incluir o arquivo?", ou seja, caso dê algum problema (como o programador colocar o caminho errado até o arquivo) e o arquivo não puder ser incluído.<br />
<br />
Quando acontece esse tipo de problema, a função include() vai emitir um <b>warning</b> no programa, enquanto que o require() emite um <b>fatal error</b>, em outras palavras, se o arquivo não for encontrado dentro da função include(), esta função somente vai emitir um aviso e deixar que continue a execução do resto do programa, enquanto que o require() vai emitir um erro e o programa será interrompido até que o arquivo seja encontrado.<br />
<br />
<b>Informações Adicionais</b><br />
<br />
Temos ainda o include_once() e o require_once(). A difença do "once" se dá pelo seguinte fato: a função só vai incluir o arquivo, caso o mesmo ainda não tenha sido incluido. <br />
<br />
Até a próxima :-)<br />
<br />
<div style="height: 120px; overflow: hidden; width: 468px;"><br />
<div style="overflow: hidden;"><br />
<script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script><br />
<script language="javascript">
<!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9878754";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "236342";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "2922,2376,6973,3482,2918,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//-->
</script><br />
<script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script><br />
</div><br />
<a href="http://www.lomadee.com/"><span style="font-size: xx-small;"></span></a><br />
<div align="right"><a href="http://www.lomadee.com/"><span style="font-size: xx-small;"><br />
</span></a><br />
<a href="http://www.lomadee.com/"><span style="font-size: xx-small;">Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina</span></a><br />
</div><a href="http://www.lomadee.com/"><span style="font-size: xx-small;"></span></a><br />
</div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-45029563936386887842009-12-10T12:18:00.003-02:002014-05-25T01:11:52.491-03:00Como fazer um IF de uma linha no PHPÉ comum escrevermos 4 ou 6 linhas de código para um simples IF que poderia ser colocado em apenas uma linha. Mostrarei aqui essa dica de como fazer um IF de uma linha na linguagem PHP, mas também pode ser aplicada em outras linguagens como o Java.<br />
<br />
Abaixo temos um exemplo clássico de um IF utilizando 4 linhas de código. Neste exemplo atribuimos o valor <b style="color: blue;">true </b><span style="color: blue;"><span style="color: black;">a uma variável, caso a condição testada seja verdadeira, e o valor</span> <b style="color: red;">false </b><span style="color: red;"><span style="color: black;">caso o teste dê negativo.</span></span></span><br />
<pre class="brush: php"><?php
if("a" == "b")
$result = true;
else
$result = false;
?>
</pre>
O mesmo IF acima poderia ser reescrito da seguinte forma:<br />
<pre class="brush: php"><?php
$result = ("a" == "b") ? true : false;
?>
</pre>
O sinal de <b>?</b> faz a função do "então" e o <b>: </b>faz a função do "senão".<br />
Até a próxima.<br />Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-69626061693351052172009-12-05T11:07:00.014-02:002009-12-10T11:42:48.061-02:00Como utilizar Sessão (Session) em PHPUtilizamos session quando queremos manter o estado de uma variável ao longo do programa. Esta variável permanecerá com o valor atribuído até que o navegador (browser) seja fechado.<br />
<br />
Uma utilização interessante de session, é guardar o ID de um usuário que efetua login em um sistema. Com o ID em sessão, o programador pode utilizá-lo para permitir que o usuário saia e volte ao site mais tarde, e ainda permaneça como se estivesse logado <i>(lembrando que para isso, o usuário não pode fechar o browser).</i><br />
<br />
Para iniciar uma sessão utilizamos o comando:<br />
<pre class="brush: php">session_start();
</pre>Também podemos dar um nome para essa sessão, assim, poderemos ter várias sessões no site com propósitos diferentes.<br />
<pre class="brush: php">session_start("sessao1");
</pre>Para atribuir um valor a uma variável de sessão, fazemos da seguinte forma:<br />
<pre class="brush: php">$_SESSION["nome_da_variavel"] = "valor";
</pre>Para desregistrar uma variável, fazemos:<br />
<pre class="brush: php">unset($_SESSION["nome_da_variavel"]);
</pre>Para destruir uma sessão, utilizamos:<br />
<pre class="brush: php">session_destroy();
</pre>ou para o caso de uma sessão nomeada:<br />
<pre class="brush: php">session_destroy("sessao1");
</pre>Para poder utilizar as variáveis de sessão nas páginas restritas do site ou para qualquer outra página que deseje utilizar, você deve sempre iniciar a sessão com session_start() antes de utilizar a variável de sessão, senão, a variável de sessão não será reconhecida e não retornará valor algum.<br />
<i><br />
</i><br />
<i>:-)<br />
</i><br />
<br />
<div style="height: 120px; overflow: hidden; width: 468px;"><div style="overflow: hidden;"><script language="javascript" src="http://ivitrine.buscape.com/bpadsvar.js">
</script><br />
<script language="javascript">
<!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9877549";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "235701";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "9634,6946,6391,6398,7074,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//-->
</script><br />
<script language="javascript" src="http://ivitrine.buscape.com/bpads.js">
</script><br />
</div></div>Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-29938335563733790552009-12-01T22:49:00.027-02:002009-12-10T11:11:54.167-02:00Concatenando Strings no PHPEssa é uma postagem dedicada a programadores que estão iniciando na linguagem, mas não deixa de ser um importante conceito relacionado a linguagem PHP.<br />
<br />
Quem está acostumado a programar em outras linguagens, sabe que geralmente concatenamos uma string utilizando o operador '+', conforme exemplo:<br />
<pre class="brush: js">string variavel;
variavel = "Variavel"+" numero 1";</pre>No entanto, no PHP o operador que permite a concatenação é o '.' (ponto), conforme segue.<br />
<br />
Ex.1:<br />
<pre class="brush: php"><?php
$string = "variavel"." numero 1";
echo $string; //variavel numero 1
?></pre>Ex.2:<br />
<pre class="brush: php"><?php
$var1 = " numero 1";
$string = "variavel".$var1;
echo $string; //variavel numero 1
?></pre>Fácil não?!<br />
Até a próxima!<br />
<!-- Anúncio Dinâmico LOMADEE - INÍCIO --><br />
<div style="width:468px; height:120px; overflow:hidden;"><div style="overflow:hidden;"><script language="javascript"
src="http://ivitrine.buscape.com/bpadsvar.js"></script><br />
<script language="javascript" ><!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9877549";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "235701";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "9634,6946,6391,6398,7074,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//--></script><br />
<script language="javascript"
src="http://ivitrine.buscape.com/bpads.js"></script></div></div><!-- Anúncio Dinâmico LOMADEE - FIM -->Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com0tag:blogger.com,1999:blog-3971875742777001827.post-54648402964138669802009-11-27T08:32:00.015-02:002009-12-10T11:13:08.700-02:00eval - Escapando uma stringOlá pessoal,<br />
<br />
Vou colocar aqui uma dica relacionada a uma situação que me ocorreu.<br />
Estava eu desenvolvendo um programa em PHP que calculasse o método de Newton-Raphson de acordo com a função passada pelo usuário.<br />
O programa requeria os seguintes dados:<br />
- Uma função no formato <b>2*x+pow(x,3) </b>(por exemplo)<b>;</b><br />
- O valor de <b>x</b> para esta função;<br />
- Outros valores não pertinentes a este artigo.<br />
<br />
O meu problema era: como vou colocar o valor de <b>x</b> na função, de modo que a linguagem me retorne o resultado da soma ao invés de uma string?<br />
<br />
Para resolver este problema é muito simples, no entanto, ralei um pouco para descobrir por não saber o nome do comando.<br />
<br />
A solução é: <b>eval()</b><br />
<br />
Caso você tente substituir os valores de x na função, pelo valor passado pelo usuário, sem usar eval, o cálculo não será feito, e sim, será retornado uma string.<br />
Vamos a um exemplo prático.<br />
<br />
<pre class="brush: php"><?php
// $x é o valor a ser substituído na função. Vamos supor que $x = 3
function equacao($x) {
$f = "";
$new_f = "2*x+pow(x,3)";
// Procura por X, e quando encontra, substitui pelo valor $x na função,
// no caso deste exemplo, $x vale 3
for($i = 0; $i < strlen($new_f); $i++) {
if($new_f{$i} == "x" || $new_f{$i} == "X") {
$f = substr($new_f, 0, $i);
$f .= $x;
$f .= substr($new_f, $i+1);
$new_f = $f;
}
}
// Depois de substituido, a função está assim: 2*$x+pow($x,3)
// A idéia é que seja calculado, 2*3+pow(3,3) = 33
eval("\$f = " . $f . ";");
// Retorna o resultado do calculo.
// Sem a utilização de eval, seria retornado: 2*$x+pow($x,3)
return $f;
}
?></pre><br />
É isso aí pessoal, espero que seja útil a alguém isso.<br />
:-)<br />
<!-- Anúncio Dinâmico LOMADEE - INÍCIO --><br />
<div style="width:468px; height:120px; overflow:hidden;"><div style="overflow:hidden;"><script language="javascript"
src="http://ivitrine.buscape.com/bpadsvar.js"></script><br />
<script language="javascript" ><!--
buscapeads_afiliado = "44554278";
buscapeads_tipo_cliente = "2";
buscapeads_vitrine_local = "BR";
buscapeads_site_origem = "9877549";
buscapeads_vitrine_vers = "1.23";
buscapeads_formato = "468x60";
buscapeads_id_keyword = "235701";
buscapeads_txt_keyword = "";
buscapeads_tipo_canal = "41";
buscapeads_categorias = "9634,6946,6391,6398,7074,103";
buscapeads_excluir = "3";
buscapeads_idioma = "pt";
buscapeads_pais = "BR";
buscapeads_area = "";
buscapeads_estado = "";
buscapeads_cidade = "";
buscapeads_cep = "12328220";
//--></script><br />
<script language="javascript"
src="http://ivitrine.buscape.com/bpads.js"></script></div></div><!-- Anúncio Dinâmico LOMADEE - FIM -->Guilhermehttp://www.blogger.com/profile/16626756441702988734noreply@blogger.com1