PHPのextension呼出しでundefined functionが発生(Windows wsl(Ubuntu))

Windows wslのUbuntuでphpのextensionをcall(curlやxmlのパース)すると「undefined function」が発生。
PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in ...
PHP Fatal error:  Uncaught Error: Call to undefined function simplexml_load_string()

Macだと適当に全部入りでやってくれるけどLinux系は個別にextensionをinstallする必要がある。
$ sudo apt install php

$ sudo apt install php-curl
$ sudo apt install php7.4-xml

パッケージを探す場合は、searchしてgrepするのが簡単。
$ apt search  php| grep xml
php-xml/focal 2:7.4+75 all
php-xml-htmlsax3/focal 3.0.0+really3.0.0-4 all
php-xml-rpc2/focal 1.1.3-0.1 all
php-xml-svg/focal 1.1.0-2 all
php-xmlrpc/focal 2:7.4+75 all
php7.4-xml/focal-updates,now 7.4.3-4ubuntu2.6 amd64 [installed]
php7.4-xmlrpc/focal-updates 7.4.3-4ubuntu2.6 amd64
  extract cluster node data from remote xmlsysd daemons
xmlsysd/focal 2.6.0-0ubuntu5 amd64

extensionの設定は、「/etc/php/」にある。
$ pwd
/etc/php/7.4
$ tree -d
├── apache2
│   └── conf.d
├── cli
│   └── conf.d
└── mods-available
もし、インストールしているのに使えない場合は、「extension=」の行がコメントアウトされてないか確認。
$ cat /etc/php/7.4/cli/conf.d/20-curl.ini
; configuration for php curl module
; priority=20
extension=curl.so


PHPのSimpleXMLElementの簡単なサンプル

PHPのSimpleXMLElementの簡単なサンプル TechCrunchのfeedをサンプルに。
xmlのコードは、http://jp.techcrunch.com/feed/のソースをご参照。

コロン付きのタグや、タグ内のアトリビュートの取得なんかもやってます。

xml.php
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
#!/usr/local/bin/php
<?

$ch = curl_init("http://jp.techcrunch.com/feed/");

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);
//print_r($res);

$xml_obj = new SimpleXMLElement($res);

print "*** title=" . $xml_obj->channel->title . "\n";
print "*** url=" . $xml_obj->channel->link . "\n";
$buf = $xml_obj->channel->children("sy", 1)->updatePeriod;
print "*** sy:updatePeriod=" . $buf . "\n";

print "*** item count=" . $xml_obj->channel->item->count() . "\n";
$idx = 0;
foreach ($xml_obj->channel->item as $item) {
  print "*** item $idx\n";
  print "    title=" . $item->title . "\n";
  print "    link=" . $item->link . "\n";
  $buf = $item->children("media", 1)->thumbnail->attributes();
  if ($item->children("media", 1)->thumbnail) {
  print "    media:thumbnail url=[" . $buf . "]\n";
  }
  $idx++;
}
実行結果:
$ ./xml.php
*** title=TechCrunch Japan
*** url=http://jp.techcrunch.com
*** sy:updatePeriod=hourly
*** item count=10
*** item 0
    title=LGのMacBook用5KディスプレイはWi-Fiルーターに近いと狂う、今後は電磁波シールドを装備へ
    link=http://jp.techcrunch.com/2017/02/04/20170203lg-monitor-router-2/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/s-aolcdn1.jpg?w=210&h=158&crop=1]
*** item 1
    title=Appleの学生・教育者向けアプリケーション・バンドルはFinal CutとLogic込みで199ドル
    link=http://jp.techcrunch.com/2017/02/04/20170203apple-offers-a-199-app-bundle-for-education-with-final-cut-and-logic/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/macbook-final-cut-pro.jpg?w=210&h=158&crop=1]
*** item 2
    title=Googleが衛星画像事業Terra BellaをPlanet Labsに売却、Earthの画像はライセンスにより継続
    link=http://jp.techcrunch.com/2017/02/04/20170203google-selling-terra-bella-satellite-imaging-business-to-planet/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/sf-20161227-crop-1500.jpg?w=210&h=158&crop=1]
*** item 3
    title=新築のワールド・トレード・センターのモールにFordが交通の未来をテーマに展示スペースをオープン
    link=http://jp.techcrunch.com/2017/02/04/20170203fordhub/
*** item 4
    title=Uber CEOのTravis Kalanickが経済諮問委員を辞任
    link=http://jp.techcrunch.com/2017/02/04/20170202uber-ceo-travis-kalanick-quits-donald-trumps-business-advisory-council/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/kalanick14.jpg?w=210&h=158&crop=1]
