PHP
Articles related to Software Development in PHP
OpenSSL loading openssl.cnf
Feb 8th
since the openssl.cnf path is hardcoded in binaries. to alter it on windows set environmental variable (as written):
OPENSSLDIR=C:\PATH\TO\OpenSSL\bin OPENSSL_CONF=C:\PATH\TO\OpenSSL\bin\openssl.cnf
OPENSSL_CONF doesn’t work without OPENSSLDIR even if it is set.
settings these options will allow you to use your custom configuration files when creating certificates.
batch file i use to create certificate
GenCERT.bat [save this file to OpenSSL bin directory]
@echo off md %1 openssl genrsa -des3 -out %1/%1.key 1024 openssl req -new -key %1/%1.key -out %1/%1.csr copy %1/%1.key %1/%1.key.org openssl rsa -in %1/%1.key.org -out %1/%1.key openssl x509 -req -days 365 -in %1/%1.csr -signkey %1/%1.key -out %1/%1.crt openssl x509 -outform der -in %1/%1.crt -out %1/%1.der
Sample
:: Start command line and cd to C:\PATH\TO\OpenSSL\bin :: :: usage: GenCERT.bat domain.com :: GenCERT.bat teknober.com
Batch file I use to create SSL certificate for Web etc server
GenPEM.bat [save this file to OpenSSL bin directory]
@echo off mkdir %1 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout %1/%1.pem -out %1/%1.pem -config "%1/%1.cfg"
Sample
:: Start command line and cd to C:\PATH\TO\OpenSSL\bin :: :: usage: GenPEM.bat domain.com :: GenPEM.bat teknober.com
for sample ssl configuration file see the bottom of the page: http://www.openssl.org/docs/apps/ca.html
PDO PDOStatement with Select Find, Skip, Take
Jan 13th
Currently working on extending PDOStatement at C level which will allow to use select, join, where, order, group, find, skip, take commands in chain.
the usage will be like:
/* Extended PDO */
$pdo = new PDO(/* dsn */);
$pdo->select('table_x')->find(array('id' => 1));
/* using alias */
$pdo->select('table_x as a')->find(array('a.id = ?'))->bind(array(1));
$pdo->select('table_x', array('table_x.id', 'table_y.name', 'table_y.description')->join_left('table_y', array('table_x.id = table_y.id'))->findAll();
/*
--output type (single)
-- find() => PDORow
-- findToCSV() => comma seperated values
-- findToTDV() => tab delimeted values
-- findToJSON() => json string
-- findToXML() => xml string
--output types (multiple)
-- findAll() => array
-- findAllToCSV() => comma separated values
-- findAllToTDV() => tab delimited values
-- findAllToJSON() => json string
-- findAllToXML() => xml string
*/
$pdo->select('table_x', array('table_x.id', 'table_y.name', 'table_y.description')->join_left('table_y', array('table_x.id = table_y.id'))->findAllToCSV();
$pdo->select('table_x', array('table_x.id', 'table_y.name', 'table_y.description')->join_left('table_y', array('table_x.id = table_y.id'))->findAllToTDV();
$pdo->select('table_x', array('table_x.id', 'table_y.name', 'table_y.description')->join_left('table_y', array('table_x.id = table_y.id'))->findAllToJSON();
$pdo->select('table_x', array('table_x.id', 'table_y.name', 'table_y.description')->join_left('table_y', array('table_x.id = table_y.id'))->findAllToXML();
If you have any suggestions on adding more commands please let me know
PHP PDO using Transactions with TModel::GenerateStatement functions
Sep 9th
Only have an example to show using the TModel::GenerateInsertStatement, TModel::GenerateUpdateStatement, TModel::GenerateReplaceStatement
In database driver settings for mysql innodb engine, mariadb aria engine: SET AUTOCOMMIT=0;
sample:
public function panel_set_category_enabled($id_category) {
/* start a transaction */
$this->model->beginTransaction();
/* set: populate related columns */
$columns = array();
$columns[] = new TModelColumn("enabled", 1, PDO::PARAM_INT);
$columns[] = new TModelColumn("date_update", TDate::getDATE_MYSQL(time()), PDO::PARAM_STR);
/* execute and return result */
$result = TModel::generateUpdateSet("tc_category", $columns, new TModelWhere("id", $id_category, PDO::PARAM_INT, null, "="), true);
if ($result) {
$this->model->commit();
return $result;
} else {
$this->model->rollBack();
return $result;
}
}
related articles on this blog:
PHP PDO Generate Insert Statement:
http://blog.teknober.com/2011/03/06/php-pdo-generate-insert-statement/
PHP PDO Generate Update Statement:
http://blog.teknober.com/2011/03/06/php-pdo-generate-update-statement/
PHP PDO Generate Replace Statement:
http://blog.teknober.com/2011/04/13/php-pdo-generate-replace-statement/
PHP TNullClass using IteratorAggregate
Sep 8th
This class implemented to return null especially when the variable does not exists to avoid exceptions
Sample:
if (TRequest::inPost(array("category", "product")) == true) {
$post_category = $this->validate_category(TRequest::fromPostObject("category"));
$post_product = $this->validate_product(TRequest::fromPostObject("product"));
/* your code here to */
//print $post_category->name;
}
to use this with GET/POST/COOKIE/SERVER etc, you need to transform the array into TNullClass object using the following function
/**
* Transforms Array to stdClass
* @param mixed $object
* @return stdClass
*/
function array_to_nullclass($object) {
$result = new TNullClass();
if (is_array($object) === true) {
foreach ($object as $key => $value) {
$result->{$key} = $value;
}
}
return $result;
}
TNullClass.php
<?php
/* ----------------------------------------------------------------------------
* Teknober Web Services - All rights reserved
* ----------------------------------------------------------------------------
* File Name : TNullClass.php
* Section : TNullClass
* Dependicies :
* Description : Implements TNullClass class
* : Special class implemented to return null when the variable
* does not exists to avoid exceptions
* ----------------------------------------------------------------------------
* Author : Fatih Piristine
* Company : Teknober Web Services
* E-mail : v-fpiris@teknober.com
* Web : http://www.teknober.com
* ----------------------------------------------------------------------------
* $LastChangedBy$
* $LastChangedDate$
* $LastChangedRevision$
* $HeadURL$
* -------------------------------------------------------------------------- */
/**
* TNullClass Class
*/
class TNullClass implements IteratorAggregate {
public function getIterator () {
return new ArrayIterator($this);
}
public function __get($index) {
if ($this->exists($index) == false) {
$this->{$index} = null;
}
return $this->{$index};
}
public function __set($index, $value) {
$this->{$index} = $value;
}
public function exists($index) {
return isset($this->{$index});
}
public function extend(TNullClass $object) {
foreach ($object as $key => $value) {
$this->{$key} = $value;
}
return $this;
}
public function isnull($index) {
return is_null($this->{$index});
}
public function validate($index, $pattern) {
return preg_match($pattern, $this->{$index});
}
public function length($index) {
return strlen($this->{$index});
}
}
PHP Validating HTML Class using regular expression
Sep 7th
Validating HTML Class on the fly to pass W3C validation to get valid html.
W3C format for HTML Classes: abc or a12 or a_1 [first character is always required to be letter, no commas, semi-colons are allowed]
if (preg_match("/(^[a-z]{1}([a-z0-9_-\s])+)$/", $html_class)) {
$tag->setAttribute("class", $html_class);
}
PHP Validate HTML ID using regular expression
Sep 6th
Validating HTML ID on the fly to pass W3C validation to get valid html.
W3C format for HTML IDs: abc or a12 or a_1 [first character is always required to be letter, no spaces, commas, semi-colons are allowed]
if (preg_match("/(^[a-z]{1}[a-z0-9_]+)$/", $html_id)) {
$tag->setAttribute("id", $html_id);
}
PHP PDO Using reserved words as column names
Jun 25th
Using reserved words as columns names causes problems on insert/update/replace while there is no problem with select.
/* this will not work and will throw no exception */
$result = $model->prepare("update mytable set default = 1");
$result->execute();
/* this will work */
$result = $model->prepare("update mytable set `default` = 1");
$result->execute();
PHP PDO Statement Object with CSV and JSON
Jun 25th
Implements generic object for PHP PDO
sample:
class TableModel {
private $model = null;
public function __construct($model) {
$this->model = &$model;
}
public function get_table($id = null) {
$result = $this->registry->model->prepare("select a.* from table as a where a.id = ?");
$result->bindParam(1, $id, PDO::PARAM_INT);
$result->setFetchMode(PDO::FETCH_CLASS, 'TModelRow');
$result->execute();
return $result->fetchAll();
}
}
$model = new PDO(...);
$table_model = new TableModel($model);
$rows = $table_model->get_table(93);
foreach ($rows as $row) {
print_r($row->toArray());
echo $row; // is equivalent to $row->toJSON();
echo $row->toJSON();
echo $row->toTSV();
echo $row->toCSV(); // triggers error because not implemented!
}
PHP Twitter API Monkey
Jun 15th
wrote this Twitter API wrapper referring to https://github.com/abraham/twitteroauth. where it was making endless redirection so on.
see twitter api documentation to use them with get, post, delete etc
Flow:
1- click on login link with temporary credentials
2- login at twitter
3- goes back to your website
4- logged in
download OAuth.php: http://oauth.net/
SAMPLE
require_once ('TTwitter.php');
session_start();
$twitter = new TTwitter('key', 'secret', 'url');
//print_r($twitter->get("users/show", array("user_id" => $twitter->getUserID())));
print_r($twitter->post("statuses/update", array("status" => "Teknober Blog")));
?>
<a href="<?php print $twitter->getURL_Login(); ?>">login</a>
<a href="<?php print $twitter->getURL_Logout(); ?>">logout</a>
PHP PDO Call MySQL Stored Function
Jun 6th
Calling a MySQL Stored Function from PHP PDO Driver. [ this is not for stored procedure ]
$model = new PDO(/* enter your parameters */);
function getID_ByISO($iso = null) {
$result = $model->prepare("select getID_ByISO(?) as id");
$result->bindParam(1, $iso, PDO::PARAM_STR, 2);
$result->setFetchMode(PDO::FETCH_CLASS, 'stdClass');
$result->execute();
return $result->fetch();
}
PHP function will return stdClass Object where the result will be wrapped into.
$obj = getID_ByISO('hu');
result:
print($obj->id); /* 3 is the id for hu in my database */
in sql statement, “select myfunc(?) as id”, result is named as id to have more generic output name


LinkedIn
Twitter
Skype