トップページ⇒php
986コメント361KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/03 22:41:23ID:???
・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-10辺り
0002nobodyさん05/03/03 22:44:18ID:???
前スレ
【PHP】質問スレッドpart26【php】
http://pc5.2ch.net/test/read.cgi/php/1103636095/l50

関連スレ
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/l50
【PHP】セッションについて語ろう!【PHP】
http://pc5.2ch.net/test/read.cgi/php/1064399467/l50
PHPでPDF
http://pc5.2ch.net/test/read.cgi/php/983858078/l50
【PHP】Phrameを使う【フレームワーク】
http://pc5.2ch.net/test/read.cgi/php/1093238107/l50
PHP + PostgreSQL
http://pc5.2ch.net/test/read.cgi/php/983128806/l50
0003nobodyさん05/03/03 22:44:40ID:???
PHP系blogツール part2
http://pc5.2ch.net/test/read.cgi/php/1094725439/l50
PHPBB
http://pc5.2ch.net/test/read.cgi/php/1065334037/l50
Pear
http://pc5.2ch.net/test/read.cgi/php/985665522/l50
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/l50
【PHP】Smarty【Template】
http://pc5.2ch.net/test/read.cgi/php/1047225437/l50
【PHP】処理能力向上テクニックスレ
http://pc5.2ch.net/test/read.cgi/php/1088823837/l50
【PHP】自作スクリプト発表会
http://pc5.2ch.net/test/read.cgi/php/1017456911/l50
親切な人が初心者にPHPの関数を使い方を教える
http://pc5.2ch.net/test/read.cgi/php/1068190843/l50
0004nobodyさん05/03/03 22:45:14ID:???
「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条。 
1. ハードウェア、OSのバージョン等には一字一句触れない。 
2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。 
3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。 
  目の前で生じている現象をそのまま具体的に書くなどもっての外。 
  事実より俺様の脳内解釈を優先すべし。 
4. 独り言文体で必勝。 
  「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」 
5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。 
6. もう試したことを得意げに指摘してくる奴には、厳しく対応。 
  「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」 
  "どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。 
7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。 
  「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」 
  示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので 
 絶対に避ける。 
8. 情報は小出しに。 

