Янв 052013
 

Export(Экспорт) MySQL в Excel реализация на PHP

Однажды мне понадобилось записать данные из базы данных MySQL в Microsoft Excel используя PHP скрипт.
Сейчас я продемонстрирую вам код который в дальнейшем поможет Вам.

<?php
mysql_connect(“localhost”,”root”,”root”);
mysql_select_db(“employee”);
$qry_data=mysql_query(“SELECT * FROM personal ORDER BY nip”);

function xlsBOF() {
echo pack(“ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
return;
}
function xlsEOF() {
echo pack(“ss”, 0x0A, 0×00);
return;
}
function xlsBuatBaris($data, $Col, $Value) {
echo pack(“sssss”, 0×203, 14, $data, $Col, 0×0);
echo pack(“d”, $Value);
return;
}
function xlsBuatLabel($data, $Col, $Value ) {
$L = strlen($Value);
echo pack(“ssssss”, 0×204, 8 + $L, $data, $Col, 0×0, $L);
echo $Value;
return;
}
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=employee.xls “);
header(“Content-Transfer-Encoding: binary “);

xlsBOF();

xlsBuatLabel(0,0,”DAFTAR DATA PRIBADI”);

xlsBuatLabel(2,0,”NIP”);
xlsBuatLabel(2,1,”NAMA”);
xlsBuatLabel(2,2,”ALAMAT”);
xlsBuatLabel(2,3,”KELAMIN”);
xlsBuatLabel(2,4,”TGL LAHIR”);

$xlsRow = 3;

while($data=mysql_fetch_array($qry_data)){
xlsBuatBaris($xlsRow,0,$data['nip']);
xlsBuatLabel($xlsRow,1,$data['nama']);
xlsBuatLabel($xlsRow,2,$data['alamat']);
xlsBuatLabel($xlsRow,3,$data['kelamin']);
xlsBuatLabel($xlsRow,4,$data['tgl_lahir']);

$xlsRow++;
}

xlsEOF();
exit();
?>
Авг 022012
 

Вернуть массив без повторяющихся элементов без array_unique()

<?php

$row = array(‘1’, ‘1’, ‘1’, ‘2’, ‘2’, ‘3’, ‘3’, ‘4’, ‘4’, ‘5’, ‘5’);

function a_unique($row) {

$un = array();

foreach ($row as $k1=>$r) {
$accept = true;
foreach ($un as $k2=>$t) {
if ($r == $t) $accept = false;
}
if ($accept == true) $un[] = $r;
}

return $un;

}

$row = a_unique($row);

foreach ($row as $k=>$num) {
echo $num;
}

Фев 172012
 

Работа с переменной $_SERVER

$_SERVER -- ($HTTP_SERVER_VARS [устаревшее]) — Информация о сервере и среде исполнения
   Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь.
   Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно)
'PHP_SELF' - Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/test.php/foo.bar будет /test.php/foo.bar. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.
'argv' - Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
'argc' - Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
'GATEWAY_INTERFACE' - Содержит используемую сервером версию спецификации CGI; к примеру'CGI/1.1'.
'SERVER_ADDR' - IP адрес сервера, на котором выполняется текущий скрипт.
'SERVER_NAME' - Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
'SERVER_SOFTWARE' - Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
'SERVER_PROTOCOL' - Имя и версия информационного протокола, через который была запрошена страница; к примеру 'HTTP/1.0';
'REQUEST_METHOD' - Какой метод был использован для запроса страницы; к примеру 'GET', 'HEAD', 'POST', 'PUT'. Замечание: PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
'REQUEST_TIME' - Временная метка начала запроса. Доступна, начиная с PHP 5.1.0. Начиная с PHP 5.4.0, имеет тип float с указанием микросекунд.
'QUERY_STRING' - Строка запросов, если есть, с помощью которой была получена страница.
'DOCUMENT_ROOT' - Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
'HTTP_ACCEPT' - Содержимое заголовка Accept: из текущего запроса, если он есть.
'HTTP_ACCEPT_CHARSET' - Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING' - Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: 'gzip'.
'HTTP_ACCEPT_LANGUAGE' - Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: 'en'
'HTTP_CONNECTION' - Содержимое заголовка Connection: из текущего запроса, если он есть. Например: 'Keep-Alive'
'HTTP_HOST' - Содержимое заголовка Host: из текущего запроса, если он есть.
'HTTP_REFERER' - Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять
'HTTP_USER_AGENT' - Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
'HTTPS' - Принимает непустое значение, если запрос был произведен через протокол HTTPS. Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
'REMOTE_ADDR' - IP-адрес, с которого пользователь просматривает текущую страницу.
'REMOTE_HOST' - Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR. Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().
'REMOTE_PORT' - Порт на удаленной машине, который используется для связи с веб-сервером.
'REMOTE_USER' - Аутентифицированный пользователь.
'REDIRECT_REMOTE_USER' - Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
'SCRIPT_FILENAME' - Абсолютный путь к скрипту, который в данный момент исполняется. Замечание:Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER['SCRIPT_FILENAME'] будет содержать относительный путь, указанный пользователем.
'SERVER_ADMIN' - Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
'SERVER_PORT' - Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет '80'; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
'SERVER_SIGNATURE' - Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
'PATH_TRANSLATED' - Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping. Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATED должна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директиву AcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.
'SCRIPT_NAME' - Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
'REQUEST_URI' - URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
'PHP_AUTH_DIGEST' - При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок 'Authorization', который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
'PHP_AUTH_USER' - Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
'PHP_AUTH_PW' - Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
'AUTH_TYPE' - Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
'PATH_INFO' - Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER['PATH_INFO'] будет содержать /some/stuff.
'ORIG_PATH_INFO' - Исходное значение переменной 'PATH_INFO' до начала обработки PHP.
Пример:
<?php echo $_SERVER['SERVER_NAME']; ?>
Выведет:
www.examplepage.com
Пример:
<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>
Выведет:
http://www.examplepage.com/index.php?lang=en
Янв 152012
 

