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

【PHP】下らねぇ質問はここに書き込みやがれpart15

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2006/01/14(土) 20:06:11ID:???
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは流れを見て970/980/990の誰かが建てれ

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart14
http://pc8.2ch.net/test/read.cgi/php/1134868212/

過去スレは>>2
FAQは>>3
0809nobodyさん2006/02/02(木) 01:11:47ID:???
>>808
なるほど
個人で作っているから分からない発想だった
thnx
0810nobodyさん2006/02/02(木) 01:14:41ID:???
さて くだらなくなくなってきました。
0811nobodyさん2006/02/02(木) 01:18:35ID:???
上級者には当たり前の疑問も気軽に議論出来るのがこのスレの存在意義だろー
0812nobodyさん2006/02/02(木) 03:08:48ID:???
<?php
//
// 西暦を和暦に変換する
//
include_once("display.inc");
include_once("input.inc");
include_once("calc.inc");
include_once("result.inc");
if (empty($_GET['yyyy'])):
$_GET['yyyy'] = "";
endif;
display_input_area();// 入力エリアの表示
if (!empty($_GET['yyyy']) && input_is_valid()):// 妥当性チェック
$result = calc_gengou();// 元号の計算
display_result($result);// 元号の表示
endif;
?>

↑を実行したら、

Warning: main(display.inc): failed to open stream: No such file or directory in D:\Program Files\xampp\htdocs\~test\part1\chap2\test8.php on line 5