「エスパーきぼんぬ」 補足 
上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。 
そのような悪い質問に対して答えられるのは, 
質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ, 
という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。 
まちがっても「エスパーの方,回答お願いします」 
なんて痛い質問するな。つうか氏ね。
0005nobodyさん05/03/03 22:46:04ID:???
こんなもんかな?
補足ヨロ
0006nobodyさん05/03/04 01:00:13ID:3xlEv0k9
PHP5のクラスの話なんですが、
下記のように、プロパティでpublic宣言してないものを、コンストラクトしても、別に問題ないのでしょうか?
一応、エラーは出ないのですが、気持ち悪いような気がして。。。
// クラス
class Category{
  // プロパティ
  public $aCategory;
// コンストラクタ
    function __construct()
    {
        global $g_hDB;
        while(1){
            $sSQL = "select * from category where categoryname = '" . $_REQUEST['categoryname'] . "'";
            $result = pg_exec ($g_hDB, $sSQL);
            $pg_num_rows = pg_num_rows($result);
            if ($pg_num_rows >= 1){
                $this->aCategory = pg_fetch_array ($result, 0, PGSQL_ASSOC);
                break;
            }
            else{
                $_REQUEST['categoryname'] = "top";
            }
        }
        //★★★↓ここが気持ち悪い・・・★★★
        foreach ($this->aCategory as $key => $val){
            $this->{$key} = $val;
        }
        unset($this->aCategory);
        
    }
(後略)
0007nobodyさん05/03/04 01:27:42ID:???
>>6
おれとしては
>$_REQUEST['categoryname'] = "top";
ってスーパーグローバル変数に代入しちゃってるのがきもちわるい。
0008605/03/04 01:46:21ID:???
>>7
ギク、そのとおり、あとでなおすつもりです・・・orz
0009nobodyさん05/03/04 09:10:17ID:JryQONc+
ふと疑問に思ったのですが、ファイルに書き出すとき
桁数の制限ってあるんでしょうか?
変数に格納できる桁数の制限も知りたいです。
0010nobodyさん05/03/04 10:49:45ID:???
めもりのつづくかぎり
0011nobodyさん05/03/04 11:39:10ID:???
ハードディスク(外部記憶装置)の許す限り
00121105/03/04 11:40:07ID:???
あるいはquotaが許す限り
0013nobodyさん05/03/04 13:12:11ID:???
かみさんが許す限り
0014nobodyさん05/03/04 13:24:43ID:???
うちのかみさんがね、桁数の制限を気にするんですよ
0015nobodyさん05/03/04 13:49:05ID:???
おまいの給料じゃ気にもなるさ
0016nobodyさん05/03/04 13:56:36ID:???
>>9
よーしパパへそくりしちゃうぞー

$i=2;
while(1){
$i*=2;
echo$i,"\n";
if(is_infinite($i))break;
}
00171105/03/04 15:18:36ID:???
>>16
8.98846567431E+307
1.#INF
で終了しました(Win XP)
0018nobodyさん05/03/04 15:44:14ID:???
8.98846567431E+307
INF
で終了。@32bitなLinux
0019nobodyさん05/03/04 16:29:47ID:???
>>16
Fatal error: Call to undefined function: is_infinite()

自分には、かみさんがいませんから。
残念!
0020nobodyさん05/03/04 16:35:56ID:???
8.98846567431E+307
妊婦

で終了。予定日:3月12日
0021nobodyさん05/03/04 18:28:58ID:???
もっとまぶいコンピューター使ってる奴はいないのかよ。
0022nobodyさん05/03/06 03:31:13ID:pz614Rae
phpスクリプトで unzipを実行したいのですができません。
具体的には、ブラウザでサーバー内ファイルの圧縮・解凍操作を行いたいと思っています。
どうすればよいのでしょうか?

【実際のテスト結果】

phpファイルと解凍したいファイルは同じフォルダ内で以下のようにすると・・・

<?php
echo system("pwd\n");
echo system("unzip file.zip\n");
?>
-->(phpファイルの置かれた場所がちゃんと表示される)
-->127
(unzipコマンドの返り値が”127”のみでで解凍されている様子はない)

<?php
echo system("echo hello\n");
?>
-->hello
(正常)

<?php
echo system("rm file.zip\n");
-->0
(正常に削除される)

【環境】
FreeBSD 4.7
PHP4.3.9(apacheのモジュールとして動作)
Apache/1.3.33
0023nobodyさん05/03/06 04:30:41ID:???
apacheが動作しているユーザ/グループで、file.zipを操作できるかどうか
アクセス権限を確認しる。
0024nobodyさん05/03/06 04:37:48ID:???
>>22
system('unzip file.zip 2>&1')

みたいにして標準エラーの内容を見る、とかしてみたら?
あとはエラーが127だからunzipがちゃんとパスの通った場所にあるのか確認
00252205/03/06 05:19:00ID:pz614Rae
>>23
答えになってないかもしれませんが・・・

とあるレンタルサーバーのVPSプランを利用しているんですが、ユーザー名を username とすると

phpinfo()で見る限り、apacheのユーザーと _SERVER["USER"] は usernameになっています。
sshで usernameでログインした場合、 unzip , zip ともに可能です。
念のためですが、 >>22 の 【実際のテスト結果】 はブラウザからのアクセスでの結果です。

>>24

> system('unzip file.zip 2>&1')
を実行すると 1127が帰ってきました。
googleで検索してるんですが検索の仕方が悪いのか このエラーの意味がわかりません。

unzipのパスについては、sshでログインした場合にunzipは可能なのですが、それとはまた違うのでしょうか?
0026nobodyさん05/03/06 05:48:59ID:???
>>25
>unzipのパスについては、sshでログインした場合にunzipは可能なのですが、
>それとはまた違うのでしょうか?
違う。両方でwhoamiしてみ。
00272205/03/06 08:33:52ID:pz614Rae
>>23
>>24
>>26

感謝!解決しました!

実行権限、コマンドのパス、VPSであることあたりがからんでたようです。
(VPSがからんでるかは微妙ですが)

【結果報告】
whoamiも両方試すと ブラウザからはwhoamiができませんでした。
よく確認してみると、同じディレクトリでもブラウザからとSSHではpwdの出力が違うことに気づきました。
apacheで見えてない(ブラウザからのpwdでは見えてない)上位のディレクトリに whoamiとunzipの実行ファイル(?)があったのでそれをapacheで見えるディレクトリにコピーして、権限設定。
phpのsystemでそのコピーした実行ファイルのパスを指定したら、実行できました。

*表現がおかしいところがあると思いますが、そこはごめんなさい

皆様の助言のおかげで解決しました、ありがとうございました!
0028nobodyさん05/03/06 18:14:42ID:pWV0LcHN
Flash用に読み取るファイルは
name=AAA&from=BBB&age=CCC
というようになっているのですが
これをPHPで各値を取得するために

$yomi = mb_split("&", $text);
for($i=0;$i<5;$i++){
if(mb_ereg("name=", $yomi[$i])) $ad_name = mb_ereg_replace("name=", "", $yomi[$i]);
if(mb_ereg("from=", $yomi[$i])) $ad_from = mb_ereg_replace("from=", "", $yomi[$i]);
if(mb_ereg("age=", $yomi[$i])) $ad_age = mb_ereg_replace("age=", "", $yomi[$i]);
}
というようにしてます・・
がこれだとスマートじゃないですよね・・

皆様はどうやっていますか?m(_ _ )m
0029nobodyさん05/03/06 21:45:58ID:???
>>28
parse_str
0030nobodyさん05/03/06 23:18:40ID:???
くだらない質問させてください。
if(ereg("[^._0-9A-Za-z]+", $_FILES['userfile']['name'][0])) {
と記述されている部分があるのですが、
この場合、「ハイフン」も含めるにはどう書けばいいでしょうか?
0031nobodyさん05/03/06 23:25:13ID:???
すみません、スレ違いでした。
くだらない質問スレに行ってきます。
0032nobodyさん05/03/07 09:34:01ID:???
require 'hoge.inc' ;

としたときに hoge.inc が自分のいるパスを知ることができますか?
0033nobodyさん05/03/07 11:46:58ID:???
>>32
__FILE__。定数一覧は見ておけよ
00343205/03/07 15:08:02ID:???
>>33
希望通りの結果を得ることができました。

> 定数一覧は見ておけよ
見ときます。
0035nobadyさん05/03/07 15:33:31ID:???
質問です。

session_start();
と記述した後に
header("Content-type: application/octet-stream;");
を使用したいのですが思うように使用できません。
ダウンロードダイアログが表示されるのですが、
"開く"を選択してもファイルを開くことができません。

sessionとheaderは同時には使用できないのでしょうか?
よろしくお願いします。
0036nobodyさん05/03/07 15:55:21ID:???
保存はできるのか?
0037nobodyさん05/03/07 16:05:42ID:???
なんだかよく分かりませんが、小さなスクリプトなら問題無く動きましたよ?
session_start();
if($_SESSION[go] == 'ok'){
 header("Content-type: application/octet-stream");
 print "session value is ".$_SESSION[go];
}else{
 $_SESSION[go] = 'ok';
 print "<a href='$_SERVER[PHP_SELF]'>a</a>";
}
0038nobodyさん05/03/07 16:34:18ID:???
過去にhttps+session+IEでダウソ出来ないバグがあったなぁー。
0039nobadyさん05/03/07 16:38:54ID:???
>>36
保存は正常にすることができました。
保存したファイルを開くこともできました。

>>37
session_start()で取得した情報に基づきファイルをreadfile()で出力し、
それらを保存、及び開こうとしているのですが、
session_start()を使用した後にheader()を使用すると
保存ができて、開くことができません。

session()とheader()はなにか相性が悪いのでしょうか?
ご教授いただきたいです。
0040nobodyさん05/03/07 16:46:42ID:???
保存出来るってことはブラウザとかクライアントの環境依存の問題じゃん
PHP関係無い
0041nobodyさん05/03/07 16:56:01ID:???
>>39
保存できるならそれでいいんじゃないのか?何のためにヘッダ吐いてるんだか
0042nobodyさん05/03/07 17:39:59ID:???
>>35
マニュアルのheader()の項を読む。
session_start()時にどんなパケットが流れるか見てみる。
対策は確かマニュアルにあったと思うし、メーリングリストに回答がある。
0043nobodyさん05/03/07 23:17:18ID:PL7b7WJg
OSはMeでxamppをインストールしてPHP4に切り替え使用しています。
PHPエディターを使ってWebサイトでの使用を目的としたPHPの勉強をしようとしているのですが、
文字コードについてよく判りません。

エディタでEUCを指定するとブラウザがISOの欧州フォントなどに切り替わり日本語部分が文字化けし、
Shift_JISで保存すると今度は自動的にEUCに変わり文字化けします。
動作確認をIE6.0とFirefox1.0で行っているのですがどちらも同様の反応が出ます。

PHPの保存時の文字とPHPをhtml内で表示させる場合のmeta内での文字コードなどはどのような関係になっているのでしょうか?
どなたか御教授お願いします。
0044nobodyさん05/03/07 23:29:30ID:???
xamppのPHPは、SJISで書いたスクリプト処理には対応してないと思われ。
0045nobodyさん05/03/07 23:38:41ID:???
>>43
PHPで文字エンコーディングを意識する必要があるのは3個所あって、
1. HTTP入力 - POST,GET等
2. 内部文字エンコーディング - スクリプト自体の文字エンコーディング
3. HTTP出力 - 結果の出力時の文字エンコーディング
詳しい内容は、ttp://www.php.net/manual/ja/ref.mbstring.php

その他に、apacheが付加するcharsetも関係してくる。AddDefaultCharset等。
0046nobodyさん05/03/08 00:08:13ID:zgtI7JIE
>>44
>>45
回答有難うございます。
示されたリンク先を見ましたが、ISO-8859-*, EUC-JP, UTF-8の何れかで記述して、
php.iniを書き換えれば良いということなのでしょうか?
0047nobodyさん05/03/08 00:23:16ID:???
>>46
その程度で思考回路を停止するならPHPと言えど
プログラミングに向いてなさそうだな。
0048nobodyさん05/03/08 01:05:36ID:/emJr0GT
程度が低くてすみません。

以下の3行が書き込まれている test.txt
 あいうえお
 かきくけこ
 さしすせそ
からデータを読み出す際は、$data = file("text.txt"); で読み出せたのですが、末尾の改行が邪魔です。
Perl でいうところの、
 open(IN,"text.txt"); chomp(@data = <IN>); close(IN)
を実現しようとすれば、
 $fp = fopen("test.txt","r");
 while( ( $x = fgets($fp) ) ){
  $data[] = chop($x);
 }
とするしかないのでしょうか?
0049nobodyさん05/03/08 01:09:06ID:???
Warning: などのエラーを表示させない方法はあるのでしょうか?
(エラーメッセージを画面に出さない)
0050nobodyさん05/03/08 01:09:15ID:???
>>46
見て読んで理解しろ。(貴方の既存の知識量等により)場合によっては
理解には別の情報が必要かもしれん。その場合はまたWebとか本から入手。

答えのひとつとして
「理解できなければ、全部'EUC-JP'に統一する」
を挙げておく。
0051nobodyさん05/03/08 01:11:29ID:???
>>49
くだ質レベル。display_errors
0052nobodyさん05/03/08 02:59:07ID:???
>>48
$data = array_map('rtrim', file('test.txt'));
0053nobodyさん05/03/08 05:23:03ID:???
5つのテキストフィールド($a〜$e)があり数値を入力し
submitで計算をさせるページを作っています。
cookie?などでこの$a〜$eを保存・読み込みをしたいのですが
(出来れば過去数回分を記憶してテキストフィールド以外の場所に表示させたい。)
php初心者で計算させるので精一杯で・・・
検索してもカウンターとかは見つかるんですがこういう手法がみつかりませんでした。
どのような記述で出来るのかご教授お願いします。
0054nobodyさん05/03/08 06:37:29ID:???
プログラミング初心者でいい加減な回答が精一杯なんですがセッションってのを使うと簡単らしいです。
0055nobodyさん05/03/08 07:36:11ID:???
>>54
セッションはブラウザ閉じると消えちゃうから。
0056nobodyさん05/03/08 07:55:52ID:???
cookieを使いたいなら、setcookie()使えばええんでないの?
マニュアルには使い方の例も結構載ってるので悩むことは無いかと。
ttp://jp2.php.net/manual/ja/function.setcookie.php
00572805/03/08 13:05:07ID:QMVO20O7
>>29
返答遅くなってすいません。
そんな便利なコマンドがあったなんて・・有難う御座いますm(_ _)m
0058nobodyさん05/03/09 01:11:34ID:???
PHP4.3.10 MySQL 4.0.21です。
id,name
1,a born
MySQLに以上のデータが入っているとして、
$sql="select * from hoge where id=1";
$result=$db->query($sql);
$row=$result->fetchRow(DB_FETCHMODE_ASSOC);
でデータを呼び出すと、name列がaしか出てきません。
半角スペース以降も認識させる方法を教えてください。
必要な情報があれば出しますので!
0059nobodyさん05/03/09 01:29:35ID:???
>>28
関数です。
00605805/03/09 01:35:32ID:???
ごめんなさい、>58の修正レスです。
×でデータを呼び出すと、name列がaしか出てきません。
○でデータを呼び出すと、name列が正しく出てきますが、フォームのtextエリアに入れるとaしか出てきません。

でした。ごめんなさい。よろしくお願いします。
0061nobodyさん05/03/09 02:01:08ID:???
こんなことになってる予感
<input type=text value=a born>
0062nobodyさん05/03/09 02:24:45ID:???
そこでW3C信者の勝利ですよ。
0063nobodyさん05/03/09 02:32:54ID:???
>61
その通りでしあ
<input type=text size=50 name=\"name\" value=\"",$row["name"],"\">
ダブルクォーテーションで囲えば正しくフォーム部分にも出てきました。
でもこれで正解なんです?なんか野暮ったい気もするんですが
0064nobodyさん05/03/09 10:05:24ID:???
>>61
エスパー級の回答だな。すげーよ。
0065nobodyさん05/03/09 10:29:04ID:???
RSSのUTF-8で「&」が入るとエラーになってしまうのですが、
&を使用する事はできないのでしょうか?

<link>http://〜/a.php?abc=1&def=b</link>
0066nobodyさん05/03/09 10:39:24ID:???
& は実体参照の開始とみなされるので
& そのものを書くなら & と書かなければならない。
これは HTML でも同じ事
■ このスレッドは過去ログ倉庫に格納されています