PHP округление числа

В данной статье будет описано как в PHP округляются числа. В данном случае понадобятся три функции: round — функция округляет до ближайшего целого числа, ceil — функция округляет до ближайшего целого и floor -округляет в меньшую торону.
Рассмотрим по-порядку:

round()

Синтаксис:

float round ( float value [, int precision] )

Первый параметр дробное число. Второй параметр необязательный. В нём указывается точность округления.

Примеры использования и результаты выполнения:

echo round(3.7);     // 4
echo round(3.1);     // 3
echo round(4.5);     // 5
echo round(7.4999);  // 7
echo round(1.46,1);  // 1.5
echo round(1.7384,3);// 1.738
echo round(4939,-1); // 4940
echo round(3.5,1);   // 3.5
echo round(1244,-2); // 1200

Округление числа до сотых:

echo round(2.467,2); // 2.47

Округление числа до целого:

echo round(3.825); // 4

ceil() — округление в большую сторону

Синтаксис:

float ceil ( float value )

Один параметр, которому передаётся дробь. На выходе целое число, округлённое

в большую сторону.

Примеры использования и результаты выполнения:

echo ceil(3.7);  // 4
echo ceil(3.001);// 4
echo ceil(4.5);  // 5
echo ceil(8.0);  // 8

floor() — округление в меньшую сторону

Синтаксис:

float floor(float value)

Имеет один параметр для передачи дроби. Выходит целое число, округлённое

в меньшую сторону, либо попросту остается целое число.

Примеры использования и результаты выполнения:

echo floor(3.99); // 3
echo floor(3.023);// 3
echo floor(4.4);  // 4
echo floor(9.0);  // 9
Дек 272011
 

Чтение файла file() быстрее, чем fopen+цикл — ускорение 40%

Для того, чтобы прочитать в массив $x файл размером 1Мб (100 000 строк по 10 байт) можно воспользоваться двумя вариантами: чтение файла с помощью file(), либо традиционным методом fopen/fgets. Разумеется, для файлов разного объема и содержимого скорость может меняться. Но в данном примере статистика такова:file("1Mb_file.txt") работает на 40% быстрее, чем:

 

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while($x[]=fgets($f,1000));
   fclose($f);

Аналогичные варианты

 

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while($s=fgets($f,1000)) $x[]=$s;
   fclose($f);

или

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while(!feof($f))) $x[]=fgets($f,1000);
   fclose($f);

работают еще медленнее (во втором случае лишняя функция feof() заметно снижает скорость). Тот же тест, но на 15Мб файле (100 000 строк по 150 байт) показывает разницу в 50%, в пользу file(). Тест проводился так, чтобы исключить фоновый своппинг во время работы из-за предшествующих команд создания/чтения таких больших файлов. Подсчитать тоже самое на очень маленьких файлах в 1-2 Кб не представляется возможным, т.к. операцию чтения нельзя повторять в течении одного теста, операции чтения будут кешироваться…