PHPとMySQL5.6の接続
socketファイルがバラバラで、 PHPからMySQLに接続するだけなのにずいぶんハマった。
MySQLのステータス確認
mysql> mysql \s -------------- mysql Ver 14.14 Distrib 5.6.12, for debian6.0 (x86_64) using EditLine wrapper Connection id: 1 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.6.12-log MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 14 sec Threads: 1 Questions: 5 Slow queries: 0 Opens: 67 Flush tables: 1 Open tables: 60 Queries per second avg: 0.357 --------------
MySQL設定ファイル
vi /etc/my.cnf [client] default-character-set=utf8 socket = /var/run/mysqld/mysqld.sock [mysqld] basedir = /opt/mysql/server-5.6 datadir = /data/mysql skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 skip-name-resolve lower_case_table_names = 1 default-storage-engine = InnoDB socket = /var/run/mysqld/mysqld.sock general_log=1 general_log_file=/var/log/mysql/general.log log_error=/var/log/mysql/error.log pid-file=/var/log/mysql/mysql.pid slow_query_log=ON slow_query_log_file=/var/log/mysql/slow-query.log long_query_time =1 innodb_buffer_pool_size=64M innodb_log_file_size=16M innodb_flush_method=O_DIRECT query_cache_size=128M query_cache_limit=2M query_cache_min_res_unit=4k query_cache_type=1 tmp_table_size=128M max_heap_table_size=128M table_open_cache=1024 max_allowed_packet=1M sort_buffer=256K read_buffer_size=256K read_rnd_buffer_size=256K join_buffer_size=256K key_buffer_size=16M max_connections=256 thread_cache=256 wait_timeout=60 [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8
phpinfo()を確認してphp.iniを修正。
Configuration File (php.ini) Path /etc/php5/fpm Loaded Configuration File /etc/php5/fpm/php.ini pdo_mysql.default_socket /var/run/mysqld/mysqld.sock mysql.default_socket /var/run/mysqld/mysqld.sock mysqli.default_socket /var/run/mysqld/mysqld.sock
php5-fpm、再起動
/etc/init.d/php5-fpm restart
Nokogiriでスクレイピング
C:\>ruby -v ruby 2.0.0p247 (2013-06-27) [i386-mingw32]
タイトルをスクレイピングして取得する。
#! ruby -Ku p "文字化けしないか確認しておく" require "open-uri" require "nokogiri" url = "http://snit.hatenadiary.jp/" charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) p doc.title
実行
C:\>ruby sample3.rb "文字化けしないか確認しておく" "snit21の日記"
最初の定義がないとそもそも日本語が文字化けする。
#! ruby -Ku
参考
http://ginzanomama.hatenablog.com/entry/2013/02/27/162828
http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial