php4とphp5での数値の取り扱いの違い、指数形式にしたくない

このQ&Aのポイント
  • 質問者は、利用しているサーバのphpのバージョンがphp4からphpを5に変更されることになり、スクリプトの部分の振る舞いがphp4とphp5で異なることに気づきました。
  • 具体的には、idという変数が指数形式で表示されてしまうことになり、正しく機能しなくなってしまいます。
  • 質問者は、php5でもphp4と同じ結果を得る方法を教えていただきたいとしています。
回答を見る
  • ベストアンサー

php4とphp5での数値の取り扱いの違い、指数形式にしたくない

利用しているサーバのphpのバージョンがphp4からphpを5に変わる ことになり、動作させているスクリプトに移行用の変更を行って いるのですが、下記コードの部分の振る舞いがphp4とphp5で異な っていてphp5では動作しなくなってしまっています。 1 <?php 2 echo "start\n"; 3 $debStr=''; 4 $newid='00000006820000000000'; 5 $debStr .= "Line 5 id=".$newid."\n"; 6 $i = 0; 7 while (substr($newid,$i,1) == "0") { 8 $i++; 9 } 10 $j = 20 - $i; 11 $newid = substr($newid,$i,$j); 12 $debStr .= "Line 12 id=".$newid."\n"; 13 $newid = $newid + "1000000000"; 14 $debStr .= "Line 14 id=".$newid."\n"; 15 echo $debStr; 16 ?> をphp4で実行すると 1 [xxx@devxxx Test]$ php -v 2 PHP 4.4.8 (cli) (built: Feb 4 2008 16:46:07) 3 Copyright (c) 1997-2008 The PHP Group 4 Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies 5 [xxx@devxxx Test]$ php msgid.php 6 start 7 Line 5 id=00000006820000000000 8 Line 12 id=6820000000000 9 Line 14 id=6821000000000 となるのですが php5で実行すると 1 [xxx@devxxx Test]$ php -v 2 PHP 5.2.6 (cli) (built: May 7 2008 11:01:30) 3 Copyright (c) 1997-2008 The PHP Group 4 Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies 5 [xxx@devxxx Test]$ php msgid.php 6 start 7 Line 5 id=00000006820000000000 8 Line 12 id=6820000000000 9 Line 14 id=6.821E+12 実際のサーバ上でのphpバージョンは、 PHP 4.4.7と となり9行目の "id=6821000000000"が"id=6.821E+12"のように指数で の表示になり、idとして機能しなくなってしまいます。 どなたかphp5でもphp4と同じ結果を得る方法を教えていただけないで しょうか。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

print formattedを使う方法を思いつきました $debStr .= "Line 14 id=".sprintf("%.0f", $newid)."\n"; echo $debStr;

gooMach
質問者

お礼

ありがとうございました、教えていただいた通りでうまくいきました。

