スポンサード リンク
ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2017年11月1日水曜日

install PHP for Basix(Ubuntu)

UbuntuをベースにしているBasix上で、コマンドラインからPHPを使おうとしたら、下記のエラーが発生。php がインストールされていないらしい。

$ php
プログラム 'php' は以下のパッケージで見つかりました:
 * php7.0-cli
 * hhvm
次の操作を試してください: sudo apt install <選択したパッケージ>

PHPのバージョンは気にしないので、下記のようにしてphpをインストール。

$ sudo apt-get update

$ sudo apt-get install php
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libllvm3.8 libmircommon5 libsnapd-glib1 snapd snapd-login-service
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json
  php7.0-opcache php7.0-readline
提案パッケージ:
  php-pear
以下のパッケージが新たにインストールされます:
  php php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json
  php7.0-opcache php7.0-readline
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 164 個。
3,544 kB のアーカイブを取得する必要があります。
この操作後に追加で 14.2 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 php-common all 1:35ubuntu6 [10.8 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-common amd64 7.0.22-0ubuntu0.16.04.1 [843 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-json amd64 7.0.22-0ubuntu0.16.04.1 [16.9 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-opcache amd64 7.0.22-0ubuntu0.16.04.1 [77.1 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-readline amd64 7.0.22-0ubuntu0.16.04.1 [12.8 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-cli amd64 7.0.22-0ubuntu0.16.04.1 [1,287 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php7.0-fpm amd64 7.0.22-0ubuntu0.16.04.1 [1,293 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0 all 7.0.22-0ubuntu0.16.04.1 [1,294 B]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 php all 1:7.0+35ubuntu6 [2,832 B]
3,544 kB を 4秒 で取得しました (717 kB/s)
以前に未選択のパッケージ php-common を選択しています。
dpkg: 警告: パッケージ 'ubiquity-frontend-debconf' のファイル一覧ファイルがありません。このパッケージには、現在インストールされているファイルがないものとします
(データベースを読み込んでいます ... 現在 164691 個のファイルとディレクトリがインストールされています。)
.../php-common_1%3a35ubuntu6_all.deb を展開する準備をしています ...
php-common (1:35ubuntu6) を展開しています...
以前に未選択のパッケージ php7.0-common を選択しています。
.../php7.0-common_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-common (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0-json を選択しています。
.../php7.0-json_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-json (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0-opcache を選択しています。
.../php7.0-opcache_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-opcache (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0-readline を選択しています。
.../php7.0-readline_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-readline (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0-cli を選択しています。
.../php7.0-cli_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-cli (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0-fpm を選択しています。
.../php7.0-fpm_7.0.22-0ubuntu0.16.04.1_amd64.deb を展開する準備をしています ...
php7.0-fpm (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php7.0 を選択しています。
.../php7.0_7.0.22-0ubuntu0.16.04.1_all.deb を展開する準備をしています ...
php7.0 (7.0.22-0ubuntu0.16.04.1) を展開しています...
以前に未選択のパッケージ php を選択しています。
.../php_1%3a7.0+35ubuntu6_all.deb を展開する準備をしています ...
php (1:7.0+35ubuntu6) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
systemd (229-4ubuntu19) のトリガを処理しています ...
php-common (1:35ubuntu6) を設定しています ...
php7.0-common (7.0.22-0ubuntu0.16.04.1) を設定しています ...

Creating config file /etc/php/7.0/mods-available/calendar.ini with new version

Creating config file /etc/php/7.0/mods-available/ctype.ini with new version

Creating config file /etc/php/7.0/mods-available/exif.ini with new version

Creating config file /etc/php/7.0/mods-available/fileinfo.ini with new version

Creating config file /etc/php/7.0/mods-available/ftp.ini with new version

Creating config file /etc/php/7.0/mods-available/gettext.ini with new version

Creating config file /etc/php/7.0/mods-available/iconv.ini with new version

Creating config file /etc/php/7.0/mods-available/pdo.ini with new version

Creating config file /etc/php/7.0/mods-available/phar.ini with new version

Creating config file /etc/php/7.0/mods-available/posix.ini with new version

Creating config file /etc/php/7.0/mods-available/shmop.ini with new version

Creating config file /etc/php/7.0/mods-available/sockets.ini with new version

Creating config file /etc/php/7.0/mods-available/sysvmsg.ini with new version

Creating config file /etc/php/7.0/mods-available/sysvsem.ini with new version

Creating config file /etc/php/7.0/mods-available/sysvshm.ini with new version

Creating config file /etc/php/7.0/mods-available/tokenizer.ini with new version
php7.0-json (7.0.22-0ubuntu0.16.04.1) を設定しています ...

Creating config file /etc/php/7.0/mods-available/json.ini with new version
php7.0-opcache (7.0.22-0ubuntu0.16.04.1) を設定しています ...

Creating config file /etc/php/7.0/mods-available/opcache.ini with new version
php7.0-readline (7.0.22-0ubuntu0.16.04.1) を設定しています ...

Creating config file /etc/php/7.0/mods-available/readline.ini with new version
php7.0-cli (7.0.22-0ubuntu0.16.04.1) を設定しています ...
update-alternatives: /usr/bin/php (php) を提供するために自動モードで /usr/bin/php7.0 を使います
update-alternatives: /usr/bin/phar (phar) を提供するために自動モードで /usr/bin/phar7.0 を使います
update-alternatives: /usr/bin/phar.phar (phar.phar) を提供するために自動モードで /usr/bin/phar.phar7.0 を使います

Creating config file /etc/php/7.0/cli/php.ini with new version
php7.0-fpm (7.0.22-0ubuntu0.16.04.1) を設定しています ...

Creating config file /etc/php/7.0/fpm/php.ini with new version
php7.0 (7.0.22-0ubuntu0.16.04.1) を設定しています ...
php (1:7.0+35ubuntu6) を設定しています ...
systemd (229-4ubuntu19) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...

インストールが完了したので、インストールされたPHPのバージョンを確認。

$ php -v
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

PHP 7がインストールされた。目的のPHPプログラムを動かしてみる。問題なく動きました。作業完了。

2017年3月28日火曜日

httpsに変わってWebスクレイピングエラー

phpで作成したWebスクレイピングのプログラムが動かなくなった。

htmlが何か変わったのかと思ってブラウザでHTMLを表示してみるが、変更点はないようだ。でも動かなくなった。何が悪いの?

phpで作成したWebスクレイピングのプログラムが動かなくなった。

Webスクレイピングのプログラムは以下のような感じでphpでcurlを使っている。

    $url = 'http://xxxx.xxxx.co.jp/xxxx/';
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_USERAGENT,
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.2)' );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $c = curl_exec( $ch )

とりあえず、curl_execの結果をprint文で表示してみる。

????どういうこと?何も表示されない。curl_execが失敗しているのか?

何がどうなってるのかわからないので、httpリクエストの応答がどうなっているのかtcpdumpコマンドで見てみる。以下のような感じ。

# tcpdump -i enp5s0 'src host xxxx.xxxx.co.jp and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp5s0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:41:18.770237 IP xxxx.xxxx.co.jp.http > localhost.localdomain.47766: Flags [P.], seq 638153757:638154510, ack 2066669371, win 32, options [nop,nop,TS val 3132218298 ecr 3703437694], length 753
E..%.d@.8.      ..O.{.....P..&  t.{..;...  ......
.......~HTTP/1.1 301 Moved Permanently
Date: Tue, 28 Mar 2017 12:38:17 GMT
P3P: policyref="http://xxxx.xxxx.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: B=5silu9pcdkm9p&b=3&s=1u; expires=Fri, 29-Mar-2019 12:38:17 GMT; path=/; domain=.xxxx.co.jp
Location: https://xxxx.xxxx.co.jp/xxxx/
Cache-Control: private
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Age: 0
Connection: keep-alive
Via: http/1.1 edge2431.img.xxx.xxxx.co.jp (ApacheTrafficServer [c s f ])
Server: ATS

リダイレクトかよ。URL変わったのか。と思ったが変わってないぞ。どうなってんだ?と思って「Location: 」で返された文字列をコピーして、プログラム上にペーストして比較。

なんとhttpがhttpsになっていた。

ということで、Webスクレイピングのプログラムの取得するURLをhttpからhttpsに変更。

    $url = 'https://xxxx.xxxx.co.jp/xxxx/';
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_USERAGENT,
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.2)' );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $c = curl_exec( $ch )

動きましたよ。

動いたのは良いのだが、これでは通信内容が暗号化されているのでtcpdumpで応答を見ることができない。鬱陶しい世の中になってきたね。

2016年12月20日火曜日

ftp_put(): Unable to build data connection: No route to host

無料のレンタルサーバにftpするプログラムをphpで作成し使っていたのだが、OSをCentOS 7に変更した影響かエラーで動かなくなった。コマンドラインから実行し、指定のディレクトリ内の全フファイルをUploadするプログラムです。

エラーの内容は以下の通り。

A PHP Error was encountered

Severity: Warning
Message:  ftp_put(): Unable to build data connection: No route to host
Filename: controllers/xxxxxxxx.php
Line Number: xxx

phpのプログラムは以下の通り。エラーチェックを一切行っていない手抜きプログラム。

    $ftp_server = 'xxxx.xxxxxxxx.jp';
    $ftp_user   = 'xxxxxxxx';
    $ftp_pass   = 'xxxxxxxx';

    $ftp_stream = ftp_connect( $ftp_server );
    $ftp_result = ftp_login( $ftp_stream, $ftp_user, $ftp_pass );
    foreach( $files as $val ) {
      ftp_put( $ftp_stream, './'. $val, $base . $val, FTP_ASCII );
      echo "Upload: " . $val . "\n";
    }
    ftp_close( $ftp_stream );

なんだかなあと思いながら

    ftp_pasv( $ftp_stream, true );

を追加してみる。

動いたよ。

修正後のプログラムは以下の通り。

    $ftp_server = 'xxxx.xxxxxxxx.jp';
    $ftp_user   = 'xxxxxxxx';
    $ftp_pass   = 'xxxxxxxx';

    $ftp_stream = ftp_connect( $ftp_server );
    $ftp_result = ftp_login( $ftp_stream, $ftp_user, $ftp_pass );
    ftp_pasv( $ftp_stream, true );
    foreach( $files as $val ) {
      ftp_put( $ftp_stream, './'. $val, $base . $val, FTP_ASCII );
      echo "Upload: " . $val . "\n";
    }
    ftp_close( $ftp_stream );

パッシブモードの指定が必要になったようだ。CentOS 7にしてPHPのバージョンが変わって規定値が変わったのかな?それともレンタルサーバ側が変わったのだろうか。動いたからいいか。