日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Search Results

phpのchmヘルプファイルの作り方(ダウンロードしたchmが 文字化 け)


執筆:2007.07.05
編集:2007.07.05
編集:2011.02.16


公式サイトのchmが文字化けして、キーワードが読めなくなったり
コンテンツが欠けていたり・・・
配布サイクルが長くて待ち遠しい?・・・
正常なときのchm上書きで消しちゃったよ!

 さぁ、さくっと 自分でコンパイルしましょう。

通常はこちら

» php マニュアル 文字化け 解決、 chmヘルプファイルの作り方 、 ダウンロードしたchmが文字化け'">続きを読む

カテゴリー: ぷろぐらみんぐ
2007.07.10

タイトル

執筆:2024.04.04
編集:2024.04.06


cygwin 3.5  PHP-8.3.4

$ uname -ro
3.5.1-1.x86_64 Cygwin

cygwinの環境が独自仕様の変数とか配置とかで
標準のLinuxと違うみたいで
標準のphpのソースだとそのまま通らないみたい。

cygwin環境は
パッチを当てないとPHPのビルドはできません。

以前XP用にXP未サポートのPHP5.6をビルドしたことがあったので、なんとなくconfigureの仕組みは知っていたので、書き換えてみた。

php.cygportのパッチ作り直し
fedoraの分はすぐ手に入ったのでそのまま差し替えて流用。
残りは、不要なものは無視して、必要そうなものだけ ちゃちゃちゃと書き換えて完了。

コンパイル通らない。

なんでphp.cygport全部ひとまとめにしているのだろう。
基本パッケージcli,sapi毎(cgi,apache),extを最低でもわけるべき。
extなんかbuild後に自動でphplizeすればいいことでしょ。デバッグできないような余計なパッケージして手間かけさせて迷惑。
全部まとめるならオプション渡して必要なものに変更できるようにしないと。

自分の用途で動けばいいだけなのでパッケージとかは考えない。

cygport prepでパッチまで当てて、
残りは、./confugiureで使用する環境に合わせる

./configure --prefix=/usr/local/php/8 $OPTIONS_CONF
config.status: executing default commands

+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+

Thank you for using PHP.


make
落ちたところで少し修正
原因が分かったので解決。


あら、作業開始後に cygwinのバージョンが変わってる
$ uname -ro
3.5.3-1.x86_64 Cygwin


完成!!
uname -ro && sapi/cli/php -v




動作確認完了

やったね!🥂

システムのPHPと置き換え
make install

OK 🍕

デフォルトのphp消してもいいかも?
apt-cyg remove php


🍳 phpのインストールパスをシステムに登録して完成。
nano ~/.bashrc
export PATH="/usr/local/php/8/bin:$PATH"

今回はさすがに無理かと思いました🤣🤮

少し手間かかりましたが いけましたね。💯

$ php -r "echo 'PHP'.phpversion().'-'.PHP_OS;"
PHP8.3.4-CYGWIN_NT-10.0-19045

cygwin で PHP8 完🎉🍭

» PHP-8.3.4'">続きを読む

カテゴリー: ぷろぐらみんぐ
2024.04.06

[PHP8.0] Fatal error: Uncaught PDOException: could not find driver in php : PDO->__construct('sqlite:...')

執筆:2021.02.23
編集:2021.02.23


PHP7.4はスキップしたので
PHP8に対応させようとPHP8をインストール, phi.iniをコピペして、
php.ini-developmentと亀の差分表示機能で比較しながら編集保存。

そーれ! webいけーー!!

Fatal error: Uncaught PDOException: could not find driver in php : PDO->__construct('sqlite:...')

