【PHP】質問スレッドpart20【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/06 15:44ID:paJ4kjjQ・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0686軟式PHP
04/08/20 09:04ID:???| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | >>683
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0687nobodyさん
04/08/20 13:24ID:???0688nobodyさん
04/08/20 15:13ID:???まとめて全てを<?php ?>で囲っちゃった方が負荷が少なかったりします?
大した差は無いかな。。
0690nobodyさん
04/08/20 16:03ID:???0691nobodyさん
04/08/20 16:11ID:???100 / 1.05を計算すと95.238095238095になるのですが、
小数点第何位までと決めることはできますか?
また、やり方もご教授お願いします。
0692691
04/08/20 16:12ID:ttg46q2U0694nobodyさん
04/08/20 16:15ID:???配列に入っている数値を1バイトずつファイルに書き出したいのですが
どうやってもテキストで出力されてしまいます。。。orz
0696Imo ◆.jC7ANgFY.
04/08/20 16:22ID:???初心者にはchr関数ですべてループさせることをすすめる。
すっきりやりたければこんなことしてもできる。
call_user_func_array('pack', array_merge(array('c*'), $list));
0700691
04/08/20 16:50ID:???なるほど、そういう書き方もありましたか。
$motone=$_POST["money"] / 1.05;
$motone=round($motone , 0); //round関数で$motoneの値を整数にする
と書いていました。
0701nobodyさん
04/08/20 16:54ID:???$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:???function a(){
global $zz;
$zz = 1234;
}
function b(){
global $zz
echo $zz;
}
0703Imo ◆.jC7ANgFY.
04/08/20 16:58ID:???b関数内のglobalのセミコロン抜けた。
というわけで報告ついでに別な方法も。
function a(){
define('ZZ', 1234);
}
function b(){
echo ZZ;
}
0704nobodyさん
04/08/20 17:02ID:???そういう方法なんですね!
多分マニュアルに書いてあると思うのだけど、
その方法をマニュアルで探す方法がわからなくてw
ありがとうございました!
0705軟式PHP
04/08/20 17:36ID:???\(⌒-⌒)
(・(ェ,,)・ ) < そんなエサで俺様がクマー!!
`つ `つ (´⌒(´
ゝ_つ_`つ≡≡≡(´⌒;;;≡≡≡
(´⌒(´⌒;;
ズザザザ
どこまで行クマ?
\  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ (´´
\(⌒-⌒) o (´⌒(´
(・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0708nobodyさん
04/08/20 17:56ID:???〜略
$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軟式PHP
04/08/20 18:04ID:???{
var $zz;
function a()
{
$this->zz = 1234;
}
function b()
{
echo $this->zz;
}
}
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:???0714nobodyさん
04/08/20 18:49ID:???$i=0;
while($i<$size){
$ddata = ord($bdata[$i]);
++$i;
}
だとどうだろうか?
0715nobodyさん
04/08/20 18:50ID:???実行テストは自分のPC(OSはWindows)で行ってますが、
最後に使うのはレン鯖なのでインストはむりぽ
と思ったけどxreaは実験的に導入してくれてるようです。
0716nobodyさん
04/08/20 18:56ID:???0717nobodyさん
04/08/20 18:56ID:???速くなりました。
ありがとう御座います。
ord -- 文字のASCII値を返す
↑ASCII値ってのが意味わからなかったので触ってませんでした。
これかもPHPの勉強を励んでいきます。
0718Imo ◆.jC7ANgFY.
04/08/20 19:24ID:???こうしてほしかったんだけどまぁいいや。
foreach (unpack("C*",$bdata) as $ddata) {
}
0720nobodyさん
04/08/20 21:06ID:ho3qNz5a管理人殺害!!!
0722714
04/08/20 21:32ID:???0723カポコン
04/08/20 23:07ID:???0724684
04/08/21 00:29ID:???見つかりました。
fopen('php://stdin') とか fopen('php://stderr') とかするんですね。
PHPのことだから、「標準エラー出力に出力する関数」とか、
「標準入力を表す定数」とかがあるんじゃないかと思って、そのあたりを探してました。
でもそうじゃなくて、Streamだったんすね。
あまり美しさを感じない仕様だけど、まあこんなもんか。
ていうかいちいちオープンしなきゃならんのはちょっとだけ面倒。
ありがとうございました。
0725nobodyさん
04/08/21 00:39ID:???0728nobodyさん
04/08/21 14:03ID:???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:???現在の状況と期待する内容が良く分からんが、
giko.incをphpスクリプトとして実行したいってことなら、
giko.incが <?php 〜 ?>の形式になってないだけじゃないの?
include()の説明を良く見てみ。
0731728
04/08/21 14:44ID:???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と思う
0734nobodyさん
04/08/21 16:13ID:???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:???の下のほうにcrc16のサンプルがあるよ
使えるかどうか知らないけどね
0739734
04/08/21 17:00ID:???それ、http://jp.php.net/crc32 と同じです。
そして、うまくいきません。
0740nobodyさん
04/08/21 17:40ID:???エラー内容くらい書いたら?
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:???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;
}
これでどうよ
0743734
04/08/21 17:59ID:???違いますね。。別で取得した値と
fcrc($file) == 0xBD9A
とかして、比較して検証しているんですが、結果異なっていますし。
0746nobodyさん
04/08/21 19:21ID:Ro1xuyZQPEARをつかってます。DAOの部分はDBになるんでしょうか?
userDAOはDBを継承してソメッドをしこしこ書けばよいのでしょうか?
0747nobodyさん
04/08/21 19:36ID:???誰かに PEAR コードの歩き方習うか試行錯誤で身につけろ。
ググれ、英語嫁、ダンプ取れ、コード読め、PHPDoc 嫁
それがイヤならマニュアルの整備されたパッケージ以外使わない方がいい。
DataObject ならマニュアル嫁。
0750Imo ◆.jC7ANgFY.
04/08/22 01:17ID:???いろいろ目を通したけど1つも見当たらなかったです。
というよりかそのCRCコードはファイルデータ以外に
ファイルサイズなども入っているとか…
# っつーかなんか面白いものつくりてー
# N-GRAM全文検索でもつくろっかな
0751736
04/08/22 02:06ID:???おおっ、すばらしい。さんくす。
そうか、マニュアルのこんなところに載ってあったのか。
予想と違うところに書かれてあると、見つけられんわ。修行してくる。
0752nobodyさん
04/08/22 02:10ID:???0753nobodyさん
04/08/22 03:56ID:97mKEXwz>>349とかマニュアルとか読んだ。
・ポインタとリファレンスが違うのはわかった。
・ $a =& で、変数もオブジェクトもリファレンスできるのもわかった。
・ function foo(&$var) の渡し方と返り方もわかった。
けど、結局わからなかったこと。
function定義の時の
<?php
function &foo(){
の関数名の最初の&ってどういう時に必要?
あと、
ttp://mylog.ishinao.net/id/117
の人はなんか偏執狂に見えるのは間違いか?
0754Imo ◆.jC7ANgFY.
04/08/22 09:35ID:???なくてもプログラムは動くっぽいけど、
PHPマニュアル > II. 言語リファレンス > 14章リファレンスの説明
には以下のようなことが書かれている。
注意: パラメータを渡す場合と異なり、ここでは、
通常のようにコピーではな くリファレンスで返り値
を指定し、リファレンス結合を指定するために
両方の場所で&を使用する必要があります。
$fooについて行われたのは、通常の代入ではありま せん。
ここの人はperlから来たてでイライラしてただけじゃない?
0755nobodyさん
04/08/22 10:35ID:???以下のスクリプトで違いが分かるかもしれない。
<?php
function foo1() { static $a = 1; return $a; }
function &foo2() { static $a = 1; return $a; }
$foo1 =& foo1();
$foo2 =& foo2();
var_dump($foo1);
var_dump($foo2);
$foo1 = 2;
$foo2 = 2;
$foo1 =& foo1();
$foo2 =& foo2();
var_dump($foo1);
var_dump($foo2);
?>
多分、関数の前に & を付けると関数からの返り値には関数内の変数の
リファレンスが返ってくるということだろう。
よく分からなかったらあまり使わない方が安全かもしれないけど。
0756755
04/08/22 11:21ID:???デザインパターンで使われる singleton などはこの方法を使って実現している。
以下のサイトの説明が分かりやすい。
ttp://www.pat.hi-ho.ne.jp/dimension/sample/sample_class_dp_singleton.shtml
0757nobodyさん
04/08/22 11:59ID:???どうやったらいいのでしょうか。
0758nobodyさん
04/08/22 12:05ID:???height = 200+100 (と入ってると仮定して)
<input type="text" name="height" size="10" value="" />
これでPOSTして
$height = $_POST['height'];
echo $height; //ここが200になる。
のですが、これを300 200+100した値が取れるように出来ないものでしょうか?
POSTのFORMで200/2 や200*2などをやりたいのですが。
よろしくお願いします。
0759nobodyさん
04/08/22 12:23ID:???0760753
04/08/22 13:26ID:97mKEXwzレスthx.
実は、
http://jp2.php.net/manual/ja/language.references.return.php
ココのマヌアルページが理解できなくて......onz
>>755
>> 多分、関数の前に & を付けると関数からの返り値には関数内の変数の
>> リファレンスが返ってくるということだろう。
あぁ、function &foo(){...... return($a); }と $hoge =& foo();と両方とも "&" を
つけた場合にのみ、function foo()の返り値の$aのリファレンスが$hogeにおさめられると。
それ以外の、
・function foo(){...... return($a); }; で定義して $hoge =& foo(); でコール
・function &foo(){...... return($a); }; で定義して $hoge = foo(); でコール
だと、普通に$aが$hogeにおさめられる仕様になるわけですね。
これで、すこし━━━(゚∀゚)━━━━ッ!!って感じだったけど、
>>755でいただいたサンプルスクリプトを実行して???になりました。
最後のvar_dump($foo2)がなんで、int(2)になるんですか?..... onz
function foo2()の返り値$aのリファレンスが返ってくるということは、・・・・$aの実体はなんですか?
static $a = 1;だから、$a の実体は、int(1)じゃないんですか?なんで、int(2)がかえってくるんだろう?
function内のリファレンスを理解できてないな。
# $aはstaticというのは、function foo1とfoo2の$aは自分が呼ばれた記憶を$aに保持していると
# いうことで理解しているんですが合ってますか?それは、function内のリファレンスとは関係ない?
0761755
04/08/22 14:12ID:???static については、マニュアルを参照。
ttp://jp.php.net/manual/ja/language.variables.scope.php
最後の var_dump($foo2) が int(2) になるのは、9行目の $foo2 = 2; を実行したから。
これは、foo2() の中の static $a で定義した $a を変更したのと同じ。
つまり、言いたかったことは、
3行目の $foo1 =& foo1(); で取得した $foo1 は foo1() の static で定義された $a のリファレンスではないけど、
4行目の $foo2 =& foo2(); で取得した $foo2 は foo2() の static で定義された $a のリファレンスということ。
static の変数が単なる変数ではあまり大したことはできないけど、この形でクラスや配列を扱うよう
になると便利さがわかるようになるかもしれない。
PHP のソースを読んで確認した訳でもないのでもしかしたら間違っているかもしれないけど。
0762nobodyさん
04/08/22 15:48ID:E2HwDzLsこれって負荷と同義で考えて問題ナッシングでしょうか?
0763753
04/08/22 16:11ID:97mKEXwzあぁ。理解できました。ありがとうございます。
自分的には、こうしたらわかりやすかったです。
<?php
function foo1(){static $a = 1;return $a;}
function &foo2() { static $a = 1; return $a; }
$foo1 =& foo1();
$foo2 =& foo2();
var_dump($foo1);
var_dump($foo2);
$foo1 = 2;
$foo2 = 8;
$foo1 =& foo1();
$foo2_2 =& foo2();
var_dump($foo1);
var_dump($foo2_2);
?>
$foo2 =& foo2(); で、function foo2 の返り値へのリファレンスを作って
$foo2 = 8; で、function foo2 の返り値に8を入れる。リファレンスなので、function内の$aに影響して$a = 8;
static $a; と、foo2()で定義してるので、そのあとに
$foo2_2 =& foo2(); で呼ばれた時にも$a = 8;が有効なので $foo2_2 には8が入る。
最後の $foo2_2 =& foo2(); は、$foo2_2 = foo2(); でも同じ結果ですね。
リファレンスを得るか値を作るかが違うだけで。
0764753
04/08/22 16:21ID:97mKEXwzhttp://jp2.php.net/manual/ja/language.references.return.php
が理解できなかった原因として、下記のサンプルコードがあるんですが、
<?php
function &find_var ($param) {
...コード...
return $found_var;
}
$foo =& find_var ($bar);
$foo->x = 2;
?>
このfunction find_var()は$found_varを返していますが、
これは次の
$foo->x = 2;
とあることから、....コード....で、作られたオブジェクトと考えていいのでしょうか。
「リファレンスを使う最大の目的はインスタンスの複製を行わないでメモリ消費を抑える」
ということから、あえて自明として....コード....の部分でオブジェクトを作ってると
マニュアルには記述してないのかなと思いますが。
合ってる?
それとも、「->」ってインスタンスのメンバにアクセスする以外の使い方で用いてるのかな?
0766755
04/08/22 17:50ID:???確かに分かりにくいコードだね。そこのマニュアルには、
「この例では、関数find_varにより返されたオブジェクトのプロパティが、設定されます。」
と書かれているので、find_var() はオブジェクトを返すのは間違いないと思うけど。
とりあえず、無理矢理サンプルを考えてみた。
static 変数を使わなくても global 変数でも同じ様にできるということで。
class Foo { }
$bar =& new Foo;
$bar->x = 1;
function &find_var($param) {
$found_var = null;
if (isset($GLOBALS[$param])) {
$found_var =& $GLOBALS[$param];
}
return $found_var;
}
function test1() { $foo =& find_var('bar'); $foo->y = 3; }
function test2() { $foo =& find_var('bar'); $foo->z = 2; }
test1();
test2();
$foo =& find_var('bar');
var_dump($foo);
0767nobodyさん
04/08/22 18:36ID:???変数として保持しながらページを作成していくと、javascriptの
history.back()を使用してページを戻るときに「有効期限切れ」と
なってしまいます。
フォーム入力確認で戻る必要があるのですが、どういった方法で
会員制にするのがよいのでしょうか?
0768nobodyさん
04/08/22 18:45ID:???すいません。セッションのスレで聞きなおします。
0769nobodyさん
04/08/22 19:52ID:a2aIDnS/どうして見れないのでしょうか?
設定の段階で何か失敗しているのでしょうか?
助けてください。
0771769
04/08/22 20:03ID:a2aIDnS/0772nobodyさん
04/08/22 20:13ID:???1)PHPをインストールしていない
2)webサーバの設定をしていない
「インストールってどうやるんですか」とか「設定ってどうやるんですか」なんて聞くなよ
0773769
04/08/22 20:21ID:a2aIDnS/0775nobodyさん
04/08/22 20:26ID:???0776nobodyさん
04/08/22 20:31ID:???0777nobodyさん
04/08/22 20:38ID:???夏になると教えたがり厨も増えて困る
0778nobodyさん
04/08/22 21:17ID:dLrjNlopと表示されるんですけどどのバージョンなら動きますか?
ちなみに今は、「php-4.2.3-0vl5」です
0779nobodyさん
04/08/22 21:26ID:???どのバージョンなら動くってよりも、
どのバージョンだから
Your PHP version does not have support for MySQL
ってでたのか書いた方がよくないんか?
しかもphpが究極にふるいけど。DBはいくつだ?
0781nobodyさん
04/08/22 21:31ID:???PHP4.3.4〜4.3.8
MySql 4.0.2
でNucleus3.0は動いてたよ。
0783nobodyさん
04/08/22 21:35ID:yiZXjncr0784nobodyさん
04/08/22 21:41ID:???■ このスレッドは過去ログ倉庫に格納されています