Сделано в Раскрутке

Архив эхоконференции RU.PHP

- RU.PHP ------------------------------------------------------------- RU.PHP -
 Msg  : #5034 [1078]
 От   : FAQ AutoPoster                2:5012/8.13         06 декабря 03, 10:30
 Кому : All                                               10 декабря 03, 21:42
 Тема : FAQ [4/5]
-------------------------------------------------------------------------------
>
Для правильной работы ORDER BY и GROUP BY сервер MySQL должен знать текущий
набор символов. К сожалению, версии 3.х и 4.х MySQL могут иметь только _один_
charset на все базы одновременно. Задается в /etc/my.cnf: 

[mysqld] 
default-character-set=koi8_ru 

Проверить можно так: 

mysql> show variables like 'character_sets' ; 
mysql> show variables like 'character_set' ; 

В этом случае все символьные поля _во_всех_ таблицах будут храниться в KOI8-R. 
Для того, чтобы работали клиенты ODBC из под Windows необходимо, чтобы первым
SQL оператором в Windows-приложении была команда: 

SET CHARACTER SET cp1251_koi8 ; 

Тогда включится перекодировка "на лету". Hа сервере будет KOI8-R, а на клиенте 
Windows-1251 и все сортировки будут работать. Эту же команду можно прописать в 
MyODBC 3.5х "SQL command on connect" (STMT=), она выполнится автоматически. 

Другой вариант -- не использовать KOI8-R, а хранить базы в Windows-1251 и
сообщить об этом серверу, прописав в /etc/my.cnf: 

[mysqld] 
default-character-set=cp1251

> Alexander Voropay

>>4.2. Как перейти c MySQL на PostgreSQL? 
Рекомендую http://www.webmasterbase.com/subcats/6 
Migrate your site from MySQL to PostgreSQL -- Part 1 
Migrate your site from MySQL to PostgreSQL -- Part 2

> Vova Rusakevich, 2:454/23.501

>>4.3. Добавляем запись с автоинкрементным уникальным индексом. Как узнать 
>>значение последнего индекса? 

Для MySQL 
Есть замечательная функция mysql_insert_id ([идент. соединения]). 
Возвращает целое значение, которое и есть необходимый идентификатор, 
сгенерированный полем AUTO_INCREMENT в последем операторе INSERT. 
Подробно см. в доках по функциям PHP. 

Cледует обратить внимание на то, что mysql_insert_id получает число типа INT, 
поэтому необходимо быть осторожным при использовании этой функции с полями 
типа BIGINT. 

> Dmitry Seleznev, 2:5095/6

Для MSSQL 
Hужно сразу после insert выполнить запрос 'select @@IDENTITY newID from 
Твоя_Таблица'. Получишь идентификатор для только что вставленной записи. 
Подробнее о переменных см. в доках MS SQL.

> Andy Ice, 2:5012/8.13

>>4.4. Как взять картинку из BLOB? 
Для MSSQL 
Просто использовать функции mssql_* не получится, но можно использовать 
odbc_* 
Для ODBC 
Должен быть создан так называемый System DSN в ODBC Admin 
Вызов: getfoto.php?id=13 
 

> Andy Ice, 2:5012/8.13

>>4.5. Какую базу данных лучше всего выбрать? 
Выбор базы данных (SQL-сервера) зависит от задач, которые планируются. 

> Andy Ice, 2:5012/8.13

-----------------------------------------------------------------------------
>>>5. Работа с файлами 
-----------------------------------------------------------------------------

>>5.1. Пытаюсь переслать картинку из файла, но она приходит частично, 
>>"бьется", что делать? 
Бинарные файлы нужно открывать с ключем "b", иначе в некоторых случаях файл
считается текстовым. Обычно такое происходит под Windows, но если в Вашей
системе параметр "b" не требуется, то он будет игнорироваться, поэтому
рекомендуется его все-таки употреб
 

> Andy Ice, 2:5012/8.13


>>5.2. Почему при работе с csv-файлами теряются некоторые заглавные русские 
>>буквы? 
Потому что csv-файл должен удовлетворять одному, главному условию: текстовые 
поля должны быть ограничены кавычками, т.е. пример такого плана: 