なーぜぇーー。(´;ω;`)ウゥゥ

"C:\...\php" -r "echo (new PDO('sqlite::memory:')?'OK!!':'NG');";
OK!!

うーん。

phpinfo();

Server API Apache 2.0 Handler

PDO
PDO support enabled
PDO drivers mysql
pdo_mysql
PDO Driver for MySQL enabled
Client API version mysqlnd 8.0.2

pdo_sqliteがない。


php -i
Server API => Command Line Interface

PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.33.0

Server API Loaded Configuration File extension_dir
Apache 2.0 Handle 同じ値 同じ値
Command Line Interface

比較しても同じ値だし、読み込めないなら両方モジュールロードが失敗しないといけないし、Apacheで中途半端に読み込んでいるのもおかしい。

apacheのエラーログを見ると4個ロードに失敗していた。

PHP Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: ) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'intl' (tried: ) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: ) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'sqlite3' (tried: ) in Unknown on line 0

dir "パス" コマンドにいれると表示されるのでパスは間違っていないし、上記以外の他のモジュールはロードされている。

これは、php8apache2_4.dllやpdo_sqliteのバグということで今後のマイナーチェンジに期待。

apacheの本体を更新しないといけないのかもしれないが、確認・更新するのも面倒なので保留。
PHP8.1でも直らなかったら、apacheの更新をしてみようと思います。

せっかくPHP8.0を用意しているので
動作確認はしたい。

ということで
CGIモードに変更して対処
AddHandler php-script .php

開発環境だし
とりあえず、動くようになって、デバッグもできるのでいいとしよう。
カテゴリー: General
2021.02.23

PDO::mysql_client_encodingが 無くてSQLで発行すると不便なので実装してみた。

PDO::mysql_set_charset($charsetname)
PDO::mysql_client_encoding()
PDO::mysql_select_db($dbname)

使い方
  $dbh->mysql_set_charset('utf8');
  echo $dbh->mysql_client_encoding();

同じことをsqlで発行するには
  $dbh->exec('SET CHARACTER SET utf8 ');
  show variables like 'character_set_client' で Value列を取得

SQLレベルでPDOに実装をまねるなら PDOクラスを継承するといい。
もし、外部から値を受け取る場合は、
その際は、外部から値を受け付けないようにSQLインジェクション対策が必要だろう。
SHOW CHARACTER SETを使うと一覧がとれるので、その中と照合して、設定するようにすれば、よい。

今回は、PDO_MysqlのCソースレベルで対応した。
PHP_ME , PHP_METHODPHP_をZEND_にするようにとヘルプにはあったが、
・名前が嫌い、銘銘方法がきにくわない(企業名だし)
・他のPDOが使っていない
ということで今回は使うのは避けた。

有効桁の低い+中途半端なスクリプト言語に期待しても意味がないし、
わざわざ、PDO Cソースレベルので改造は、
コンパイルなどの手間がかかるので
素直に、適当な関数を作るか、PDOを継承したクラスにスクリプトコードで実装するほうが現実的だろう。


「実行結果」
sql: mysql_client_encoding: latin1
 get_class :PDO
 is_a($dbh ,'PDO') :true
 is_a($dbh ,'PDO_MYSQL') :false
 $dbh instanceof PDO_MYSQL :false
 PDO::ATTR_DRIVER_NAME  :mysql
 PDO::ATTR_SERVER_VERSION  :5.1.31-community
 PDO::ATTR_CLIENT_VERSION  :5.0.67

check encoding
 mysql_client_encoding: latin1
 set utf8 :true
 mysql_client_encoding: utf8

mysql_select_db true

» 続きを読む

2011.02.14

今回
仮想OSのFreeBSD32 7.x 32bit(VirtualPC)を
新規にVirtualboxにFreeBSD 9.x 64bit (Virtualbox)に変更することになりました
なぜ最新の10.xをいれないかというと
ホスト先のさくらインターネットが version 9だからです


portupgradeするとエラーでストップ

最新のportsにしてもエラー


portupgrade -N apache22

...
Stop in /usr/ports/www/apache22

pkg install -f m4
pkg install -f apr
pkg install -f gettext

portupgrade -N apache22

よくわからないけど直った。

どうやら、ほかのパッケージの不具合でmakeできなかったらしい。

» 続きを読む

カテゴリー: General
2014.05.24

タイトル

執筆:2024.02.24
編集:2024.02.24


Ajax: 各ページが読み込まれる度に1つのタスクを実行します。

Webcron: cron.phpは、HTTP越しに5分おきにcron.phpを読み出すWebcronサービスにより登録されています。

Cron (推奨): システムのcronサービスを利用し。

一番安い共有サーバーだとcronに登録できないので、Ajaxを使うしかないのです。

Ajaxだとファイル操作の転送数が追い付かないので ○○日前です と表示されてしまう。

応急処置は
php -d memory_limit=512M cron.php
を [ 最終ジョブ実行は 秒前 です。 ] と表示されるまで繰り返す

設定を戻す
php -d memory_limit=512M occ background:ajax

ファイルが壊れたり何かしらの不具合が起こるのも面倒なので
cron
Webcronを使いたいですよね

ちょっと考えてみたのですが、簡単に導入できそうです。

あれですね。
Googleとかのクロールがくる軽いページに、コマンドを埋め込むのが確実ですね。
どのページがいいか考えるのとてもめんどうですよね。
5分毎は、キャッシュフォルダに、適当なファイル作って、時間比較して実行する感じにすると簡単です。
比較 No 何もしない
比較 Yes:
(1) キャッシュファイルを現在時刻に更新する(多重実行させないため)
(2) 非同期でWebcron(cron.php)にアクセスしてジョブを捨てる。もしくは直接 cron.phpを非同期で実行する

もともとのスクリプトの実行を継続する。

こんな流れでOK.

面倒ならphp.iniのスタートアップファイルの中にいれてしまえばOK.
auto_prepend_file="PHPがスタートしたときに最初に自動で読み込まれる設定ファイル.php"

重いかどうかとか スルーするかどうかは、適当にリクエストuriで判定すればいい。
ある程度アクセスあるサイトなら1分に数件は確実にアクセスありますから、そこをトリガーに実行してしまえばOK.
重くなっても、5分に1回なのでそれほど影響はないでしょう。ジョブの停滞よりはマシ。
実行OKまたはスルーするURIを追加で条件式に入れてしまえば そうそう重くなることはないでしょう

変なものをはかないように ob_startで保護したほうがいいでしょうか?

cron-nextcloud.php
<?php

try {
// @ob_start();
if ( (substr((string)@php_sapi_name(), 0, 3) !== 'cli')
&& empty($_POST)
&& !empty($_SERVER['REQUEST_URI'])
&& !preg_match('/cron\.php/i', $_SERVER['REQUEST_URI'])) {
$filename = __FILE__.'.tmp'; // タイマーとして使うファイルを指定する
if (!@is_file($filename)
|| (60 * 5 < time() - (int)@filemtime($filename))) {
// ファイルのタイムスタンプを更新する
if (@touch($filename)) {
// ここにクローンジョブを書く
// @file_get_contents($url); // https://pathto/cron.php
// @exec($cmd); // php -d memory_limit=512M pathto/cron.php
}
}}
} finally {
// @ob_end_clean();
}
auto_prepend_fileで指定したファイルにインクルードしてしまえばOK.
@include('pathto/cron-nextcloud.php');

auto_prepend_fileをphp.iniに設定していないのなら直接指定OK
auto_prepend_file='pathto/cron-nextcloud.php'


いい感じですね
早速導入してみますね

» 続きを読む

カテゴリー: General
2024.02.24

PHP Laravel 5.6 のインストール

(1) サーバー要件
PHP7.1の最新版以降
必要なPHP拡張
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
Ctype PHP Extension
JSON PHP Extension
この内容は、公式サイトで最新版を確認しよう

(2) インストール準備
composerが必要なのでない場合は、ダウンロードする
curl -o https://getcomposer.org/composer.phar

(3) インストール

最新版
php composer.phar create-project laravel/laravel --prefer-dist インストール先

バージョンを指定する場合
php composer.phar create-project laravel/laravel --prefer-dist インストール先 5.6

(例)
php composer.phar create-project laravel/laravel --prefer-dist laravel

(4) 更新
インストール先に移動後
php composer.phar update
を実行すると最新版に更新される


アクセス
インストール先/public にアクセスるとデフォルトのサイトが表示される。

この内容は、resources/views/welcome.blade.php
が表示されている

公開先の変更
インストール先/public が公開URLとなっているので、
公開フォルダを変更するにはこの内容をコピーして、index.php内のrequireされているパスをインストール先に向くように書き換えれば好きな位置に移動できる。


ページ(URI)の追加
ページは routes/web.php で一括管理されている。

Route::get('/demo/{name?}', function ($name=null) { return 'Hello'; });

を追加すると /demoにあくせすると Hello と表示されるようになる

404エラーにする場合は、return App::abort(404); を返すといいだろう
ページ移動は、Route::redirect('/移動元', URL::to('/移動先'), 301);
を利用する

詳しい設定はデフォルトのページからいけるDoccumentを参考にしよう。

テンプレート(blade)
デバッグ時にバージョンを表示するサンプル
@if (config('app.debug'))
Laravel {{ app()->version() }}
@else
@endif


2018.06.07

タイトル

執筆:2023.06.29
編集:2023.06.29


php-cs-fixer self-update

In SelfUpdateCommand.php line 168:

rename(C:\Program...\php-cs-fixer-tmp.phar,C:\Program...\php-cs-fixer.phar):
アクセスが拒否されました。 (code: 5)


self-update [-f|--force]


windowsのrenって対象のファイルあったらいけないんじゃないかな?
どのみちコマンド自体がバッチファイルなので中にいれて自動で解決
moveコマンドを挿入。

@echo off

@if EXIST "%~dp0\php-cs-fixer-tmp.phar" move "%~dp0\php-cs-fixer-tmp.phar" "%~dp0\php-cs-fixer.phar"

"%PHP8%" "%~dp0\php-cs-fixer.phar" %*

OKって思ったけど
更新とか考えなくていいようにしたら常に最新版。👍
@echo off

@"%PHP8%" "%~dp0\php-cs-fixer.phar" self-update
@if EXIST "%~dp0\php-cs-fixer-tmp.phar" move "%~dp0\php-cs-fixer-tmp.phar" "%~dp0\php-cs-fixer.phar"

"%PHP8%" "%~dp0\php-cs-fixer.phar" %*
カテゴリー: General
2023.06.29

apt-get update
apt-get upgrade
したら壊れた。

原因
debianのopensslのパッケージのミス。

解決手段
  • パッケージが修正されるのを待つ
  • update-alternatives でリンク先を切り替える
  • -wl,--version-scriptを埋め込み opensslを再構築後インストールする

考察 : 公開サーバー
このような不具合を起こすOSで公開サーバーにするとコンテンツが長期間落ちるので、今後debian,ubuntuの選択はないと思いました。
公開サーバーのOSは、Cent OS, FreeBSDのほうがましなのかもと思いました。

考察 : desktop
前からアプリはバージョンが古くて更新もなかなかないことは知っていましたが、エラーでデバッグもできないし、困りますね。
Cent OSは、デスクトップに向いていないし、FreeBSDは、デスクトップにするともさっとするので、開発環境としては、debian系にしておきたいです。debian ver8(7から)にネットワーク障害があるので、起動後一度アダプタを全切断して再接続しないとネットにつながらないのです。 debian8の再インストールする労力を考えると、めったに起動しないのでアダプタ切断したほうが楽なので放置状態です。 再インストールするとデータの移動が面倒なので、アップグレードしかないのです。 再インストールなんかは、ディスクの破損がない限りしないですよ。 一応仮想環境にfreebsdもあり困らないので、debianは半年くらいそのまま放置してから debian9にアップグレード後、どうするか考えます。

エラー

$ openssl version
OpenSSL 1.0.2 22 Jan 2015

$ pkg-config --print-provides openssl libssl
openssl = 1.0.2
libssl = 1.0.2

$ php -i | egrep -i "^\\s*openssl"
php: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by php)
php: /usr/local/lib/libssl.so.1.0.0: no version information available (required by php)
php: /usr/local/lib/libssl.so.1.0.0: no version information available (required by php)
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2 22 Jan 2015
OpenSSL Header Version => OpenSSL 1.0.1t 3 May 2016
Openssl default config => /usr/local/openssl/openssl.cnf
openssl.cafile => no value => no value
openssl.capath => no value => no value
OpenSSL support => enabled

$ php -v
php: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by php)
php: /usr/local/lib/libssl.so.1.0.0: no version information available (required by php)
php: /usr/local/lib/libssl.so.1.0.0: no version information available (required by php)
PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21)



配布パッケージの破損なので、自然に直るのを待つしかなさそう。

自分でビルドして別フォルダにインストールしているものはエラーがでない
$ php56 -v
PHP 5.6.30 (cli) (built: Feb 16 2017 21:29:36)
カテゴリー: General
2017.02.16

php7 opcacheの設定

メモリに保存します。
ディスクキャッシュじゃないのでがっかり

遅いサイトでないと効果を発揮しないみたい。
100ms程度のレスポンスで来るサイトには意味がない
モジュール版PHP運用でハードディスクへの負荷を考えると意味があるかもしれませんけどね。

php7
php.ini

zend_extension=php_opcache.dll

[opcache]
opcache.enable = 1

で、勝手にキャッシュが動くようになります。
その他の細かい設定は、phpのサンプルの設定を参考にしましょう


ZendOPcache.MemoryBase@ユーザー名@英数字のファイルが
ユーザーのテンポラリフォルダに作成されます。
C:\Users\%USERNAME%\AppData\Local\Temp\

iniの
sys_temp_dir = "/tmp"
で強制的に変更してもopcacheは無視するみたい。


php -S localhost:8000
PHP Warning: PHP Startup: Invalid library (appears to be a Zend Extension, try loading using zend_extension=php_opcache.dll from php.ini) in Unknown on line 0
PHP 7.0.6 Development Server

このエラーの時は、間違ってextension=php_opcache.dll となっているので、
zend_extension=php_opcache.dllとなっているか確認しましょう


2016.05.20

Windows版 phpでは、apacheモジュールだと mbstringがロードされません。

原因
・apacheモジュールなので、相対ディレクトリが phpからではなく apacheになっているため

確認するところ
php.ini
extension_dir = "C:/full path to/ext"


データが破損しないように致命的な異常が発生した場合は表示して停止する。
if ( ! extension_loaded('mbstring') )
   exit("error: extension mbstring is not loadeded <br>\n");


php確認コード

<?php

$linebreak = (php_sapi_name() == 'cli' ? '' : '<br />') . "\n";
echo PHP_VERSION . $linebreak;
echo "php_sapi_name : " . php_sapi_name() . $linebreak;
echo "mbstring : " . (extension_loaded('mbstring') ? 'yes' : 'no') . $linebreak;


7.0.14
php_sapi_name : apache2handler
mbstring : yes

7.1.0
php_sapi_name : apache2handler
mbstring : no

7.1.0
php_sapi_name : cgi-fcgi
mbstring : yes

7.1.0
php_sapi_name : cli-server
mbstring : yes

7.1.0
php_sapi_name : cli
mbstring : yes
2017.01.13

Fatal error: Uncaught ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'k' flags in Command line code:1

執筆:2022.09.27
編集:2022.09.27


Fatal error: Uncaught ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'k' flags in Command line code:1

ほえ?

php\8\8.1\php -r "echo mb_convert_kana('カな', 'kh');"
カナ
php\8\8.2>php -r "echo mb_convert_kana('カな', 'kh');"

Fatal error: Uncaught ValueError: mb_convert_kana():
Argument #2 ($mode) must not combine 'h' and 'k' flags in Command line code:

k 「全角カタカナ」を「半角カタカナ」に変換します。
h 「全角ひらがな」を「半角カタカナ」に変換します。

競合する要素が全くない

カナを知らない人がメンテナンスしたようで kとKフラグを混同しているようだ。

» PHP8.2 Fatal error: Uncaught ValueError: mb_convert_kana() 'kh''">続きを読む

カテゴリー: ぷろぐらみんぐ
2022.09.27

タイトル

執筆:2023.07.30
編集:2023.07.30


Nextcloud Hub 5 (27.0.1) :

WEB: テキストファイルを開く
ファイルを読み込めませんでした。 インターネット接続を確認してください。

index.php/settings/admin/logging
エラー no app in context Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.

まとめ
(0) インストールしてあるフォルダで cmdシェルを開く
(1) コマンドからcronを呼び出し、くるったシステムを正常化する
php -d memory_limit=512M cron.php

(2) 同期設定がAjaxなら設定を戻す。
php occ background:ajax

今回の騒動は cron.php がアップグレードに伴い原因不明のエラーを起こしていたのが原因でした。
アップグレード後は コマンドラインから cron.phpを実行する。

» 続きを読む

カテゴリー: General
2023.07.30

Apache2を起動

Apacheを起動できませんでした :
  Starting httpd: [] [warn] module php4_module is already loaded, skipping
  設定ファイルの編集
Include conf.d/*.conf
が2個あったので 一個削除
Apacheを起動できませんでした :
  [crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
Pre-configuration failed.
  あれぇ〜? なおらない。
と下を見ると・・・

 phpが馬鹿?

仕方がないので 急遽 仕様を変更

worker.htmlprefork


[root@localhost root]# update-alternatives --config apache2

There are 4 alternatives which provide `apache2'.

Selection Alternative
-----------------------------------------------
*+ 1 /usr/sbin/apache2.worker
2 /usr/sbin/apache2.prefork
3 /usr/sbin/apache2.threadpool
4 /usr/sbin/apache2.perchild

Press enter to keep the default[*], or type selection number: 2
Using `/usr/sbin/apache2.prefork' to provide `apache2'.

Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
  えっ? ヨシ 完璧?じゃ。。。
  synapticを起動
(゚ロ゚)ギョェ apacheが入っていたので削除
  起動 成功 ♪

じゃあ cgiとphpもいれたし動くよね?
  (゚ロ゚)ギョェ
  続く・・・

» 続きを読む

カテゴリー: Linux
2006.02.18

さくらインターネットのphpにSQLiteをインストールする方法


 本家のsqlite.oは、Linux用なので
FreeBSDのさくらには使えません。


 ※php5だとデフォルトで使えるので入れる必要はありません。
  php5のインストールはこちら

これを使うと、どうやらSQLite 2.x系となるようです。
php5も2.x系っぽいので、3.xにしたい場合は自力でどうぞ。

インストール
http://pecl.php.net/package/SQLite
で最新版をひろいます
wget http://pecl.php.net/get/SQLite-1.0.3.tgz
tar zxvf SQLite-1.0.3.tgz
cd SQLite-1.0.3
 注:libsqliteを最新の物と置き換えてください
phpize
./configure
make
作成します。
注: SQLite-1.0.3に付属のsqliteのバージョンが古すぎるので
  libsqliteフォルダを最新の物と置き換えてください
  sqlite-source-2_8_17.zip(www.sqlite.org)など

  よくわからないという場合は、libsqliteフォルダを
  php5ソースの
  php-5.x.x\ext\sqlite\libsqliteからコピーする方法もあります。
もし、extensionsのフォルダを決めていないとか作っていない
場合は 作ってください。
mkdir /home/$USER/lib/php/extensions
すでにある場合は↑不要です
cp modules/sqlite.o /home/$USER/lib/php/extensions コピーします
cd ..
rm -r -f SQLite-1.0.3
rm SQLite-1.0.3.tgz
不要なファイルを
削除します
次にphp.iniを設定します

extension_dir = "/home/ユーザー名/lib/php/extensions"
extension=sqlite.so
 

以上で 使えるようになります。

2007.04.03

FreeBSD PHP8.0 ext/tidy tidy5

執筆:2022.07.25
編集:2022.07.25


$ pkg search -d 80-tidy

php80-tidy-8.0.20
Comment : The tidy shared extension for php
Depends on :
  tidy-lib-090315.c_3
  php80-8.0.20
html4にリンクですか?
いらないです。


PHPでほしいのは、html5対応版

必要なライブラリをインストール
pkg install tidy-html5


php tidy-html5のインストール
パッチの展開
コンフィグ : デフォルト html5
cd /usr/ports/www/php80-tidy

unzip patch-ports-php80-tidy.zip

make config



build
make clean && make

インストール
make reinstall

apache24再起動
apachectl restart

php tidyの確認
php -i | grep libTidy

libTidy Version => 5.8.0

» PHP8.0 ext/tidy tidy5'">続きを読む

カテゴリー: General
2022.07.25

PHPフレームワーク2018

人気のあるフレームワーク?
  1. Laravel
    グローバルなネームスペース。設定が簡単。
    最もホットなフレームワーク。最新版はPHP7以降らしい。
  2. Symfony
    階層構造のネームスペースなのでクラスの衝突が起きにくい。設定が面倒。
    Laravelに次いで人気
  3. CodeIgniter
    速度重視の人が使うらしい。メンテ案件が多いらしい。詳細は不明。
  4. CakePHP
    過去の遺物。メンテ案件が多いらしい。
全般に言える問題点は、
PHP言語自体が、メジャーアップグレードもしくはマイナーアップデートで下位互換性のない変更を高確率で仕込んでくることです。
PHPは、オープンソースで利益を出している団体や納品業者にフレンドリーな仕様なんです。逆に言えば、パーソナルや利益を生まない団体などは、その仕様変更は足かせになるだけです。

採用するフレームワークもPHPの言語仕様変更に追従できなければいけません。

開発に利益を伴わない場合は、PHPの仕様変更に耐えられるバイタリティのあるフレームワークを採用しないとフレームワークが開発終了になった場合共倒れすることになります。

  • PHP案件で本当にいいのかどうか
    メンテの労力まで考慮して言語仕様の安定したPHP以外の言語のほうがいいのではないかなど
  • 採用予定のフレームワークは、PHPのバージョンアップに追従できるだけの余力があるか
  • 採用したフレームワークの仕様変更に自分たちが追従できるかどうか
  • 本当にフレームワークが必要かどうか。

数年後また新しいフレームワークが登場しているでしょうね

Laravelのサポート期間
通常版 実質 6か月~1年
LTS 実質 2~3年
期間が非常に短いのはいいのだけど、メジャー番号が同じなのに互換性のない変更を多々やってくれるのが問題。採用する際はデメリットをよく検討しよう
カテゴリー: General
2018.02.05

php-5.4.28
make error

cp: cannot stat sapi/cli/php.1: No such file

https://bugs.php.net/bug.php?id=66842

はぁ!!?
修正消したら コンパイル通りましたよ!!

--- php-5.4.28/Makefile.global  2014-04-29 15:44:00.000000000 +0900
+++ php-5.4.28/Makefile.global  2014-05-24 19:03:42.000000000 +0900
@@ -113,7 +113,7 @@
        find . -name \*.la -o -name \*.a | xargs rm -f 
        find . -name \*.so | xargs rm -f
        find . -name .libs -a -type d|xargs rm -rf
-       find . -name \*.1 | xargs rm -f
+#      find . -name \*.1 | xargs rm -f
        rm -f libphp$(PHP_MAJOR_VERSION).la $(SAPI_CLI_PATH) $(OVERALL_TARGET) modules/* libs/*

カテゴリー: General
2014.05.24

debianのNetbeans IDE Xdebugの設定方法

Debian付属のNetbeansは、古いので公式サイトから最新のものをダウンロードします。
コンソールで実行するとJDKがないぞといわれますので
パッケージマネージャーから、openjdk-7-jdk というものをインストールします。

(公式の netbeans を使う場合)
apt-get update
apt-get install openjdk-7-jdk
sh ./netbeans-8.0-php-linux.sh

(Debianの netbeans を使う場合)
apt-get update
apt-get install openjdk-7-jdk netbeans

(1) PHPの設定
/etc/php5/mods-available/xdebug.ini
というファイルに
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
を追加します

cat debian7-xdebug.diff
--- /etc/php5/mods-available/xdebug.ini 2014-05-18 22:24:25.498175332 +0900
+++ /etc/php5/mods-available/xdebug.ini 2014-05-28 12:03:38.278355660 +0900
@@ -1 +1,6 @@
zend_extension=/usr/lib/php5/20100525/xdebug.so
+
+xdebug.remote_enable=on
+xdebug.remote_handler=dbgp
+xdebug.remote_host=localhost
+xdebug.remote_port=9000



(2) Netbeans IDE
(2-1)ブラウザの追加
iceweaselは firefoxを選択しても動きますが iceweaselの設定をしてみましょう。
 ツール オプション 一般 Webブラウザ 編集
 追加
 名前 iceweasel
プロセス  /usr/bin/iceweasel
引数 -remote "openURL({URL})

(2-2) プロジェクトプロパティ
 実行方法 PHP組み込みWebサーバー


Netbeans IDEを再起動してみてください

これで、
Netbeans IDE
からPHPのデバッグができます。



Netbeans IDEでPHPデバッグできない場合は、
PHPの設定に問題がある場合が多いようです
カテゴリー: Linux
2014.05.28

cygwin
PHP Fatal error: Out of memory (allocated 49807360) (tried to allocate 2140027 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

451: $result = zlib_decode($result);

なぜか50MBしか割り当てられていないとエラーが表示されます。

確認するが 512MBきちんと割り当てられている。
php -i | grep memory_limit
memory_limit => 512M => 512M

php -r "\$s = str_repeat(' ', 1000*1000*1000);"
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 1000000024 bytes) in Command line code on line 1

zlib_decode関数が怪しい
ということでzlib_decode関数をいじめてみます。
php -r "\$s = zlib_encode(' ',ZLIB_ENCODING_DEFLATE); str_repeat(\$s, 100*1000*1000);"
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 900000024 bytes) in Command line code on line 1
予想と違う結果で、きちんと設定値が返ってきました。

ということは、
・cygwinのphpにメモリリーク
・phar がメモリを食いつぶしている
・composer がメモリを食いつぶしている
あたりが疑われます

これ以上の追及は時間の無駄(というかわからない)なので
dosプロンプトで実行して解決
curl -O https://getcomposer.org/composer.phar
php composer.phar オプション
2018.06.20

[ php8.0 ] Error -Wno-implicit-fallthrough

執筆:2022.07.14
編集:2022.07.14
編集:2022.07.15


サーバーで提供されているPHP8.0が、必要な拡張がはいっていないんですよね。
ということで恒例の丸ごとbuild

[ php8.0 ]

Error -Wno-implicit-fallthrough

grep -R "\-Wno-implicit-fallthrough" ./
./Zend/Zend.m4
./configure

GCC 7 : -Wno-implicit-fallthrough

gcc -v : gcc version 4.2.1 20070831 patched [FreeBSD]

uname -a | sed -e "s/w[0-9][0-9]*/w***/g"

FreeBSD www***.sakura.ne.jp 9.1-RELEASE-p24 FreeBSD 9.1-RELEASE-p24 #0: Thu Feb 5 10:03:29 JST 2015 root@www***.sakura.ne.jp:/usr/obj/usr/src/sys/SAKURA17 amd64

uptime
12:26AM up 2705 days, 18:54, 0 users, load averages: 0.15, 0.25, 0.34

さくらインターネットの共有サーバー 古すぎる。
サーバー導入後に更新しないからねぇ。
お知らせの新サーバー移行の案内が来るそうですが、半年以上経過しても一向に来る気配ないし🤔
こそっと移行ツールなるものを発見しました
https://secure.sakura.ad.jp/rs/cp/server/server-migration

コントロールパネル:サーバー情報:移行ツール
どうしよう移行しちゃおうかな!!
その前にバックアップを・・・。
メールがDNSのIP変更で、不着になるかもだから深夜に決行すれば被害がないかな。

ライトプラン 容量が100GBになったから、ガンガンぶち込んだら対応できそうですね
gcc7いれちゃいますか👯‍♀️
ライトプランでも、工夫すれば、シェルコマンド使えますからね
この場合の問題点はサーバーがアップグレードされたときなんですね。根こそぎ.soのリンクエラーで落ちますから。(過去に経験あり)
サイトダウンですよ。
なので、なるべく提供のまま使いたいのですが!! 古すぎて 必要なライブラリがない😱
buildするなら、フォルダ階層は一発で 切り替え、ごみ捨てやすくしたほうがいいですね。
echo $HOME/local.`uname -r | sed "s/\..*//g"`

ln -s $HOME/local.`uname -r | sed "s/\..*//g"` $HOME/local

丸ごとぽいっと構築したかったですが
手動で 必要な設定して phplizeしたほうが今後は早いようですね。
エラーがでたら、-Wno-implicit-fallthroughを削り落してからやり直せばbuildはできるみたい、

VPS なら
常に最新のライブラリに自動でアップデートできる。
WebARENAとか安いし🤩
VPSはセキュリティ設定が面倒そうですね。😫


PHP7.4で 継続するのもありでしたが
サーバー提供のPHP8にしたらサイトがあちこちダウン。
さくっと修正して、立ち直り。
ついでにアクセスのほぼない 役目の終えた 一部のコンテンツを終了。

ということで 当面は 現状維持ですね

PHPでサイト作るのはよくないですね。マイナーチェンジでも、おきて破りの意図的な破壊的言語変更が入るので
定期的にかなりの手間がかかります。
下位互換性のある言語でWEBは構築したほうがいいですね。

PHP言語
オンラインゲームの素材集めの周回じゃないんだから、破壊的な文法仕様変更はしないでほしいね。

» php8.0 ] Error -Wno-implicit-fallthrough'">続きを読む

