Архивы: PHP

Внешний IP адрес

Очень часто приходится работать в разных местах, поэтому не редко приходится узнавать свой внешний IP адрес с помощью всяких whatismyip.com

Очень хотелось что-то простое, быстрое, и для консоли. Подумав и погуглив, я написал совсем простой скрипт на php с использованием socket`ов

#!/usr/bin/env php

<?php

$socket = stream_socket_server(«tcp://0.0.0.0:23″, $errno, $errstr);

if (!$socket) {
die(«$errstr ($errno)\n»);
}

while ($connect = stream_socket_accept($socket, -1)) {
$ip=stream_socket_get_name($connect,true);
$ip=explode(«:»,$ip);
fwrite($connect, $ip[0]);
fclose($connect);
}

?>

Теперь сервер, при коннекте telnet клиента на стандартный 23 порт, выдает ему его же внешний IP. Просто, изящно, но тупо.

На написание (да чего уж там, основную часть я выдрал в наглую) меня вдохновила статья на хабре

http://habrahabr.ru/company/ifree/blog/209864/

Стоит отметить, что для не stream_socket, а обычных, выдается ошибка  »Transport endpoint is not connected in», которую я так и не смог побороть.

Uploadify IO error 2038 http 412/413

Есть такой замечательный скрипт мульти-загрузки файликов на сервер uploadify.

Поставил его, вроде все работает. Однако, на больших файлах (более 10 Мбайт, а надо было 25) стала проявлятся ошибка. Файлики не закачивались.

После муторного просева гугла, выяснилос: необходимо прописать в файлике .htaccess такие параметры:

php_value post_max_size 35M

php_value upload_max_filesize 25M

php_value max_execution_time 600

php_value max_input_time 600

php_value memory_limit 128M

Иногда не срабатывает, потому как .htaccess должен лежать в папке с .swf  файлом, а еще лучше прописать в php.ini

С другой стороны, хотя ошибка #2038 (http 412) исчезла, появилась другая — http 413.

Эта проблема уже относится к вебсерверу:

в apache необходимо прописать

LimitRequestBody 25242880

Но у меня стоял еще nginx в качестве frontend, поэтому там необходимо было прописать:

client_max_body_size 25m;

proxy_send_timeout 120;

Теперь вроде все работает. mod_secure на который ссылаются многие по этой теме совершенно не причем.

xml и 500 error

В процессе создания одного портала, столкнулся с интересной бедой, которая выпала на мой сервер неожиданно. Когда создали sitemap.xml, оказалось что никому этот файл не доступен, хотя и присутствует на сервере. Сервер отвечал браузеру 500 ошибкой (Error) ссылаясь на какой-то дикий допотопный баг Netscape. Очень долго думая, я пришел к выводу что проблема все-таки не в сервере Apache, а проблема в интерпретаторе xml. В файле mod_php.conf я не обнаружил записи xml, и быстро это исправил.

Однако, не тут то было, даже с этой записью вылетала 500 ошибка…. В интернете информации не было, пришлось включать все возможные логи, чтобы докопаться до сути. В итоге в логе php, была найдена ошибка syntax error unexpected t_string для файла xml в первой строке. Пошарив в гугле, обнаружил что такая беда случается, если включена опция short_tags в настройках php. Так как, в этом случае php являсь обработчиком xml, думает что строка

<?xml version="1.0" encoding="UTF-8"?>

Является скриптом php, а не разметкой xml. Решение проблемы может быть разным. Отключить short_tags, но тогда некоторые движки с корявым кодингом будут сыпать ошибками.

При включенном short_tags можно решить проблему написав вместо

<?xml version=»1.0″?>

так:

<<?= ‘?’; ?>xml version=»1.0″<?= ‘?’; ?>>

Однако, есть более простое решение проблемы. Отправлять заголово с помощью php:

<?php
header("Content-Type: application/xml");
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>

можно даже rewrite правило написать…. если хочется.

Psychostats 3.1

Проблема  с некорректным отображением статистики карты в Explorer решается просто:

в файлике /themes/default/css/content.css

#ps-container .ps-table

ставим width: 98% вместо 100%

PHP и GD2

Любителям издевательств над своим мозгом посвящается.

Библиотеку работы с графикой GD2 используют многие движки. Однако, иногда бывает так, что эта библиотека по каким-либо причинам не работает. Я столкнулся с такой проблемой на Slackware 13.0. По умолчанию я не ставил пакеты из директории X (по идее они и не нужны для создания чисто консольных серверов), и потому (как я уже потом понял) уперся в достаточно распространенную ошибку PHP Fatal error: Call to undefined function imagecreatetruecolor(). Читать далее »

Register_globals опять грабли

Начиная с PHP 4.2, параметр Register_globals по умолчанию находится в выключенном состоянии. Часто это проявляется когда хочешь передать что-то запросом GET скрипту на PHP. Переменные в этом случае не передаются, и можно долго тупить ища проблему там где ее нет, т.е. в коде. Безусловно, отключение глобальных переменных дает возможность обеспечить более современной защитой веб-приложения на сервере. Но все таки, для быстрой работы, грубо говоря песочницы, иногда необходимо чтобы этот параметр был включен. Чтобы не нарушать безопасность всего сервера, можно включить этот параметр в файлике .htaccess с помощью нехитрой строки:
php_flag register_globals on
и для директории в которой он (созданный файлик) находится, параметр будет работать как в старые добрые времена.
PS. Чтобы включить везде эту штуку, правим файл php.ini.

более подробно тут: http://ru.php.net/manual/en/ini.core.php#ini.register-globals