トップページ⇒php
1001コメント280KB

【PHP】質問スレッドpart20【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/06 15:44ID:paJ4kjjQ
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
065262004/08/19 19:32ID:???
なるほどね、トンクス
とりあえず銀行に文句言ってくるわ
0653nobodyさん04/08/19 19:34ID:???
>>620
ネタ乙
0654Imo ◆.jC7ANgFY. 04/08/19 19:34ID:???
>>651
setcookieのオプションを全部うめてみればいかが?
0655nobodyさん04/08/19 19:38ID:???
いい加減コテハンうざいと思うのは俺だけか。
0656nobodyさん04/08/19 19:43ID:???
setcookieのオプションとは?(汗
065753004/08/19 19:47ID:???
どうも分からないので、PHPから直接oggファイルを弄る事にします。
エンコード後にタグ変える必要も出て来そうですし。
助言して下さった方々、ありがとうございました。

>>537
ちゃんとした物が出来たら何処かに放り投げておきます。
何処に投げれば良いかな?
使う人なんて居なさそうですけど。 ^ ^
0658nobodyさん04/08/19 19:49ID:???
>648
Cookieのpath設定してる?
0659軟式PHP04/08/19 19:49ID:???
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |       >>655
/     ∩ノ ⊃  ヽ  
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0660nobodyさん04/08/19 20:15ID:???
setcookie("ck", "a=1", time()+3600,"/");
pathは"/"としていますが、間違ってますかね?
0661nobodyさん04/08/19 20:21ID:???
変数に格納されない_| ̄|○
鯖を変える前まではできていたんだが
鯖を変えたらできなくなったぽ(´・ω・`)ショボーン
ちなみにどちらもPHP対応です、何が違うんでしょうか?
0662nobodyさん04/08/19 20:38ID:???
>661
鯖が違う
0663軟式PHP04/08/19 20:43ID:???
\
  \(⌒-⌒)
   (・(ェ,,)・ ) < そんなエサで俺様がクマー!!
    `つ   `つ      (´⌒(´
     ゝ_つ_`つ≡≡≡(´⌒;;;≡≡≡
              (´⌒(´⌒;;
      ズザザザ


    どこまで行クマ?
\   ̄∨ ̄ ̄ ̄ ̄ ̄ ̄    (´´
  \(⌒-⌒)   o       (´⌒(´
   (・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
          ̄ ̄     (´⌒(´⌒;;
      ズザーーーーーッ
0664nobodyさん04/08/19 21:15ID:JfzAv2ME
みなさんは、掲示板などのログを保存する際に区切り記号は
どのようなものにしていますか?
私はタブにしているのですが、ネットでは<>が圧倒的に多いので
その利点なども教えていただけると幸いです。
0665nobodyさん04/08/19 21:22ID:???
Kent




タブでいいよ。<>は本文にないとも言い切れないし
0666nobodyさん04/08/19 21:25ID:???
自分もタブ。
ログファイル開いた時も見やすいし。
0667nobodyさん04/08/19 21:31ID:???
,
0668nobodyさん04/08/19 21:31ID:???
fopen()でサイズの大きいファイルを開くにはどうすれば良いですか?
FATAL: emalloc(): Unable to allocate エラーが出ます
file_get_contents()でも使って変数に読み込むしかないのかな


タブか…良いことを聞いた。φ(.. )メモメモ
0669Imo ◆.jC7ANgFY. 04/08/19 21:43ID:???
>>668
freadの第二引数を512*1024くらいにしながら順番に処理するべし。
0670nobodyさん04/08/19 21:47ID:???
>>668
fopenごときでそんなエラーが出るはずは無いんだが・・・。

・根本的な対処
スクリプトのメモリを無駄に使っている部分を直す。
(ファイルの中身を一気に変数に入れてたのを一定サイズに抑えるとか)
・刹那的な対処
PHPやWebサーバのメモリ関係の制限を緩和する。
(当然他の部分に皺寄せが行くので刹那的)
0671nobodyさん04/08/19 21:59ID:???
>>669 >>670
fopenの所為じゃなかったのか…
切り分けしてきます
067267104/08/19 22:11ID:???
あ(汗
他のところでミスってました。
1GBも読み込もうとしてたorz
お手数をおかけしました。
0673nobodyさん04/08/19 22:13ID:???
タブってどんなの?
0674nobodyさん04/08/19 22:18ID:???
>673
\t
0675nobodyさん04/08/19 22:19ID:???
fopenもmallocを呼ぶけどな
0676nobodyさん04/08/19 22:22ID:???
そんなの当たり前だろ・・・
0677nobodyさん04/08/20 01:15ID:???
ログはserialize() / unserialize() を使う方がPHP的で良いんじゃないだろうか。
0678Imo ◆.jC7ANgFY. 04/08/20 01:31ID:???
>>677
実はserializeはexplodeより高速という(ry
0679nobodyさん04/08/20 02:26ID:???
>>676
>>670
0680nobodyさん04/08/20 05:40ID:???
PHPでコマンドラインスクリプトつくってます。
標準入力から読み込む方法と、標準エラー出力にだす方法がわかりません。
マニュアルのどこに書いてありますか?
0681nobodyさん04/08/20 06:02ID:???
〜〜〜このスレはマニュアルの読み方から教えるスレになりました〜〜〜
0682nobodyさん04/08/20 06:25ID:???
標準入力とエラー出力が判らない人がいるのは、
WebPage記述用スクリプトとして生まれてきた性なんだろうな。
0683nobodyさん04/08/20 06:34ID:???
まあPCスキルが高くて経験が豊かな俺から言わせてもらえば
UNIXを知らない奴はプログラム作っちゃだめだな
0684nobodyさん04/08/20 07:15ID:???
>>681
マニュアルのどこに書いてあるのか分からなかったので質問しました。
Windows用のマニュアル(*.chm)を使ってるのですが、キーワードにないし、
検索しても見つかりません。
件枠キーワード: standard output, stdin, stdout, ...
なお英語版のマニュアル使ってます。
0685nobodyさん04/08/20 07:55ID:???
>>684
stdin で検索したらあったけどな。
(*.chm)日本語版だけど
0686軟式PHP04/08/20 09:04ID:???
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |       >>683
/     ∩ノ ⊃  ヽ  
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0687nobodyさん04/08/20 13:24ID:???
軟式たべろ
0688nobodyさん04/08/20 15:13ID:???
長いHTML文中に数十の<?php ?>を埋め込むような場合、
まとめて全てを<?php ?>で囲っちゃった方が負荷が少なかったりします?
大した差は無いかな。。
0689nobodyさん04/08/20 15:18ID:???
>>688
そんなことより、それじゃ読みにくいので、
テンプレート(またはソレっぽいの)として分割してください。
0690nobodyさん04/08/20 16:03ID:???
PHP で作った禁則処理ってどこかにありませんか?
0691nobodyさん04/08/20 16:11ID:???
すみません、質問させてください。
100 / 1.05を計算すと95.238095238095になるのですが、
小数点第何位までと決めることはできますか?
また、やり方もご教授お願いします。
069269104/08/20 16:12ID:ttg46q2U
age忘れました。
0693Imo ◆.jC7ANgFY. 04/08/20 16:14ID:???
>>691
round関数を参照
0694nobodyさん04/08/20 16:15ID:???
PHPのスクリプトからファイルにバイナリデータを出力するにはどうすればよいのでしょうか?
配列に入っている数値を1バイトずつファイルに書き出したいのですが
どうやってもテキストで出力されてしまいます。。。orz
069569104/08/20 16:16ID:???
>>693
ありがとうございました。
0696Imo ◆.jC7ANgFY. 04/08/20 16:22ID:???
>>694
初心者にはchr関数ですべてループさせることをすすめる。

すっきりやりたければこんなことしてもできる。
call_user_func_array('pack', array_merge(array('c*'), $list));
0697nobodyさん04/08/20 16:40ID:???
>>691
$a=round(100/1.05*100)/100;
echo $a; //95.24
0698Imo ◆.jC7ANgFY. 04/08/20 16:42ID:???
>>697
round(100/1.05, 2)のほうがいい
0699nobodyさん04/08/20 16:48ID:???
>>698
うおーー
それでも行けるのかw

ちとスクリプト書き直すよ!
ありがとう〜〜
070069104/08/20 16:50ID:???
>>697-698
なるほど、そういう書き方もありましたか。
$motone=$_POST["money"] / 1.05;
$motone=round($motone , 0); //round関数で$motoneの値を整数にする
と書いていました。
0701nobodyさん04/08/20 16:54ID:???
ところで、最近php初めてようやく上で書いた
$a=round(100/1.05*100)/100;
ってのも覚えたんだけど、
例えば、
function a(){
$zz = 1234;
}
function b(){
echo = $zz;
}
としてもecho = $zz;は表示されないのだけど、
これを$zz = 1234;の値を他のfunctionで使い回す事ってどうやればいいんでしょうか?
今は全部のfunctionで$zz = 1234; を書いてます・・・

よろしければ教えていただきたいのですが。
0702Imo ◆.jC7ANgFY. 04/08/20 16:57ID:???
>>701
function a(){
global $zz;
$zz = 1234;
}
function b(){
global $zz
echo $zz;
}
0703Imo ◆.jC7ANgFY. 04/08/20 16:58ID:???
>>701
b関数内のglobalのセミコロン抜けた。
というわけで報告ついでに別な方法も。

function a(){
define('ZZ', 1234);
}
function b(){
echo ZZ;
}
0704nobodyさん04/08/20 17:02ID:???
>>702>>703さん早速ありがと〜
そういう方法なんですね!
多分マニュアルに書いてあると思うのだけど、
その方法をマニュアルで探す方法がわからなくてw
ありがとうございました!
0705軟式PHP04/08/20 17:36ID:???
\
  \(⌒-⌒)
   (・(ェ,,)・ ) < そんなエサで俺様がクマー!!
    `つ   `つ      (´⌒(´
     ゝ_つ_`つ≡≡≡(´⌒;;;≡≡≡
              (´⌒(´⌒;;
      ズザザザ


    どこまで行クマ?
\   ̄∨ ̄ ̄ ̄ ̄ ̄ ̄    (´´
  \(⌒-⌒)   o       (´⌒(´
   (・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
          ̄ ̄     (´⌒(´⌒;;
      ズザーーーーーッ
0706nobodyさん04/08/20 17:40ID:???
>>702
global は綺麗にスクリプトを書こうとする時邪魔なので
class化してvarにまとめる事をオススメする
070770604/08/20 17:42ID:???
>>706 s/702/701/
0708nobodyさん04/08/20 17:56ID:???
バイナリデータを16進数にして2byteずつ読み込み10進数にする

〜略
$hdata = bin2hex($bdata);
$i=1;
while($i<=$size){
 $ddata = hexdec(substr($hdata,$i*2-2,2));
 $i++;
}
略〜

こういう感じの処理を速くすることはできますか?
forからwhileにしたら少し速くなった
base_convert(,16,10)からhexdecにしたら少し速くなった
これくらいしか思いつかないのでよろしくお願いします。
0709軟式PHP04/08/20 18:04ID:???
class hoge
{
var $zz;
function a()
{
$this->zz = 1234;
}
function b()
{
echo $this->zz;
}
}
0710Imo ◆.jC7ANgFY. 04/08/20 18:07ID:???
>>708
unpackの配列つかえば一発。
0711nobodyさん04/08/20 18:09ID:???
>>708
バイナリデータを一旦16進数にする意味はあるのか?
0712nobodyさん04/08/20 18:23ID:???
〜略
$hdata = unpack("C*",$bdata);
$i=1;
while($i<=$size){
 $ddata = $hdata[$i];
 $i++;
}
略〜

これだと>>708のほうが速いのです。
0713nobodyさん04/08/20 18:40ID:???
PHPAccelerator を 使えば一発。
0714nobodyさん04/08/20 18:49ID:???
>>712
$i=0;
while($i<$size){
 $ddata = ord($bdata[$i]);
 ++$i;
}
だとどうだろうか?
0715nobodyさん04/08/20 18:50ID:???
>>713
実行テストは自分のPC(OSはWindows)で行ってますが、
最後に使うのはレン鯖なのでインストはむりぽ

と思ったけどxreaは実験的に導入してくれてるようです。
0716nobodyさん04/08/20 18:56ID:???
またxreaに厨が増えたのか・・・
0717nobodyさん04/08/20 18:56ID:???
>>714
速くなりました。
ありがとう御座います。

ord -- 文字のASCII値を返す
↑ASCII値ってのが意味わからなかったので触ってませんでした。

これかもPHPの勉強を励んでいきます。
0718Imo ◆.jC7ANgFY. 04/08/20 19:24ID:???
>>717
こうしてほしかったんだけどまぁいいや。
foreach (unpack("C*",$bdata) as $ddata) {
}
0719nobodyさん04/08/20 20:47ID:???
>>718
>>714 の方が少し速いみたいだしメモリ使用量は >>714 の方が少ないので >>714 でいいんじゃないの?
0720nobodyさん04/08/20 21:06ID:ho3qNz5a
http://www.soramimi.info/a-bbs/mbbs/mbbs.cgi?id=12345
管理人殺害!!!
0721Imo ◆.jC7ANgFY. 04/08/20 21:06ID:???
>>719
たしかに巨大ファイルだったら配列に入れない>714の方がはやいがな。
072271404/08/20 21:32ID:???
(´д`*)デヘヘ....
0723カポコン04/08/20 23:07ID:???
久しぶりに良スレになってるな・・・(・д・)。

072468404/08/21 00:29ID:???
>>685
見つかりました。
fopen('php://stdin') とか fopen('php://stderr') とかするんですね。
PHPのことだから、「標準エラー出力に出力する関数」とか、
「標準入力を表す定数」とかがあるんじゃないかと思って、そのあたりを探してました。
でもそうじゃなくて、Streamだったんすね。
あまり美しさを感じない仕様だけど、まあこんなもんか。
ていうかいちいちオープンしなきゃならんのはちょっとだけ面倒。

ありがとうございました。
0725nobodyさん04/08/21 00:39ID:???
PHPプログラムのチューニング、またはプロファイラについて説明したページありませんか?
0726nobodyさん04/08/21 00:41ID:???
>>724
phpではそういう形式で開くようになってる
perlは違う
0727nobodyさん04/08/21 01:25ID:???
>>724
探し方が足らんな。
CLI版なら標準入力を表す定数があるし、
いちいちオープンしなくても入出力できる。
0728nobodyさん04/08/21 14:03ID:???
htmlに出力するところで
echo "<p class=\"2ch\"><? include 'inc/giko.inc'; ?></p></div>";
とやると<? include 'inc/giko.inc'; ?>の部分がそのままでてきてしまいます。
これを出力するにはどうしたらいいでしょうか?
?>で一旦閉じる方法も考えましたが、それだとincludeが全部出力されてしまいちょっと都合が悪いのです。
0729nobodyさん04/08/21 14:28ID:???
ダブルクオートの中で命令が使えるわけ無いだろう。
もし使えたら予約語の文字列を全て把握しなければならない上、
びくびくしながらプログラムを組まなければならなくなる。
0730nobodyさん04/08/21 14:29ID:???
>>728
現在の状況と期待する内容が良く分からんが、
giko.incをphpスクリプトとして実行したいってことなら、
giko.incが <?php 〜 ?>の形式になってないだけじゃないの?
include()の説明を良く見てみ。
073172804/08/21 14:44ID:???
>>729-730
giko.incはhtmlがそのまま入っています。
htmlでメニューだけincludeして使っていたので(使い方間違ってるかもしれませんが)、それをプログラム中のhtml出力にも使いたい訳です。
現在の状況は
 echo "<p class=\"2ch\"><? include 'inc/giko.inc'; ?></p></div>";
html出力
 <p class="2ch"><? include 'inc/giko.inc'; ?></p></div>
と表示されるのを
期待している出力
 <p class="2ch">(;゚Д゚)</p></div>
  ((;゚Д゚)=inc/giko.inc内テキスト)
としたいわけです。
0732nobodyさん04/08/21 14:49ID:???
<?
echo "<p class=\"2ch\">";
include 'inc/giko.inc';
echo "</p></div>";
?>
これで確実にOKと思う
073372804/08/21 14:55ID:???
>>732
おお、いけました。ありがとうございました。
0734nobodyさん04/08/21 16:13ID:???
ファイルのCRC16取得したいんですが、うまくいきません。
http://jp.php.net/crc32
にあるcrc16用の関数を用いて、

function fcrc16($file){
if(!$fp = fopen($file, 'r')){
return 0xffff;
}

// メモリが足りないかも。
$buf = fread($fp, filesize($file));
$crc = crc16($buf);

fclose($fp);
return $crc;
}
としてやったのですが、うまく計算できませんでした。
どのようにすればうまく計算できるでしょうか?
0735nobodyさん04/08/21 16:28ID:???
http://php.us.themoes.org/manual/ja/function.crc32.php
の下のほうにcrc16のサンプルがあるよ
使えるかどうか知らないけどね
0736nobodyさん04/08/21 16:35ID:???
>>727
教えてくれ。
今、コマンドラインで使うスクリプト書いてるが、stderrに吐くのを簡単にしたい。
0737nobodyさん04/08/21 16:48ID:???
>>736
php -r 'fputs(STDERR," イ   ヤ   だ   ! ! !");'
0738nobodyさん04/08/21 16:55ID:???
>>737
エラー
073973404/08/21 17:00ID:???
>>735
それ、http://jp.php.net/crc32 と同じです。
そして、うまくいきません。
0740nobodyさん04/08/21 17:40ID:???
>>738
エラー内容くらい書いたら?
STDIN, STDOUT, STDERR という定数は PHP 4.3.0 以降の CLI 版の PHP で使用可能。
>>738 は CGI 版の PHP で実行していると予想してみる。
php -v で確認してみれば分かる。
どうしても CGI 版とか PHP 4.2.x 以下の環境でその定数を使いたければ、スクリプト
の最初で以下のように設定してしまうという方法もあるみたいだけど。

if (!defined('STDERR')) {
  define('STDERR', fopen("php://stderr", "r"));
  register_shutdown_function(create_function('', 'fclose(STDERR); return true;');
}

詳しくは以下のあたりを参照。
http://jp.php.net/manual/ja/features.commandline.php#22356

>>739
単純に 16進数変換をしていないだけだったりしない?

$crc = crc16($buf);
printf("%04X\n", $crc);
0741nobodyさん04/08/21 17:57ID:???
>>740
function crc16($string){
 $crc = 0xFFFF;
 for($x=0; $x<strlen($string); $x++){
  $crc = $crc ^ ord($string[$x]);
  for($y=0; $y<8; $y++){
   if(($crc & 0x0001) == 0x0001){
    $crc = (($crc >> 1) ^ 0x8408);
   }
   else{
    $crc = $crc >> 1;
   }
  }
 }
 return $crc;
}

これでどうよ
074274104/08/21 17:57ID:???
ごめん>>739宛ね
074373404/08/21 17:59ID:???
>>740
違いますね。。別で取得した値と
fcrc($file) == 0xBD9A
とかして、比較して検証しているんですが、結果異なっていますし。
0744nobodyさん04/08/21 18:03ID:???
>>742
一瞬氏ねに見えた
ごめんと言いつつ頃す姿を想像してしまった
0745Imo ◆.jC7ANgFY. 04/08/21 18:09ID:???
>>743
ABCDEFGHをCRC16したときの期待する結果は何?
0746nobodyさん04/08/21 19:21ID:Ro1xuyZQ
オブジェクトの練習中です。
PEARをつかってます。DAOの部分はDBになるんでしょうか?
userDAOはDBを継承してソメッドをしこしこ書けばよいのでしょうか?
0747nobodyさん04/08/21 19:36ID:???
Java 厨 ( ´,_ゝ`) まぁ PHP-Java は相互補完できるとこ多いけど。
誰かに PEAR コードの歩き方習うか試行錯誤で身につけろ。
ググれ、英語嫁、ダンプ取れ、コード読め、PHPDoc 嫁
それがイヤならマニュアルの整備されたパッケージ以外使わない方がいい。

DataObject ならマニュアル嫁。
074873404/08/21 21:30ID:???
>>745
0x7A09
ですね。
0749nobodyさん04/08/21 21:59ID:???
>>748
それは何で弾き出した値なんだ?
0750Imo ◆.jC7ANgFY. 04/08/22 01:17ID:???
>>748
いろいろ目を通したけど1つも見当たらなかったです。
というよりかそのCRCコードはファイルデータ以外に
ファイルサイズなども入っているとか…

# っつーかなんか面白いものつくりてー
# N-GRAM全文検索でもつくろっかな
075173604/08/22 02:06ID:???
>>740
おおっ、すばらしい。さんくす。
そうか、マニュアルのこんなところに載ってあったのか。
予想と違うところに書かれてあると、見つけられんわ。修行してくる。
■ このスレッドは過去ログ倉庫に格納されています