Browsing articles in "PHP"
2月
20
2010

PHPで大きな整数を表示する方法

PHPで普通に大きな整数を表示しようとすると、

<?php
$n = pow(10,20);
echo $n;
?>

こんな感じになってしまいます。

1.0E+20

なにこれきもちわるい。

そんなわけでこんな感じにするといいですよ。

<?php
$n = pow(10,20);
printf('%f', $n);
?>
100000000000000000000.000000

その他の事例

小数点以下表示しない

<?php
$n = pow(10,20);
printf('%.0f', $n);
?>
100000000000000000000

PHPの値として受け取ってから表示

<?php
$n = pow(10,20);
echo sprintf('%.0f', $n);
?>
100000000000000000000

ちなみに。。

<?php
$n = pow(10,30);
printf('%.0f', $n);
?>
1000000000000000019884624838656

何か下の方にゴミが。。

12月
27
2009

美しきXOOPSの世界

ホダ塾 – もっとXOOPS!より、HD-1.0.4を使用。
/hd_full_1_0_4/html/modules/legacy/include/groupperm.php 35行目から

if (is_array($_POST['perms']) && !empty($_POST['perms'])) {
  $gperm_handler = xoops_gethandler('groupperm');
  foreach ($_POST['perms'] as $perm_name => $perm_data) {
    if (false != $gperm_handler->deleteByModule($modid, $perm_name)) {
      if (is_array($perm_data['groups'])) {
        foreach ($perm_data['groups'] as $group_id => $item_ids) {
          foreach ($item_ids as $item_id => $selected) {
            if ($selected == 1) {
              // make sure that all parent ids are selected as well
              if ($perm_data['parents'][$item_id] != '') {
                $parent_ids = explode(':', $perm_data['parents'][$item_id]);
                foreach ($parent_ids as $pid) {
                  if ($pid != 0 && !in_array($pid, array_keys($item_ids))) {
                    // one of the parent items were not selected, so skip this item
                    $msg[] = sprintf(_MD_AM_PERMADDNG, '<b>'.$perm_name.'</b>', '<b>'.$perm_data['itemname'][$item_id].'</b>', '<b>'.$group_list[$group_id].'</b>').' ('._MD_AM_PERMADDNGP.')';
                    continue 2;
                  }
                }
              }
              $gperm =& $gperm_handler->create();
              $gperm->setVar('gperm_groupid', $group_id);
              $gperm->setVar('gperm_name', $perm_name);
              $gperm->setVar('gperm_modid', $modid);
              $gperm->setVar('gperm_itemid', $item_id);
              if (!$gperm_handler->insert($gperm)) {
                $msg[] = sprintf(_MD_AM_PERMADDNG, '<b>'.$perm_name.'</b>', '<b>'.$perm_data['itemname'][$item_id].'</b>', '<b>'.$group_list[$group_id].'</b>');
              } else {
                $msg[] = sprintf(_MD_AM_PERMADDOK, '<b>'.$perm_name.'</b>', '<b>'.$perm_data['itemname'][$item_id].'</b>', '<b>'.$group_list[$group_id].'</b>');
              }
              unset($gperm);
            }
          }
        }
      }
    } else {
      $msg[] = sprintf(_MD_AM_PERMRESETNG, $module->getVar('name').'('.$perm_name.')');
    }
  }
}

なんじゃこりゃー!!

12月
15
2009

PHPは実行の途中でブラウザを閉じると、処理が中断されるのか?

結論としては、

  1. ignore_user_abort という設定値(php.iniなd)で処理を止めるかどうかを決められる
  2. ignore_user_abortがfalseであっても、止まらないことがある

1はそのままで自明なのですが、2に関しては、どうやら何かを出力しないとブラウザが閉じられたかどうか分からない模様?なので、何か例えば、バックグラウンドで重い処理をしたいときなど、とりあえず走りきってほしいときには、こっそりiframeやらimgタグなどを仕込んで、何も出力しないPHPにアクセスさせるようにすれば、実現可能じゃなかろうか。

参考リンク

  1. PHP: 実行時設定 – Manual
  2. LAMP開発メモ » Blog Archive » ユーザがブラウザを閉じた後、実行中の PHP の処理はどうなる?
  3. ある技術者の備忘録 » PHPの処理を中断させない方法
  4. 作業日報 | ignore_user_abort(false)でPHPが処理を中断しない件
  5. GASOLINE STAND » ignore_user_abort=falseなのにスクリプトが止まらない

Now loading...

PR

Flickr