Hiển thị các bài đăng có nhãn codeigniter. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn codeigniter. Hiển thị tất cả bài đăng

Chủ Nhật, 10 tháng 1, 2010

gzipping jQuery without mod_deflate

http://groups.google.com/group/jquery-en/browse_thread/thread/3d54b9c96f97d324/69b3972335566b69?pli=1

Unfortunately, i don't have admin rights on my server so i cannot
activate mod_gzip/mod_deflate to gzip the stuff on the fly. But here's
an easy workaround...

Create a PHP file called jquery.php:

< ?php ob_start( 'ob_gzhandler' ); echo join('',file('jquery-1.1.3.1.pack.js')); ob_end_flush(); ?>


Now, in the main site layout template i have:

<"scripts type='text/javascript' src='/include/js/jquery.php'>

Thứ Ba, 22 tháng 12, 2009

plugin lấy giá vàng từ Tuổi trẻ Online

< ?php
/*
CREATE TABLE IF NOT EXISTS `mk_giavang` (
`code` char(5) NOT NULL,
`name` char(25) NOT NULL,
`buy` char(10) NOT NULL,
`transfer` char(10) NOT NULL,
`sell` char(10) NOT NULL,
`date_create` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
*/

function giavang() {

$ci = &get_instance();
$time = time();
$ci->load->database();

$row = $ci->db->limit(1)->get('giavang')->row_array();
if(!$row || $row['date_create']<($time-3600)) { if($data = get_giavang()) { $ci->db->empty_table('giavang');

foreach($data as $row)
{
$ci->db->insert('giavang', $row);
}
}
else if($row){
return $ci->db->get('giavang')->result_array();
}
}

return $ci->db->get('giavang')->result_array();

}

function get_giavang()
{
$data = array();
$time = time();

if(!$content = file_get_contents('http://www3.tuoitre.com.vn/transweb/giavang.htm'))
return $data;

$content = substr($content, strpos($content, ''));
$text = trim(substr($content, 0, strpos($content, '
')+8));

$xml = simplexml_load_string($text);
foreach($xml as $a=>$b){
$row['code'] = trim((string)$b->td[0]);
$row['buy'] = trim((string)$b->td[1]);
$row['sell'] = trim((string)$b->td[2]);
$row['date_create'] = $time;
$data[] = $row;
}

unset($data[0]);

return $data;
}

Thứ Ba, 14 tháng 4, 2009

Large File Downloads Issue Solved

//From: http://codeigniter.com/forums/viewthread/109798/

//CONTROLLER
// DOWNLOAD FILE
function download() {
// LOAD FILE SIZE PLUGIN
$this->load->plugin('filesize');
// GRAB FILE NAME
$file_name = $this->uri->segment(3);
// SET DIRECT PATH TO FILE
$file_path = "securefiles/".$file_namee;
// GRAB THE FILE SIZE
$file_size = get_filesize($file_path);
// CHOOSE WHICH DOWNLOAD METHOD BASED FILE SIZE
if ($file_size >= 45) {
// BEGIN DOWNLOAD
force_download($file_name, $file_path, 'large');
} else {
// READ FILE CONTENTS
$file_data = file_get_contents("securefiles/".$file_name);
// BEGIN DOWNLOAD
force_download($file_name, $file_data, 'small');
}
}

//DOWNLOAD HELPER PORTION MODIFIED
//Added Parameter: $type - Line 44
function force_download($filename = '', $data = '', $type = '')
//Added IF / ELSE statement - Line 75
// Generate the server headers
if ($type == 'small')
{
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
header("Content-Length: ".strlen($data));
}
else
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
header("Content-Length: ".strlen($data));
}
} else {
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
//header("Content-Length: ".strlen($data));
readfile($data);
}
else
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
//header("Content-Length: ".strlen($data));
readfile($data);
}
}
?>

A Base Model Template