カテゴリー: General
2022.07.14

タイトル

執筆:2024.03.03
編集:2024.03.03


PHP8.1からPHP8.2へ 変更してみた

体感ですごくレスポンス早くなりました。
体感で半分以下のくらいの時間になっているような気がします

アップグレードしてよかったです。

» PHP8.1からPHP8.2へ'">続きを読む

カテゴリー: General
2024.03.03

PHP5からPHP7への移行

実行速度比較
  • うちのサイト(web) 速くならない。超軽量に作っているから関係ないみたい。
  • ローカルで重い処理させる、PHP7のほうが50%くらい速くなることがある

互換性
PHP7へは結構互換性を損なうので、PHP5.2からPHP5.3並みに互換性を損なうので注意。
 今後も数年したら修正なしに今作ったスクリプト動きません。みたいなことになるでしょうから
・長期的な視点からすると大きなプロジェクトは、PHP言語ではなく言語使用があまり変化しないC++CGIのほうが延命するかも。

自社への需要を増すためと
再受注めあてにソフトメーカーと結託していませんかっていうくらい、互換性を損なう変更してくれますよね

今回は、/e 修飾子の廃止で、あちこち結構ひどいことになってますね


» PHP7への移行'">続きを読む

カテゴリー: General
2016.05.21

※ この記事の内容は古くなっています
coreserverに移転しようと思っていたのですが