Warning: main(): Failed opening 'display.inc' for inclusion (include_path='.;D:\Program Files\xampp\php\pear\') in D:\Program Files\xampp\htdocs\~test\part1\chap2\test8.php on line 5

というエラーが表示されました。
なにがいけないんでしょうか?
同じディレクトリにdisplay.incはあります。
PHPは4.4.1です。
0813nobodyさん2006/02/02(木) 03:13:13ID:???
>>812
考えられるのは実際のファイル名とincludeしてるファイル名が違うこと。
0814nobodyさん2006/02/02(木) 09:04:07ID:???
>>801
たぶん、本当の答えは「テンプレートエンジンを使え」だと思う。

文字列の連結って結構わけわかめになるからねー。
気持ち悪いのは分かるよ。
0815nobodyさん2006/02/02(木) 10:11:57ID:???
>>801
CとPerlのいいとこ取りをしようと張り切った挙句に
ポリシーが曖昧で中途半端な仕様になってるだけ
0816軟式PHP2006/02/02(木) 10:19:32ID:???
だがそれがイイ。
0817nobodyさん2006/02/02(木) 10:32:23ID:20uSXYKW
P-WEBの自動リンク集のスクリプトで一番下のリンクって消していいんですか?
0818nobodyさん2006/02/02(木) 10:58:55ID:???
>>817
該当スクリプトのライセンスと日本の国内法を確認しろ。
0819nobodyさん2006/02/02(木) 11:53:28ID:???
>>812
試しに
<?php
var_dump(glob("*.inc"));
?>
ってのを動かしたとき、表示内容の中にdisplay.incはあるか?
0820nobodyさん2006/02/02(木) 12:11:49ID:???
>>813
>>819

array(4) { [0]=> string(8) "calc.inc" [1]=> string(11) "display.inc" [2]=> string(9) "input.inc" [3]=> string(10) "result.inc" }
と表示されました。
今やってみたらなぜか動きました。
何がいけなかったんだろう?
お騒がせしました。
0821nobodyさん2006/02/02(木) 13:48:17ID:???
フレームがあるページをPHPで書くとするとどう表現すればいいでうか?
0822nobodyさん2006/02/02(木) 13:59:08ID:???
それHTMLだし
0823nobodyさん2006/02/02(木) 14:54:38ID:???
html何ですが、今までindex.html、left.html、right.htmlでフレームを作ってましたが
これをPHPのecho等でhtmlで出力する時にどう表現すればいいのかを知りたいのですが
0824nobodyさん2006/02/02(木) 14:56:54ID:???
って思ったんですが、これはhtmlで1ファイルで実現できないとphpでも出来ないですよね。
0825nobodyさん2006/02/02(木) 15:10:14ID:???
>>823
index.php、left.php、right.phpでいいやん
0826nobodyさん2006/02/02(木) 15:14:02ID:???
>>825
それを1つのファイルでできないかなっておもいまして・・・
0827nobodyさん2006/02/02(木) 15:20:24ID:???
>>826
だからまずは、
複数のフレームを1つのHTMLファイルで実現する手段を見つけなよ。
それさえ出来れば、後のことは引き受けた。
0828nobodyさん2006/02/02(木) 15:21:02ID:???
>>823
何も難しく考えることはない。
フレームなんてブラウザが同じ画面に構成してるだけなんだから。
index.php、left.php、right.phpという、それぞれ元のhtmlを吐き出す
PHPスクリプトからはじめてみな。
0829nobodyさん2006/02/02(木) 15:25:36ID:???
>>826
んじゃ、index.phpを
index.php?f=main、index.php?f=left、index.php?f=right
で呼び出した時にそれぞれのフレームの内容を吐くようにつくれば?
ただHTMLのフレームって、ファイルをまとめるためじゃなくて、
寧ろ分けたままのものを、表示の際にまとめるための手段だと思うんだけど。
0830nobodyさん2006/02/02(木) 15:45:28ID:???
GETで配列を渡したいのですが今とりあえずserializeでやっていますが
結構長くなってしまうのでもうちょっと短くする方法はありませんでしょうか?
0831nobodyさん2006/02/02(木) 15:58:28ID:???
>>830
同鯖内ならSESSION
0832nobodyさん2006/02/02(木) 16:57:21ID:???
>>830
こんなのも
http://jp.php.net/http_build_query
0833nobodyさん2006/02/02(木) 20:01:06ID:ix6GldKp
<input type="hidden" name="ad" value="[email protected]">
<input type="hidden" name="ad" value="[email protected]">
<input type="hidden" name="ad" value="[email protected]">
<input type="hidden" name="ad" value="[email protected]">
 ・
 ・
 ・
という風な値をフォーム送信時に、
$ad=
[email protected]\n
[email protected]\n
[email protected]\n
[email protected]\n
・
・
・
";
という風に格納したいのですがやり方がわかりません。
ググッてみたんですが、検索キーワードが悪いのか、目的地にたどりつけず・・・
どなたか教えてください
0834nobodyさん2006/02/02(木) 20:04:51ID:???
配列使え
08358332006/02/02(木) 20:42:59ID:ix6GldKp
>>834
ありがとうございます。解決しました。
0836nobodyさん2006/02/02(木) 20:51:18ID:???
四文字で解決ってどうなのよ…
0837nobodyさん2006/02/02(木) 21:01:14ID:???
下質です
0838nobodyさん2006/02/02(木) 21:09:46ID:E0bq5JaA
それで解決できるってすげーよ。
0839nobodyさん2006/02/02(木) 22:02:31ID:AVLZG/Ha
他の掲示板にPOSTでデータを送るにはどうすればいいの?
悪用するわけじゃないけど、荒らしスクリプトみたいなのってどういう仕組みなのかなって思って。
0840nobodyさん2006/02/02(木) 22:06:05ID:???
>>839
さんざん既出。ソケット使え。(梨でも良いが)
0841nobodyさん2006/02/02(木) 22:15:18ID:???
>>840
うるさい
0842nobodyさん2006/02/02(木) 22:18:02ID:???
>>840
荒しとヒントの区別の付かない人には無理だと思う。
0843nobodyさん2006/02/02(木) 22:19:36ID:???
842 nobodyさん sage投稿日: 2006/02/02(木) 22:18:02 ID:???
>>840
荒しとヒントの区別の付かない人には無理だと思う。
0844nobodyさん2006/02/02(木) 22:21:28ID:???
>>842
だな
>>840で判らなきゃ何言っても無理
0845nobodyさん2006/02/02(木) 22:21:44ID:???
興味本位で便乗するけど、同じ名前のフォーム部品を持つHTML作って送りつければいいだけじゃないの?
0846nobodyさん2006/02/02(木) 22:28:36ID:???
まぁ、手動でぽちぽちするならそれもありかもな。
0847nobodyさん2006/02/02(木) 22:28:52ID:???
>>845
それだとUA変えたりできないじゃん
0848nobodyさん2006/02/02(木) 22:29:27ID:???
ある意味正解。しかしたいていの「まともな」スクリプトやサーバーは制御されてる。
0849nobodyさん2006/02/02(木) 22:30:35ID:???
既に答えは出たし、こういう話題は荒れるからここで終了。
0850nobodyさん2006/02/02(木) 22:33:54ID:???
post
0851nobodyさん2006/02/02(木) 22:33:59ID:???
PHPエディターを置いてるサイトの解説を見て、PC上でPHPを動くように最新版をダウンロードしまくったのですが、php.ini?の設定で変えておいた方がいい箇所ってありまつか?
0852nobodyさん2006/02/02(木) 22:38:49ID:???
PHPエディターを置いてるサイトの解説を見て、PC上でPHPを動くように最新版をダウンロードしまくったのですが、php.ini?の設定で変えておいた方がいい箇所ってありまつか?
0853nobodyさん2006/02/02(木) 22:44:26ID:???
>>852
実際にどこかのサーバで動かすスクリプトの開発環境として使用するなら、
そのサーバの環境に合わせる。(エンコード周りとか結構重要)
「とりあえず、遊んでみるだけ」って言うなら、当面はデフォで桶
0854nobodyさん2006/02/02(木) 22:47:40ID:???
累計17万5千ダウンロード突破(2006/1/8)

・・そんなに使ってるのか!?
0855nobodyさん2006/02/02(木) 22:51:15ID:???
>>853
ありが�d。とりあえずこのまま開発してって不具合があったら調整していきます。
0856nobodyさん2006/02/02(木) 22:51:49ID:???
>>854
>>851-852
0857nobodyさん2006/02/02(木) 22:52:27ID:5dJz86s1
次のような方法で、グローバル変数を関数内で呼び出せることは分かっています。

<?php
$var_A = 1;
function Test() {
  global $var_A;   //グローバル文で宣言
  echo $var_A;
}
Test();
?>

しかし、関数Aで定義した変数を、関数Bで使う方法が分かりません。

function A() {
$var = "hoge";
}

function B() {
print $var;
}

これで $var を表示する方法が知りたいのです。
検索をかけても、グローバル変数を関数内で呼び出す方法が載っているサイトばっかりひっかかって、
下記の方法がなかなか見つからないのです。

ご教示お願いします。
08588572006/02/02(木) 22:55:15ID:???
追記です
後者は、

A();
B();

を実行した場合についてです。
08598572006/02/02(木) 22:59:26ID:???
関数Aと関数Bの両方で
「global $var;」を宣言したら使えました。
phpのスコープの概念が他の言語とかなり違っていて混乱していました。

global $var; は、
「グローバル変数 $var を 関数内で使用することを許可する。」というだけではなく、
「関数 $var を グローバル変数にする。」という処理も同時に行うという事なんですね。

自己解決でスレを汚して申し訳なかったです。
0860nobodyさん2006/02/02(木) 23:35:23ID:???
>>859
スコープの「概念」自体は他の言語と大差ないよ。
ただ、デフォルトがグローバルなのかローカルなのかの差はある。
08618572006/02/02(木) 23:47:17ID:???
>>860
関数内での宣言がデフォルトでローカル変数の言語は使ったことがあったので良かったんですが、
グローバル変数を関数内でそのまま呼び出せない部分で混乱したようです。

| global $var; は、
| 「グローバル変数 $var を 関数内で使用することを許可する。」というだけではなく、
| 「関数 $var を グローバル変数にする。」という処理も同時に行うという事なんですね。

と考えていたのですが。

| ローカル変数 $var と グローバル変数 $var は別に存在する
| 関数で「global $var;」と宣言した場合には、その関数内ではグローバル変数の $var が使われる。
| 他の関数内でそのグローバル変数 $var を使いたい場合には、そっちも global $var; と宣言する必要がある。

とシンプルに考えたらなんだか理解した気になれました。
0862nobodyさん2006/02/03(金) 00:00:10ID:???
別の関数内の変数を必要とした事が一度もないんだけど
0863nobodyさん2006/02/03(金) 00:13:21ID:???
そもそも、グローバル変数を介した関数間の変数のやり取りはよろしくない。
クラスにしてメンバ変数つかうのが妥当だと思われる。
0864nobodyさん2006/02/03(金) 00:16:10ID:???
globalを使わなきゃいけない状況ってどんなのがあるの?
08658572006/02/03(金) 00:19:30ID:???
>>862
うんと、本来の「関数」ではないところに、
作業の流れを分かりやすくするために関数扱いにして
一番上で条件ごとにどの関数を呼び出すのかを列挙している感じに使ってます。
08668572006/02/03(金) 00:25:50ID:???
具体的にはこんな風に関数を使っているので、
関数から他の関数で使っている変数を呼び出す必要があるんです。


# 処理内容を順番に列挙
LoadFile();
if ($_POST['Type'] == "表") {
FileTable();
} else {
FileG();
}


# ファイル読み込む
function LoadFile {
$ファイル内容 = fopen("hogehoge.dat", "r");
fclose($ファイル内容);
}


# ファイルの内容を表にする
function FileTable {
〜ここで変数 $ファイル内容 を使う〜
}


# ファイルの内容をグラフにする
function FileG {
〜ここで変数 $ファイル内容 を使う〜
}
08678572006/02/03(金) 00:26:34ID:???
()を抜かしていたので修正

# 処理内容を順番に列挙
LoadFile();
if ($_POST['Type'] == "表") {
FileTable();
} else {
FileG();
}


# ファイル読み込む
function LoadFile () {
$ファイル内容 = fopen("hogehoge.dat", "r");
fclose($ファイル内容);
}


# ファイルの内容を表にする
function FileTable () {
〜ここで変数 $ファイル内容 を使う〜
}


# ファイルの内容をグラフにする
function FileG () {
〜ここで変数 $ファイル内容 を使う〜
}


0868nobodyさん2006/02/03(金) 00:31:58ID:???
ところで、引数を使うのはダメなの?
function LoadFile () {
return $handle = fopen("hogehoge.dat", "r");
}

$naiyou = LoadFile();
if ($_POST['Type'] == "表") {
FileTable($naiyou);
}

これじゃダメ?
0869nobodyさん2006/02/03(金) 00:33:06ID:???
配列$x に 二次元配列$y[2][1] の値を代入したくて、次のような式を書きました。

print "$x[$y[2][1]]";

そうすると、パースエラーになってしまうようです。
Parse error: syntax error, unexpected '[', expecting ']' in /ディレクトリ階層/hogehoge.php on line 数字

原因を教えて頂けると幸いです。
08708572006/02/03(金) 00:36:49ID:???
>>868
上級者の方はそういうコードを好まれるみたいですね。
自分の場合は、関数から引数を2つ出力できなかったり(配列使えばできるけど)するので
なんとなく867みたいなやり方がわかりやすい気になっちゃうんです。
自分のコードは脆弱性を作りやすい書き方みたいですので、他の人のを参考にして綺麗なコードを書くように心がけます。
0871nobodyさん2006/02/03(金) 00:39:36ID:???
>>869
$x[] = $y[2][1];
print_r($x);
じゃ駄目なのかな
08728692006/02/03(金) 00:47:34ID:???
>>871
あ、すみません。
表現がおかしかったようです。


(誤) 配列$x に 二次元配列$y[2][1] の値を代入したくて、次のような式を書きました。

言葉で説明できないのでコードで書きますね。

このようなコードを1行に書きたいんです。
配列に配列をいれることをよくやるので1回一時的な変数にいれたりするとまどろっこしいので。
| $hoge = $y[2][1];
| $x[$hoge];


これを多くの言語では、$x[$y[2][1]] と書けばできるんですが、
phpではこのようにシンプルにやる方法はないのでしょうか?

0873nobodyさん2006/02/03(金) 00:58:02ID:???
>>867
なんか昔のBASICのサブルーチンを思い出すようなコードだな。
0874nobodyさん2006/02/03(金) 00:59:29ID:???
>>872
普通にできるだろう。
869のエラーはそれを”〜”中で書いてるせいだと思う。
0875無知ですまそ2006/02/03(金) 02:01:46ID:SfkSG4GR
パスワードチェックで

if ($FORM{'mail'} ne 'aaa') { &error("パスワードが違います"); }

としたのだけど、aaaとbbb以外は違うとするにはどうすればいいのか教えてください。
0876無知ですまそ2006/02/03(金) 02:02:53ID:SfkSG4GR
if ($FORM{'pass'} ne 'aaa') { &error("パスワードが違います"); }

でした。
0877nobodyさん2006/02/03(金) 02:10:54ID:???
>>875-876
おまえさん、そりゃPerlだよ。
0878nobodyさん2006/02/03(金) 02:15:28ID:???
>>870
基礎からやり直したほうがいいと思う。
用語も間違ってるし、全くわかってないだろ。
0879nobodyさん2006/02/03(金) 02:24:40ID:???
>>873
むしろCOBOLっぽい
0880nobodyさん2006/02/03(金) 02:26:02ID:???
>>875-876
って、マルチかよ・・
0881nobodyさん2006/02/03(金) 10:36:16ID:???
ASPのServer.Transferのように
GETとPOSTとSESSION以外で別ページに変数渡す方法ないでしょうか?

やりたいことは別PHPプログラムへ変数を渡すことです、
GETとPOSTはセキュリティの関係上使用したくありません、
変数を渡されるPHPプログラムは全く弄ることができないので、
SESSIONでも難しい状態です。
宜しくお願いします。
0882nobodyさん2006/02/03(金) 10:48:39ID:???
PHPってオーバーロードできないんですね・・^^;
0883nobodyさん2006/02/03(金) 11:14:29ID:???
php で関数をラップするにはどうしたら?

wrapper(1, 2, 3);
function wrapper() {
  $args = func_get_args();
   //return original($args);
  //これでは original(1, 2, 3) ではなく original(array(1, 2, 3))
}

python かなんかだと配列渡すと勝手に展開してくれた記憶が。
同じようなことをやりたい。
0884nobodyさん2006/02/03(金) 12:08:13ID:???
>>883
call_user_func_array()
0885nobodyさん2006/02/03(金) 12:13:10ID:???
>>881
渡されるプログラムをいじれないなら、渡されるプログラムが
受け取れる方法を確認するのが先じゃないのか?
つか渡されることを前提に作られていないなら get, post 以外は
無理だろ、ふつー。
0886nobodyさん2006/02/03(金) 12:14:01ID:???
>>881
そういうまっとーな質問は本スレ池
0887nobodyさん2006/02/03(金) 12:17:20ID:???
>>881
ASPのServer.Transferだって渡される側を改造しないとデータは受け取れなくなかったか?
0888nobodyさん2006/02/03(金) 12:17:48ID:???
>>881
変数をファイルに書き出して、FTP(もしくはSCP)で相手環境に投げる















・・・・んなバカなw
0889nobodyさん2006/02/03(金) 12:19:23ID:???
>>857
>>520- からの流れを読んで class 使うのが吉
0890nobodyさん2006/02/03(金) 12:26:45ID:???
>>889
こんな分割の仕方をする人がそのままの感覚でクラスを使ったら
めちゃめちゃメモリ食いのプログラムが出来上がる予感
0891nobodyさん2006/02/03(金) 12:32:38ID:???
atomのパーサ・ジェネレータでC++のフリーのライブラリってありますか?
0892nobodyさん2006/02/03(金) 12:36:20ID:???
ここはPHPの質問スレなんだが
08938832006/02/03(金) 14:18:12ID:???
>>884
うぽ。サンクス
0894nobodyさん2006/02/03(金) 14:39:16ID:???
>>890
今時そんな貧乏的なプログラミングする必要あるの?
どんな分割しようがこの時代において大差ないだろ。

そんなに、負荷が気になるなら eAccelerator でも使ってコンパイルすりゃいいじゃん。
そしたら分割がどうのなんてことによる差なんて殆どなくなるから。
0895nobodyさん2006/02/03(金) 17:23:33ID:???
$a = &$b;
と
$a =& $b;
って一緒ですか?
0896nobodyさん2006/02/03(金) 17:37:27ID:???
>>895
$aと=と&と$bはそれぞれ別のtokenだからスペースの有無は関係ないと思う
0897nobodyさん2006/02/03(金) 17:57:08ID:???
>>894
あの単なるラベルにしかなってないレベルの機能分けでクラスにしたら
大半の変数をメンバ変数に抱えてグローバルで持ち回る羽目になると思うし、
しかもそれをいちいちオブジェクトを通した間接参照することになる。
そういう状態になると、PHPってメモリを無駄に馬鹿食いする上に激遅になるんで
ホントにそのためだけにアクセラレーターなどを導入する羽目になりかねないと思う。
0898nobodyさん2006/02/03(金) 17:58:27ID:???
設計はどうでもPHP使うならアクセレータはあった方がいいよ
0899nobodyさん2006/02/03(金) 19:47:52ID:QzQwZT7X
おい

require_once "Auth/Auth.php";

function loginFunction()
{
/**
* HTML出力は、作成するアプリケーションに合うように、
* 変更してください。
*/
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "<input type=\"text\" name=\"username\">";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
}

$dsn = "mysql://user:password@localhost/database";
$a = new Auth("DB", $dsn, "loginFunction");

$a->start();

if ($a->getAuth()) {
/**
* サイトの出力はここ。
*/
}

動かないんだが、
テーブル指定してないのにつながるの?
教えて下さい。
0900nobodyさん2006/02/03(金) 19:52:35ID:???
オーイ(^o^)/~~~~~オーイ
エスパーさんお呼びですよ
0901nobodyさん2006/02/03(金) 19:58:00ID:???
>>899
> おい
偉そうなやつだな。
0902nobodyさん2006/02/03(金) 20:06:13ID:???
動かないんならつながらない。
答えは出てるんじゃまいか。
0903nobodyさん2006/02/03(金) 20:30:19ID:???
>>899
それ配布するつもりか?
プログラム言語触ったことないやつにはecho "";なんて意味不明だ。
別ファイルにhtml部分は書き出したほうがいいんじゃないか?
0904nobodyさん2006/02/03(金) 20:56:05ID:???
>>896
そういうことか、さんくす
あるところに=&を参照代入の演算子だって書いてあったから=&で1つなのかと思った
0905nobodyさん2006/02/03(金) 21:12:53ID:???
>>899
>>903の言う通りだ。includeやら何やらでHTMLファイルを読み込むように汁。

0906nobodyさん2006/02/03(金) 22:40:41ID:???
SJISで
mb_ereg(preg_quote($a),"あと");

で
$a="あ";
だと真で
$a="あと";
だと偽

になるんですが両方とも真にしたいのです。原因わかる方いますでしょうか?
0907nobodyさん2006/02/04(土) 00:13:04ID:???
>>906
良く判らんがSJISに対応してないpreg_quoteで処理したら
そもそもおかしいのでは?
0908nobodyさん2006/02/04(土) 01:09:37ID:???
>>906
再現しない。普通にどっちも真になった。
SJISだ、と言ってるが、実はソースがSJISなだけでphp.iniの設定はSJISじゃなかったりしないか?
レス数が900を超えています。1000を超えると表示できなくなるよ。