class MY_Model extends Model
{
var $use_dbconfig = 'default';
var
$id = null;
var
$data = array();
var
$table;
var
$primary_key = 'id';
var
$fields = array();
var
$__insert_id = null;
var
$__num_rows = null;
var
$__affected_rows = null;
var
$return_array = TRUE;
var
$debug = FALSE;
var
$queries = array();
var
$_parent_name = '';

function
MY_Model()
{
parent
::Model();

$this->_assign_libraries( (method_exists($this, '__get') OR method_exists($this, '__set')) ? FALSE : TRUE );

// We don't want to assign the model object to itself when using the
// assign_libraries function below so we'll grab the name of the model parent
$this->_parent_name = ucfirst(get_class($this));

log_message('debug', "Model Class Initialized");
}

/**
* Assign Libraries
*
* Creates local references to all currently instantiated objects
* so that any syntax that can be legally used in a controller
* can be used within models.
*
* @access private
*/
function _assign_libraries($use_reference = TRUE)
{
$CI
=& get_instance();
foreach (
array_keys(get_object_vars($CI)) as $key)
{
if ( ! isset($this->$key) AND $key != $this->_parent_name)
{
// In some cases using references can cause
// problems so we'll conditionally use them
if ($use_reference == TRUE)
{
// Needed to prevent reference errors with some configurations
$this->$key = '';
$this->$key =& $CI->$key;
}
else
{
$this
->$key = $CI->$key;
}
}
}
}

/**
* Load the associated database table.
*
* @author md emran hasan
* @access public
*/

function load_table($table, $config = 'default')
{
if ($this->debug) log_message('debug', "Loading model table: $table");

$this->table = $table;
$this->use_dbconfig = $config;

$this->load->database($config);
$this->fields = $this->db->list_fields($table);

if (
$this->debug)
{
log_message
('debug', "Successfull Loaded model table: $table");
}
}

/**
* Returns a resultset array with specified fields from database matching given conditions.
*
* @author md emran hasan
* @return query result either in array or in object based on model config
* @access public
*/

function find_all($conditions = NULL, $fields = '*', $order = NULL, $start = 0, $limit = NULL)
{
if ($conditions != NULL)
{
$this
->db->where($conditions);
}

if ($fields != NULL)
{
$this
->db->select($fields, FALSE);
}

if ($order != NULL)
{
$this
->db->orderby($order);
}

if ($limit != NULL)
{
$this
->db->limit($limit, $start);
}

$query
= $this->db->get($this->table);
$this->__num_rows = $query->num_rows();

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

return ($this->return_array) ? $query->result_array() : $query->result();
}

/**
* Return a single row as a resultset array with specified fields from database matching given conditions.
*
* @author md emran hasan
* @return single row either in array or in object based on model config
* @access public
*/

function find($conditions = NULL, $fields = '*', $order = 'id ASC')
{
$data
= $this->find_all($conditions, $fields, $order, 0, 1);

if (
$data)
{
return $data[0];
}
else
{
return false;
}
}

/**
* Returns contents of a field in a query matching given conditions.
*
* @author md emran hasan
* @return string the value of the field specified of the first row
* @access public
*/

function field($conditions = null, $name, $fields = '*', $order = 'id ASC')
{
$data
= $this->find_all($conditions, $fields, $order, 0, 1);

if (
$data)
{
$row
= $data[0];

if (isset(
$row[$name]))
{
return $row[$name];
}
else
{
return false;
}
}
else
{
return false;
}

}

/**
* Returns number of rows matching given SQL condition.
*
* @author md emran hasan
* @return integer the number of records returned by the condition
* @access public
*/

function find_count($conditions = null)
{
$data
= $this->find_all($conditions, 'COUNT(*) AS count', null, 0, 1);

if (
$data)
{
return $data[0]['count'];
}
else
{
return false;
}
}

/**
* Returns a key value pair array from database matching given conditions.
*
* Example use: generateList(null, '', 0. 10, 'id', 'username');
* Returns: array('10' => 'emran', '11' => 'hasan')
*
* @author md emran hasan
* @return array a list of key val ue pairs given criteria
* @access public
*/

function generate_list($conditions = null, $order = 'id ASC', $start = 0, $limit = NULL, $key = null, $value = null, $first_key = '-1', $first_value = 'Inget valt')
{
$data
= $this->find_all($conditions, "$key, $value", $order, $start, $limit);

if (
$data)
{

if($first_key != NULL)
{
$keys[]
= $first_key;
$vals[] = $first_value;
}

foreach ($data as $row)
{
$keys[]
= ($this->return_array) ? $row[$key] : $row->$key;
$vals[] = ($this->return_array) ? $row[$value] : $row->$value;
}

if (!empty($keys) && !empty($vals))
{
$return
= array_combine($keys, $vals);
return
$return;
}
}
else
{
return false;
}
}

/**
* Returns an array of the values of a specific column from database matching given conditions.
*
* Example use: generateSingleArray(null, 'name');
*
* @author md emran hasan
* @return array a list of key value pairs given criteria
* @access public
*/

function generate_single_array($conditions = null, $field = null, $order = 'id ASC', $start = 0, $limit = NULL)
{
$data
= $this->find_all($conditions, "$field", $order, $start, $limit);

if (
$data)
{
foreach ($data as $row)
{
$arr[]
= ($this->return_array) ? $row[$field] : $row->$field;
}

return $arr;
}
else
{
return false;
}
}

/**
* Initializes the model for writing a new record.
*
* @author md emran hasan
* @return boolean True
* @access public
*/

function create()
{
$this
->id = false;
unset (
$this->data);

$this->data = array();
return
true;
}

/**
* Returns a list of fields from the database and saves in the model
*
* @author md emran hasan
* @return array Array of database fields
* @access public
*/

function read($id = null, $fields = null)
{
if ($id != null)
{
$this
->id = $id;
}

$id
= $this->id;

if (
$this->id !== null && $this->id !== false)
{
$this
->data = $this->find($this->primary_key . ' = ' . $id, $fields);
return
$this->data;
}
else
{
return false;
}
}

/**
* Inserts a new record in the database.
*
* @author md emran hasan
* @return boolean success
* @access public
*/

function insert($data = null)
{
if ($data == null)
{
return FALSE;
}

$this
->data = $data;
$this->data['create_date'] = date("Y-m-d H:i:s");

foreach (
$this->data as $key => $value)
{
if (array_search($key, $this->fields) === FALSE)
{
unset($this->data[$key]);
}
}

$this
->db->insert($this->table, $this->data);

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

$this
->__insert_id = $this->db->insert_id();
return
$this->__insert_id;
}

/**
* Saves model data to the database.
*
* @author md emran hasan
* @return boolean success
* @access public
*/

function save($data = null, $id = null, $xss = TRUE)
{
if ($data)
{
$this
->data = $data;
}

foreach ($this->data as $key => $value)
{

if (array_search($key, $this->fields) === FALSE)
{
unset($this->data[$key]);
}
}

if($xss)
{
$this
->data = $this->input->xss_clean($this->data);
}

if ($id != null)
{
$this
->id = $id;
}

$id
= $this->id;

if (
$this->id !== null && $this->id !== false)
{
$this
->db->where($this->primary_key, $id);
$this->db->update($this->table, $this->data);

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

$this
->__affected_rows = $this->db->affected_rows();
return
$this->id;
}
else
{
$this
->db->insert($this->table, $this->data);

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

$this
->__insert_id = $this->db->insert_id();
return
$this->__insert_id;
}
}

/**
* Removes record for given id. If no id is given, the current id is used. Returns true on success.
*
* @author md emran hasan
* @return boolean True on success
* @access public
*/

function remove($id = null)
{
if ($id != null)
{
$this
->id = $id;
}

$id
= $this->id;

if (
$this->id !== null && $this->id !== false)
{
if ($this->db->delete($this->table, array($this->primary_key => $id)))
{
$this
->id = null;
$this->data = array();

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

return true;
}
else
{
return false;
}
}
else
{
return false;
}
}

/**
* Returns a resultset for given SQL statement. Generic SQL queries should be made with this method.
*
* @author md emran hasan
* @return array Resultset
* @access public
*/

function query($sql)
{
$ret
= $this->db->query($sql);

if (
$this->debug)
{
$this
->queries[] = $this->db->last_query();
}

return $ret;
}

/**
* Returns the last query that was run (the query string, not the result).
*
* @author md emran hasan
* @return string SQL statement
* @access public
*/

function last_query()
{
return $this->db->last_query();
}

/**
* Returns the list of all queries peformed (if debug is TRUE)
*
* @author md emran hasan
* @return array list of SQL statements
* @access public
*/

function debug_queries()
{
$queries
= array_reverse($this->queries);
return
$queries;
}

/**
* This function simplifies the process of writing database inserts. It returns a correctly formatted SQL insert string.
*
* @author md emran hasan
* @return string SQL statement
* @access public
*/

function insert_string($data)
{
return $this->db->insert_string($this->table, $data);
}

/**
* Returns the current record's ID.
*
* @author md emran hasan
* @return integer The ID of the current record
* @access public
*/

function get_id()
{
return $this->id;
}

/**
* Returns the ID of the last record this Model inserted.
*
* @author md emran hasan
* @return int
* @access public
*/

function get_insert_id()
{
return $this->__insert_id;
}

/**
* Returns the number of rows returned from the last query.
*
* @author md emran hasan
* @return int
* @access public
*/

function get_num_rows()
{
return $this->__num_rows;
}

/**
* Returns the number of rows affected by the last query
*
* @author md emran hasan
* @return int
* @access public
*/

function get_affected_rows()
{
return $this->__affected_rows;
}
}