スクリプトが動きません。
最初は、パーミッションの問題と思いましたが
同じスクリプトでパラメーターによって
動いたり、エラーがでたりするので
表示されるとおりにしてみてみました。

AddType application/x-httpd-phpcgi-debug .php
をいれなさいと表示されるので いれると
ページ最後に
PHPで以下のエラーがでました。
*** glibc detected *** malloc(): memory corruption: 0x087f4090 ***

coreserver glibc detected malloc(): memory corruptionで検索すると
どうやら
これが原因らしい。
【要望フォーラム】PHPが使用しているlibxmlのバージョンのアップグレード
http://sb.xrea.com/showthread.php?t=13001

で スクリプトの先頭で phpinfo(); exit; してみる

Hostname:Port www.m33.coreserver.jp:80
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.19

うーん。

比較のためにさくらでも phpinfo(); してみる
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.7.3

あちゃー、xreaは、メンテの悪いサーバーってうわさは聞いていましたが
有料サービスもですか・・・。
2008年のサポート掲示板の件が 2011.11になっても更新されていないってことなので
先が見えないから、契約するのは ちょっと保留というか取りやめですね。
「契約するぞー!」モードだったので
非常に残念ですが、さくっとcoreserverのお試しをキャンセルさせていただきます。

メールウイルス検知は、
ウィルスメールに「****VIRUS****」という件名を加えます
という 件名表記だけにどん引きしましたが、
まぁ、それは、別にPCで受信時に検知できるので
なくてもOKなんです。