1, "Фамилия Имя Отчество", "Должность" 

> Andy Ice, 2:5012/8.13

>>5.3. При попытке отдать через header("Location: somefile") файл с 
>>расширением pdf, doc, txt, IE открывает их в окне браузера. Как этого 
>>избежать? 
При отдаче файла через header("Location: somefile"), web сервер отдает еще 
Content-type этого файла, который узнается по расширению файла. Информация о 
соответствии content-а расширению берется web сервером из конфигурационного 
файла mime.types. Броузеры в зависимости от получаемого Content-type знают 
что дальше делать с этим файлом. При этом расширение файла броузеру ни о чем 
не говорит, и если web сервер отдаст, к примеру, файл best_music.mp3 с 
Content-type: application/msword, то, если в системе клиента установлен MS 
Word, этот файл будет открыт им. 
Для решения проблемы описанной в вопросе существуют два способа: 

1. Отредактировать файл mime.types поставив желаемым расширениям файлов 
(которые надо скачивать, а не открывать) в соответствие тип 
application/octet-stream. 
Hедостатки: 
- этот путь годится, если Вы яляетесь администратором сервера; 
- изменения коснутся всех файлов, тип которых Вы переопределили, даже тех, 
которые HАДО открывать в броузере. 

2. Отдавать файл клиенту, не посредством header("Location: somefile"), а 
организовав собственную процедуру отдачи файла. При этом появляется 
возможность динамически менять Content-type, предоставив пользователю выбор, 
открыть ли файл в броузере или просто скачать, записав на диск. 
Hедостатки: 
- бОльшая нагрузка на сервер; 
- бОльшие требования к объему RAM на сервере.

> Serge V. Tarasov

>>5.3. Как заставить браузер предлагать сохранять файл с нужным названием, 
а не download.php? 
В msdn нашел: 

 

> Alexey Kolesnichenko

>>5.4 Как корректно заставить броузер скачать и записать файл вместо открытия 
в окне с поддержкой докачки? (пример скрипта) 
Предполагается, что 
$cd - путь к файлу, 
$fn - имя файла 

 

> Serge V. Tarasov

>>5.5 Как сделать аттачмент к е-мейлy пpи отпpавке его с помощью фyнкции 
mail? 
 

> Eugene Belyaev, 2:469/83.210

-----------------------------------------------------------------------------
>>>6. Работа с графикой 
-----------------------------------------------------------------------------
>>6.1. Вздумалось мне локальную баннерную сеть написать, да еще и с подсчетом 
>>показов. Вот и проблемка возникла: как из такой строки в HTML 
>> показать картинку? Header() вроде как не проходит? 
Хочется самому написать? Смотри PHP Manual в разделе GD Functions. Там 
разберешься. 
Или взять готовую банерокрутилку (по моему phpAds называеться, 
http://www.hostcripts.com, http://php.resourceindex.com/). 

> Vova Rusakevich, 2:454/23.501

>>6.2. Как с помощью GD-функций писать кириллицей на создаваемом изображении? 
Hадо делать так: 

 175)?"&#".(1040+($char-176)).";":$in[$i]; 
  } 
  return $out; 
} 

?> 

> (Дополнения и исправления by Serge V. Tarasov, max@arkos.ru)

> Sergey Volkov, deoxyribonuclein@gmx.net

-----------------------------------------------------------------------------
>>>7. Сетевые дела 
-----------------------------------------------------------------------------
>>7.1. Почему с'апложенные jpeg-файлы не отобpажаются? (бьются?). Веб-сервер 
>>- русский Апач. 
Все дело в том, что русский Апач по умолчанию производит перекодировку 
файлов. Так, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). 
Для борьбы с этим эффектом нужно добавить в конфигурационный файл Апача 
httpd.conf следующее: 

 
    CharsetRecodeMultipartForms Off 
 

> Dmitry Seleznev, 2:5095/6

>>7.2. Как опpеделить валидность e-mail? 
 

> Maxim Matyukhin

--- GMT v1.04beta5
 * Origin: Two Beer Or Not Two Beer? (2:5012/8.13)


При переходе по баннеру - скидка 25% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!