関連するQ&A

  • Visual C++ これはなんですか?

    Visual C++ これはなんですか? PHPをインストール?した時に表示されるらしいんですが、これはエディターのなまえですか? PHP 8.1.1 (cli) (built: Dec 15 2021 10:36:13) (NTS Visual C++ 2019 x64) Copyright (c) The PHP Group Zend Engine v4.1.1, Copyright (c) Zend Technologies

  • クラスのメンバが上書きされる。

    クラスのメンバーがなぜか上書きされてしまう事態になってしましいます。 以下はソースです。そのまんまです。 <?php $obj = new CMessegLog(); $obj->setMsg1("gogo"); $obj->setMsg2("toto"); echo $obj->$Msg1."\n"; echo $obj->$Msg2."\n"; class CJapanTotalMusic { var $msg1; var $msg2; function setMsg1($message) { $this->$Msg1 = $message; } function setMsg2($message) { $this->$Msg2 = $message; } } ?> これを実行すると下記のように、 $Msg1が$Msg2に上書きされたような出力を返してきます。 ----------------------- $ php MsgLog.php toto ※ gogoであってほしい。 toto           ----------------------- どうなっているんでしょうか? よろしくお願いします。 PHPの環境は PHP 5.0.4 (cli) (built: Jun 12 2005 23:14:24) Copyright (c) 1997-2004 The PHP Group Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies です。

    • ベストアンサー
    • PHP
  • PATHは;C:\xampp\phpでOK^^

    http://okwave.jp/qa/q8480862.html の続きですが   PATHは以下で解決しました^^・・と思いますが!?  システムプロパティ⇒詳細設定⇒環境変数⇒システム環境変数⇒Pathの最後に;C:\xampp\php  と入力した。 それで!  コマンドプロンプトを実行した結果が以下です。  c:\>php -v PHP 5.4.19 (cli) (built: Aug 21 2013 01:12:03) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies c:\>cd C:\xampp\htdocs\study.localhost C:\xampp\htdocs\study.localhost>php stringcast.php 100 ・ソnum is 100 C:\xampp\htdocs\study.localhost> 以上、OKでしょうか!?  宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • windows7でpathの設定

    windows7でpathの設定をするために以下のページの 手順通りにやってみました。 http://www.phpbook.jp/install/ ところが何度やってもPATHが通りません。 C:\Users\xxx>php -v 'php' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 pathを確認すると以下の通りです C:\Users\xxx>path PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32 \WindowsPowerShell\v1.0\;c:\Program Files\Intel\DMIX;C:\Program Files\Intel\Serv ices\IPT;c:¥php ちなみにPHPは正常にインストールされているようです c:\php>php -v PHP 5.4.8 (cli) (built: Oct 16 2012 22:30:23) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies どのようにしたら宜しいでしょうか?

  • PHPのコマンドラインでのバージョンとブラウザからみたバージョンが違う

    こんにちは。 サーバを一から構築していて、 Apache 2.2.3をインストールし、 PHPの5.2.9をインストールしたのですが、 PHPのコマンドラインからチェックしたバージョンと、 ブラウザで「phpinfo()」したときのバージョンが違い、そういうことがあるのかを確認したく、ご質問させていただきます。 コマンドラインで、「php -v」したときに、 ------- PHP 5.1.6 (cli) (built: Apr 7 2009 08:00:04) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies ------- となるのですが、ブラウザで「phpinfo()」を記述したPHPファイルを確認すると、 ------- PHP Version 5.2.9 ------- となってしまいます。 これは、PHPのインストールが、重複して行われてしまい、 複数のバージョンが存在してしまっているのでしょうか? コマンドラインでの「php.ini」の場所は、 /etc/php.ini で、ブラウザから確認した「php.ini」の場所は、 /usr/local/php/lib/php.ini になっています。 なにか、気づく点や、不足している情報などありましたら指摘いただけると助かります。 宜しくお願い致します。

  • PHP5.3へバージョンアップしたら・・・

    PHPのバージョンを4系から5.3へバージョンアップしたらMySQLの挙動が変になりました。 これまでは、 # mysql -u -p [enter]でパスワードを要求され、パスワード入力後MySQLにログインできていて、 mysql>show databases;を実行するとこれまでのデータベース一覧が当然出てきました。 バージョンアップ後、 # mysql -u -p [enter]でパスワード要求もなくログインされ、 mysql>show databases;を実行すると、 +--------------------+ | Database +--------------------+ | information_schema | test +--------------------+ のみ表示されます。 どうしてこうなったのかわかりません。 PHPのバージョンアップは以下のとおりしました。 以前のPHPバージョンを削除 yum remove php php-* 5.3のインストール # yum install php53 php53-mbstring php53-mysql バージョンは # php -v PHP 5.3.3 (cli) (built: Oct 1 2013 18:32:37) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 上記のようにバージョンアップされています。 なお、WordPressをインストールした際にも以前は通常通りインストールできたのですが、 5.3にしてからは 「データベース接続確立エラー」と表示されDBへ接続できないようで困っています。 ちなみにOSはCentOS5.3です。 現在大変困っております。 助けてください。。。

  • PHP5.3へバージョンアップしたら・・・

    PHPのバージョンを4系から5.3へバージョンアップしたらMySQLの挙動が変になりました。 これまでは、 #mysql -u -p [enter]でパスワードを要求され、パスワード入力後MySQLにログインできていて、 mysql>show databases;を実行するとこれまでのデータベース一覧が当然出てきました。 バージョンアップ後、 #mysql -u -p [enter]でパスワード要求もなくログインされ、 mysql>show databases;を実行すると、 +--------------------+ | Database +--------------------+ | information_schema | test +--------------------+ のみ表示されます。 どうしてこうなったのかわかりません。 PHPのバージョンアップは以下のとおりしました。 以前のバージョンを削除 yum remove php php-* 5.3のインストール # yum install php53 php53-mbstring php53-mysql バージョンは # php -v PHP 5.3.3 (cli) (built: Oct 1 2013 18:32:37) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 上記のようにバージョンアップされています。 なお、WordPressをインストールした際にも以前は通常通りインストールできたのですが、 5.3にしてからは 「データベース接続確立エラー」と表示されDBへ接続できないようで困っています。 わかる方どうかご教示お願いいたします。

    • 締切済み
    • PHP
  • phpからPostgreにconnectで失敗

    DBサーバーに対して、WEBサーバーからアクセスしています。 同じphpソースで同じDBにアクセスしているのに一方はconnectに成功して、一方は失敗します。 <前提> インターネット上のDBサーバーにPostgreSqlがあります。 それとは別のローカルWEBサーバーのphpからPostgreSqlのデータを読んでいてこれは上手く行っています。 ローカルWEBサーバーのコピー環境をインターネット上に立てようとしていますが、これが上手く行きません。 <DBサーバー> OS:CentOS7 dbms:PostgreSql host:dbserver.net port:5432 user:user1 password:password1 dbname:db1 設定ファイル /var/lib/pgsql/data/pg_hba.conf # PostgreSQL Client Authentication Configuration File # TYPE DATABASE USER ADDRESS METHOD host all user1 0.0.0.0/0 md5 設定ファイル # /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' port = 5432 <ローカルWEBサーバー> host:test.local OS:CentOS7 Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies <php中のコネクト部分> <?PHP // PostgreSQL 接続をオープンする $dbconn = pg_connect("host=dbserver.net port=5432 user=user1 password=password1 dbname=db1");  :  :  : <セットアップ中のWEBサーバー> host:test.com OS:CentOS7 Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies <セットアップ中のWEBサーバーでのエラー> Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Permission denied Is the server running on host 同じ事をしているのに、どうして一方はconnectに失敗するのでしょうか?

    • ベストアンサー
    • PHP
  • 【php】phpinfo関数による設定確認できない

    すみません。 PHPを超初心者です。 早速、導入でつまづいているのでご教授頂けませんでしょうか。 【環境】 OS:Windows XP pro PHPversion:5.3.6 Apache:2.2.17 【問題】 確認のため、以下のソースをコードを入力しても ソースコードそのままが出力されてしまう。 (PHPの設定状況などが表示されません。) 【確認したこと】 (1) 以下の出力結果から、PHPはインストールされています。 >php -v PHP 5.3.6 (cli) (built: Mar 17 2011 10:37:07) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies (2) webブラウザでアドレスにhttp://localhost/を入力すると 「It works」と出力されるので、アパッチのインストールは問題なさそうです。 (3) 以下のパスにphpinfo関数を含んだファイルをおきました。 パス: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\phpinfo.php 内容: <?php phpinfo(); ?> (4)C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf に以下の以下の2行を追記しました。 #LoadModule speling_module modules/mod_speling.so #LoadModule ssl_module modules/mod_ssl.so LoadModule php5_module C:/php/php5apache2_2.dll(これを追記) PHPIniDir "C:/php"(これを追記) これらから何か分かりますでしょうか。 必要であれば、他の情報を提出します。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP版のPDFlibのインストール

    PHP版のPDFlibのインストールがうまくいきません。 http://pdflib.jp/product/download/pdflib.html#pdflib-archives のLinuxのPHP版をダウンロードしました。解凍すると、 php-510 php-520 php-520mt php-530 php-530mt という種類があったので、 php -v PHP 5.3.6-13ubuntu3.2 with Suhosin-Patch (cli) (built: Oct 13 2011 23:19:13) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies を使っている私はphp-530mtのlibpdf-php.soをコピーしました。 mtはmulti-threadingサーバー用らしいです(自分のはXAMPPですけど、よく分からないのでこれで)。 phpinfo()によりますと、私のextension_dirは /opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/ です。 この直下に"libpdf_php.so"をコピーしました。 そして、/opt/lampp/etc/php.ini の中で extension=libpdf-php.so と追記して保存し、XAMPPを再起動したのですが、起動するときも停止するときも Warning: PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/libpdf_php.so' - /opt/lampp/lib/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/i386-linux-gnu/libstdc++.so.6) in Unknown on line 0 というメッセージが出ます。 GCC_4.2.0は入ってないの?と思ってgcc -vを実行すると 組み込み spec を使用しています。 COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper ターゲット: i686-linux-gnu configure 設定: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu スレッドモデル: posix gcc バージョン 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) の通り、バージョンは4.6.1です。 ここまでやっても動かないんですが、どうしたらいいのでしょうか? ちなみに、--enable versioningとかいうのを外してからconfigureとかいうのをしてあげると直るかもしれないらしいですが、この記事↓では http://d.hatena.ne.jp/koyhoge/20061213/1165999933 「CLIではちゃんと認識されるのに」と書かれていて、私のはCLIらしいので、別の問題ではないかと思っています。 どなたかお助け下さい。出来る限り補足します。では、よろしくお願いします。

    • ベストアンサー
    • PHP