しかしですね、
xmlパースできないと困ります!!
DBが使えないより、最悪ですよ!!

もうさくらは、解約申請したので、継続できないから
もー ロリポしかないです。

よし、「コロリポ」「ロリポ」うーん。。。
どっちにしよう・・・。

» 続きを読む

2011.11.02

laravel 5.6 定義済み グローバル関数

ヘルパー関数でグローバル関数が定義されているので注意されたい。
次のコマンドで検索することができる
find . -type f -name "helpers.php"
./vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
./vendor/laravel/framework/src/Illuminate/Support/helpers.php
./vendor/mockery/mockery/library/helpers.php

次のコマンドで、関数一覧を表示できる
grep "function_exists" ファイル名 | grep -oP "'.+'" | sort



エラー
"Too few arguments to function redirect(), 0 passed in vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php on line 107 and exactly 1 expected "
はい。検索 redirect
  グローバル関数 redirect かぶり見たいですね。

Laravelに既存のプロジェクトを移行しようと思ったのですが
namespace使うように書き換えるか、既存のプロジェクトのredirect関数を別名に変更するしかないですね。
当然一括置換できる後者しか選択の余地がないですね。

ここで定義されています
vendor/laravel/framework/src/Illuminate/Foundation/helpers.php

このファイルで定義されいる同名関数が使われている場合は、誤動作する可能性がある。

一覧
vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
'__'
'abort'
'abort_if'
'abort_unless'
'action'
'app'
'app_path'
'asset'
'auth'
'back'
'base_path'
'bcrypt'
'broadcast'
'cache'
'config'
'config_path'
'cookie'
'csrf_field'
'csrf_token'
'database_path'
'decrypt'
'dispatch'
'dispatch_now'
'elixir'
'encrypt'
'event'
'factory'
'info'
'logger'
'logs'
'method_field'
'mix'
'now'
'old'
'policy'
'public_path'
'redirect'
'report'
'request'
'rescue'
'resolve'
'resource_path'
'response'
'route'
'secure_asset'
'secure_url'
'session'
'storage_path'
'today'
'trans'
'trans_choice'
'url'
'validator'
'view'

vendor/laravel/framework/src/Illuminate/Support/helpers.php
'append_config'
'array_add'
'array_collapse'
'array_divide'
'array_dot'
'array_except'
'array_first'
'array_flatten'
'array_forget'
'array_get'
'array_has'
'array_last'
'array_only'
'array_pluck'
'array_prepend'
'array_pull'
'array_random'
'array_set'
'array_sort'
'array_sort_recursive'
'array_where'
'array_wrap'
'blank'
'camel_case'
'class_basename'
'class_uses_recursive'
'collect'
'data_fill'
'data_get'
'data_set'
'dd'
'e'
'ends_with'
'env'
'filled'
'head'
'kebab_case'
'last'
'object_get'
'optional'
'preg_replace_array'
'retry'
'snake_case'
'starts_with'
'str_after'
'str_before'
'str_contains'
'str_finish'
'str_is'
'str_limit'
'str_plural'
'str_random'
'str_replace_array'
'str_replace_first'
'str_replace_last'
'str_singular'
'str_slug'
'str_start'
'studly_case'
'tap'
'throw_if'
'throw_unless'
'title_case'
'trait_uses_recursive'
'transform'
'value'
'windows_os'
'with'
カテゴリー: ぷろぐらみんぐ
2018.06.23

phpのバグ dirname関数は日本語対応未熟(php 5.3)

php6は、正常に動作しましたが

現行のバージョンは以下のコードでエラーが起きます
UTF8の文字に対してdirnameは、問題ないですが
現状 utf8でファイル名を取得できるのか?