mod rewrite

From: http://codeigniter.com/wiki/mod_rewrite/

This article explains how to take away “index.php” from your CI application URLs. However, it does NOT remove the need for Index.php, which is the CI front controller i.e. even though Index.php will not appear in the URL, it still needs to be present at the top level of your site (above the /system/ directory). To quote the User Guide,

You can easily remove this file by using a .htaccess file with some simple rules.

You need to perform the following steps to get this working:

1. Create a .htaccess file to configure the rewrite engine

2. Set $config[‘index_page’] to an empty string

3. Make sure your apache uses the mod_rewrite module

4. Make sure apache is configured to accept needed .htaccess directives

5. Restart apache and test

1. Create your .htaccess file

Create a new file named .htaccess and put it in your web directory

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase
/

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond
%{REQUEST_FILENAME} !-d
RewriteRule
^(.*)$ index.php?/$1 [L]
< /IfModule>

<
IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
< /IfModule>

The above configuration behaves as follows:

1. Checks to see if someone has entered a URL starting with “system”, all requests like this get routed to index.php, this is a security feature that removes the possibility of anyone directly accessing your system folder. You can use the same syntax to hide other folders inside your root if you want.

2. If the URL doesn’t start with “system”, the web server will check to see if there is a corresponding physical resource matching the URL, such as an image, script file, or directory.