*** item 5
    title=シリコンバレーを有効活用するためのサテライトオフィスという選択
    link=http://jp.techcrunch.com/2017/02/04/20170202how-other-cities-can-benefit-from-silicon-valley/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/8668050852_e42ba2efb2_o.jpg?w=210&h=158&crop=1]
*** item 6
    title=Google、低品質サイトの評価を下げるアップデートーーキュレーションメディアなどが対象に
    link=http://jp.techcrunch.com/2017/02/03/google-seo-1/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/google-seo.png?w=210&h=158&crop=1]
*** item 7
    title=ユーザーの好みを学習するパートナーロボット「ユニボ」の開発元が総額3.24億円を調達
    link=http://jp.techcrunch.com/2017/02/03/unibo-raises-324-million-yen/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/unibo.png?w=210&h=158&crop=1]
*** item 8
    title=あくまでもパブリッシャープラットホームにこだわり続けるEv Williams、新装Mediumで有料購読制に挑戦
    link=http://jp.techcrunch.com/2017/02/03/20170202medium-subscriptions/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/evan-williams.jpg?w=210&h=158&crop=1]
*** item 9
    title=スマホを物の上にかざすとスペクトル分析でその成分(毒物の有無など)を当てるアプリがもうすぐ完成
    link=http://jp.techcrunch.com/2017/02/03/20170202this-app-uses-spectral-analysis-to-analyze-objects-and-their-makeup/
    media:thumbnail url=[https://techcrunchjp.files.wordpress.com/2017/02/fraun_hawkspex.jpg?w=210&h=158&crop=1]


PHPのreaddir って何順?

PHPで、ただdir内をなめるだけのプログラムって書く場面がなかったので簡単にメモ。
function getDirs($tgtdir) {
  $dirs = array();
  $h_dirs = opendir($tgtdir);
  while (false !== ($dir = readdir($h_dirs))) {
    if ($dir === '.' or $dir === '..') continue;
    $dirs[] = $dir;
  }
  closedir($h_dirs);

  sort($dirs);

  return ($dirs);

}
sortを忘れずに。日付順とか一発で取って来れるかは、調べてないので不明。

$dirsを日付と名前の配列にして、日付でsortか?

PHP の URLパラメータをダンプ

なにかあるかなーと思ったけど、単純に$_REQUESTだせばいいのね。


var_dump($_REQUEST);

[PHP] IPアドレスから地域を判定するNet_GeoIPとGeoIP

最近は、ニュースのどうでもいい個人的感想が続いてたので、久々にコードのサンプルを。

Package Information: Net_GeoIP
PECL :: Package :: geoip

pear か pecl で入れるかの違いだけで、データとしては同じMaxMindのものを使えるようです。
pearの場合は、Net_GeoIP。
peclの場合は、geoip。

MaxMindは下記から。国レベルで、99.5%の精度とのことですが、運用しているとそこまで高くないような気がします。
MaxMind - GeoLite Databases | Free IP Geolocation Database

この辺りはレンタルサーバによって、デフォルトで入れてくれるものもあるかもしれません。私の環境には入ってなかったので、Net_GeoIPを$HOME下に展開して使っています。

ということで、Net_GeoIPでテスト。GeoIPはPHP: GeoIP - Manualを。

net_geoip.php
#!/usr/local/bin/php
<?php
set_include_path (".:/usr/local/php5/lib/php:/home/user01/pear/pear/php");

include "Net/GeoIP/GeoIP.php";

$ip = @$argv[1];
if (strlen($ip) == 0) {
exit(0);
}

$geoip = Net_GeoIP::getInstance(
"/home/user01/pear/pear/data/Net_GeoIP/GeoIP.dat"
, Net_GeoIP::MEMORY_CACHE
);

$cname = $geoip->lookupCountryName($ip);
$ccode = $geoip->lookupCountryCode($ip);

print "*** IP=$ip\n";
print "*** $ccode::$cname\n";


いつものYahoo!さんで確認。IPは下記を使用。
PING www.g.yahoo.co.jp (203.216.227.245)
PING ds-any-fp3-real.wa1.b.yahoo.com (72.30.2.43)
PING www.visitlondon.com (31.222.175.205)

$ ./net_geoip.php 203.216.227.245
*** IP=203.216.227.245
*** JP::Japan

$ ./net_geoip.php 72.30.2.43
*** IP=72.30.2.43
*** US::United States

$ ./net_geoip.php 31.222.175.205
*** IP=31.222.175.205
*** GB::United Kingdom

[続きを見る]

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
249位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
38位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm