PHPのextension呼出しでundefined functionが発生(Windows wsl(Ubuntu))
- Wed
- 02:24
- PHP
Windows wslのUbuntuでphpのextensionをcall(curlやxmlのパース)すると「undefined function」が発生。
Macだと適当に全部入りでやってくれるけどLinux系は個別にextensionをinstallする必要がある。
パッケージを探す場合は、searchしてgrepするのが簡単。
extensionの設定は、「/etc/php/」にある。
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の簡単なサンプル
- Sun
- 00:10
- PHP
PHPのSimpleXMLElementの簡単なサンプル TechCrunchのfeedをサンプルに。
xmlのコードは、http://jp.techcrunch.com/feed/のソースをご参照。
コロン付きのタグや、タグ内のアトリビュートの取得なんかもやってます。
xml.php
実行結果:
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 って何順?
- Mon
- 21:52
- PHP
PHPで、ただdir内をなめるだけのプログラムって書く場面がなかったので簡単にメモ。
$dirsを日付と名前の配列にして、日付でsortか?
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] IPアドレスから地域を判定するNet_GeoIPとGeoIP
- Fri
- 22:40
- PHP
最近は、ニュースのどうでもいい個人的感想が続いてたので、久々にコードのサンプルを。
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
いつもの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)
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
[続きを見る]