3. If such a resource exists, that resource is returned by the webserver with no rewriting performed. If no such resource exists the url is rewritten to index.php (passed to codeigniter)

Notes for Windows users:
To create this file you must open Command Prompt and type:
copy con .htaccess [Enter]
[Press CTRL + Z]
A blank .htaccess file will be created. Now you can edit it using Notepad or your favorite text editor and copy the script above.

Note: Most Windows editors will assume that you are attempting to save an .htaccess file as a file with an extension and no filename. The Crimson Editor can be used to create and save .htaccess files and other files that have no filename.

Note: If your site is placed in subfolder specify the path in the “RewriteBase /subfolder/” line.

2. Set $config[‘index_page’] to an empty string

Open your

system/application/config/config.php

and find the line that assigns $config[‘index_page’] a value, usually:

$config['index_page'] = "index.php";

and change it to:

$config['index_page'] = '';

Save the file.

3. Make sure your apache has mod_rewrite activated

This means that the apache must be configured to load the mod_rewrite module (or it might have it compiled-in). For module inclusion, usually you have to look for a line like this in httpd.conf or a file loaded by it (hint: use some quick file search utility to grep files with lines containing ‘rewrite’ string):

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

If you’re running Apache2 type

a2enmod
in the console and when prompted
rewrite

to enable mod_rewrite.

On a Windows machine this line might look this way:

LoadModule rewrite_module modules/mod_rewrite.so

If it is commented out (# in front), make sure to uncomment it and save the file. Checking if the corresponding module exists may be a good idea as well (but it usually does).

4. Make sure apache accepts needed .htaccess directives

This means that apache is explicitly configured to allow .htaccess files to override those directives that you use in your .htaccess file from step 1. above.

It seems to be sufficient if you add these two lines to your section where you configure the document root for your CI application:

<Directory "/some/absolute/path/htdocs">
...
Options FollowSymLinks
AllowOverride FileInfo
...
< /
Directory>

There might be other Options listed, just make sure you have FollowSymLinks as well.

Should you get a 500 Internal Server Error, try the following syntax:

<Directory "/some/absolute/path/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride AuthConfig FileInfo
Order allow
,deny
Allow from all
< /Directory>

5. Restart apache and test your application

Works? Congratulations!

Doesn’t work? Ehrrr… well, do not give up; equip yourself with patience, double check all steps above and if it still does not work, post on the forum giving all details of your setup.

How does URL rewriting work?

<IfModule mod_rewrite.c>
...
< /
IfModule>

Do what is inside only if Apache has the mod_rewrite feature (by in place compilation, or loaded module).

RewriteEngine On

Activate the URL rewriting engine, if not already done (in main Apache configuration file.

RewriteBase /

Define the part of the URL that won’t change nor be used for rewriting. In fact, this part will be removed before processing, and prepended after processing. This’s a good way to use subfolder-independent rewrite rules. For example, if your CodeIgniter index.php is placed in a virtual host directory, like /tests/, set RewriteBase to /tests/.

RewriteCond %{REQUEST_FILENAME} !-f

Condition to meet for RewriteRule activation. Here, we test if the requested filename does not exist.

RewriteCond %{REQUEST_FILENAME} !-d

Same as above, but we test for directory existence.

RewriteRule ^(.*)$ index.php/$1 [L]

If RewriteCond conditions are met, this rule will be applied. It inserts index.php before the requested URI. The $1 represents the part of string enclosed by parentheses in left expression. The [L] means that this rule is the last one if rule is applied (thus stopping rewriting).

Configuring mod_rewrite in the httpd.conf file

The Apache mod_rewrite docs say

While URL manipulations in per-server context are really fast and efficient, per-directory rewrites are slow and inefficient…

. If you have access to your httpd.conf file, you’ll have better performance if you configure the rewrite rules in there.

You can add something like this to your httpd.conf:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond
%{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
< /IfModule>

Configuring mod_rewrite and virtual hosting with Apache 2.2

<VirtualHost *>
ServerName www.mydomain.com
DocumentRoot
/path/to/ci/directory
<Directory /path/to/ci/directory>
RewriteEngine On
RewriteBase
/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond
%{REQUEST_FILENAME} !-d
RewriteRule
^(.*)$ index.php/$1 [L]
< /Directory>
< /
VirtualHost>