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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/05(日) 22:35:34ID:sf8bx52D
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

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

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

過去スレは>>2
0671nobodyさん2006/02/19(日) 12:06:10ID:???
>>670
結果は見えてる。
インデントや改行まで取り去らないと気がすまなくなる。
0672nobodyさん2006/02/19(日) 12:25:58ID:???
PHPで配列と呼ばれているものは厳密には配列ではない
0673nobodyさん2006/02/19(日) 12:29:59ID:iKD+hWT/
>>671
確かにそうですね。体感速度に影響ないくらいの向上なら、可読性優先の
ほうがいいかも。
0674nobodyさん2006/02/19(日) 12:41:24ID:???
・変数は全て1文字
・コメントなんて邪道なものはすべて取っ払う
・空白文字なんて以ての外、改行も入れずにスクリプトは1行で構成
・実行制御に余分な時間を取られるのでループは全て展開
0675nobodyさん2006/02/19(日) 12:42:27ID:???
一度つまったらデバッグがえらい大変そうだな
0676nobodyさん2006/02/19(日) 12:50:26ID:???
そして変数のissetとか周りで腐るとw
改行だけは省略できね。
0677nobodyさん2006/02/19(日) 13:33:06ID:???
>>674
昔BASICでゲームプログラミングする時はそんな風に仕上げてたな。
普通に記述してから変換ツール通したり。
0678nobodyさん2006/02/19(日) 13:55:11ID:iKD+hWT/
改行くらい入れないとテキストエディタの横スクロールが激しすぎて、生産性
大幅ダウンしそう...
0679nobodyさん2006/02/19(日) 14:12:11ID:???
まあ、大抵の人間はエディタは自動で折り返すようにしてるわけだが。
0680nobodyさん2006/02/19(日) 14:13:00ID:j5wr3rm8
datとかのログファイルを直接見れないようにするにはどうしたらいいんですか?
属性を606から変えたら、プログラムから読み書きできないし・・・
0681nobodyさん2006/02/19(日) 14:13:43ID:???
まあ、普通に作った後に改行を削除すりゃいいと思うんだが。
0682nobodyさん2006/02/19(日) 14:14:47ID:???
>>680
> 属性を606から変えたら、プログラムから読み書きできない
?(´△`) デキルダロ

拡張子をcgiとかにしれ
0683nobodyさん2006/02/19(日) 14:55:13ID:???
確認君や診断くんのようなproxy判定スクリプトを作りたいのですが、参考になるスクリプトはありませんか?
0684nobodyさん2006/02/19(日) 15:02:27ID:???
phpinfo
0685nobodyさん2006/02/19(日) 15:00:20ID:???
>>683
いや、作る段階でそんなこと言ってるようでは
役に立つ判定プログラムは作れないと思うよ?

というか、診断くんそのものをダウンロードすれば
参考どころの騒ぎじゃないだろ?
0686nobodyさん2006/02/19(日) 15:09:48ID:???
JpGraphで、GroupBarPlot内のバーに
隙間を開けたいんだけど、どうしたらいいかな?
BarPlotでSetWidth設定してもダメだった。
0687nobodyさん2006/02/19(日) 16:14:59ID:???
>>680
直接見られたくないファイルは、ドキュメントルートの下に置かない。
0688nobodyさん2006/02/19(日) 16:38:45ID:8orHyj9/
requireで読み込むファイルがSJISの場合、
自動的にEUC-JPに変換して読み込みたいのですが、
どうすればよいでしょうか?
0689nobodyさん2006/02/19(日) 17:11:43ID:iKD+hWT/
requireではないけど、
$line = file_get_contents('file');
$line = mb_convert_encoding($line, 'EUC-JP', 'SJIS');
でいかがでしょう?
0690nobodyさん2006/02/19(日) 17:51:33ID:???
require で読むのが PHP スクリプトが書かれているファイルではないってのは
非常識なコーディングだろ。
普通のファイルは >>689 のように読んでくれよ頼むから。
0691nobodyさん2006/02/19(日) 18:42:18ID:???
>>688
それ、他人が作ったライブラリとかの類?
0692sage2006/02/19(日) 19:06:37ID:iKD+hWT/
1行目
20行目
3行目
っていう内容のtest.txtというファイルの内容を、
1行目
2行目
3行目
というように一行だけ書き換えたいんですが、どうやればできますか。
file_get_contents->preg_replace->file_put_contentsという方法も
考えたのですが、これだとメモリを浪費しそうなので、一行ずつ操作
する方法を教えていただけるとありがたいです。
0693nobodyさん2006/02/19(日) 19:10:05ID:???
>>692
fopen "r"→fopen "w"→whileでfgetsしながらfputs
06946922006/02/19(日) 19:17:53ID:???
早速の回答ありがとうございます。
fopenを違う引数で2回呼び出すわけですね。使ったことがない関数がでて
きたので、これから早速試してみます。
0695nobodyさん2006/02/19(日) 22:49:33ID:QKFjYBJ6
ttp://www.seoup.com/linkact/act4/index.html

拡張子が
index.htmlのファイルでもphp利用可能なの?
htaccessで何かやってるのかな。。
0696nobodyさん2006/02/19(日) 23:02:40ID:???
>>695
何もやってないよ ^ ^
0697nobodyさん2006/02/19(日) 23:16:29ID:???
do{
$i++;
}while($i == 5);←ここで真ならば、特定の動作を行ってからdoに戻る
というようなことは可能でしょうか。
また、代替案もあればぜひご教授お願いいたします。
06986612006/02/19(日) 23:26:20ID:8QITr0F/
皆さんありがとうございます

>>667のようにするのって何て言うんでしょうか?
調べようにもよくわからないのですが・・・・
0699nobodyさん2006/02/19(日) 23:40:10ID:cMtmYVLo
>>698
単なるリンク
0700nobodyさん2006/02/19(日) 23:42:06ID:???
>>697
今いちやりたいことがよくわかりませんが、
無限ループさせたいのでしょうか?

while (1) {
$i++;
if ($i == 5) {
// 処理を記述
}
}

ではだめでしょうか?
07016612006/02/19(日) 23:59:21ID:8QITr0F/
>>699
phpにリンクでURLを渡す(?)
見たいなことなんでしょうか>?
0702nobodyさん2006/02/20(月) 00:08:50ID:???
<a href="./comment.php?date=060218">foo</a>
こういうことじゃないの?
07036972006/02/20(月) 00:16:12ID:???
>>700
ご返答ありがとうございます。
説明が分かり難く申し訳ありません。
無限ループではなく、$i==5が偽になった時点でループを抜けたいのです。
1)doの内容を実行
2a)whileが真ならば"特定の処理"を実行した後doを実行
2b)whileが偽ならば"特定の処理"を行わずにループ終了

御指南いただいたコードですと、ifのところが偽ならばwhileループを抜ける、ということです。
付け加えさせていただきますと、ちょうど下記の動作です。
$hoge = 1;
while ($hoge) {
$i++;
if ($i == 5) {
// 処理を記述
}else{
$hoge = 0; // breakで二重ループを抜けられると良いのですが・・・
}
}
この動作をdo...whileでできないものかと試行錯誤していたのですが、
ふと気づけば希望の動作が完成してしまいましたね・・・
ただ、もう少し綺麗な書き方はないでしょうか。
頼んでばかりで大変申し訳ないのですが、私の力量ですと案が浮かびません。
今一度、よろしくお願いいたします。
07046612006/02/20(月) 00:49:07ID:wo/bPpPB
comment.php?date=060218
        ~~~~~~~~~~~~~~
この部分はcomment.php側にはどのように送られて、
どう処理して受け取ればいいのでしょうか?

0705nobodyさん2006/02/20(月) 00:53:25ID:???
「クエリ」「GET」とかでぐぐれ
0706nobodyさん2006/02/20(月) 01:30:38ID:???
echo $_GET['date'];
0707nobodyさん2006/02/20(月) 01:30:55ID:???
あれPHPってwhile continueないの?やっぱPerlだなw
0708nobodyさん2006/02/20(月) 01:41:27ID:???
>>704
$_GET
0709nobodyさん2006/02/20(月) 02:10:26ID:???
>>695
.htaccessかhttp.confで.html拡張子もPHPであると指定する
0710nobodyさん2006/02/20(月) 02:12:52ID:???
>>698
お前はWebプログラムの基礎の基礎の基礎から1度やり直せ。
つーか、そんなのも知らずにプログラムしようとするな!!
まず1冊でいいからWebプログラム入門の本の頭から読んでみろよ。
そんなんでコメントはともかくトラックバックなんて仕込まれた日には社会の迷惑。
07116972006/02/20(月) 07:20:41ID:???
>>707
示唆していただきありがとうございます。
こうすればいいのですね。これならば最後のループだけ違う動作も行えますね。

do{
$i++;
if($i<=5){
//特定の動作
continue;
}
//最後のループのみで実行される動作
}while($i <= 5);

>>697,>>703の$i==5はすべて$i<=5の間違いでした。
度々申し訳ありません。
0712nobodyさん2006/02/20(月) 08:17:51ID:???
よくわからんが
for($i=1;$i<=5;$i++){
 if($i<=5){
  //特定の動作
  continue; //←なしでもいい
 }else{
  break;
 }
}
じゃだめなの?
07137122006/02/20(月) 08:23:25ID:???
なんか変に書いてしまた・・
for($i=1;$i<=5;$i++){
 //特定の動作
 if($i==5){ //最後の処理 }
}
0714nobodyさん2006/02/20(月) 10:06:25ID:???
同じ条件式を複数書いてると仕様変更時にバグ出しそうだけどな
0715nobodyさん2006/02/20(月) 10:40:46ID:???
$i=0;
while (TRUE) {
 if (++$i<=5)
  echo '途中';
 else {
  echo '最後';
  break;
 }
}
で良さそうな
0716nobodyさん2006/02/20(月) 10:47:48ID:???
わざわざwhileでなくdo〜while使ってるってことは$iはいくつからスタートするか不定なんだと思うが。
0717nobodyさん2006/02/20(月) 12:03:55ID:???
do-whileを使ってるという事は必ず一回はやりたいって事だな?
0718nobodyさん2006/02/20(月) 12:12:10ID:???
そこまで溜まってません
0719nobodyさん2006/02/20(月) 13:45:09ID:???
俺はやりたい
0720nobodyさん2006/02/20(月) 13:52:42ID:???
素敵な会話中にすみません。
ちょと教えてほしいのですがinputのテキストフィールドなどの値を表示させるとき
<input value='<?=$hoge?>'> だと$hogeに'が入っているとおかしくなるし
<input value="<?=$hoge?>"> だと$hogeに"が入っているとおかしくなるし
<input value=<?=$hoge?> style=〜> だと$hogeが空白だとvalue後のタグが値と認識されて
おかしくなってしまうのですがどうしたらよいのでしょうか?
0721nobodyさん2006/02/20(月) 13:59:22ID:???
変数のスペルミスを防ぎたいのですが。。。

変数の宣言を強制する方法はありますか?
0722nobodyさん2006/02/20(月) 14:06:59ID:???
>>720
URLエンコードしなさい。漢字もね
0723nobodyさん2006/02/20(月) 14:08:52ID:???
>>721
----test.php----
変数aに10を入力し、それを変数bに移し変数bを出力する
====source====
error_reporting(E_ALL);
$a = 10;
$b = $c; // 未宣言としてここは防げる。
$c = 10; // ここは防げない。

echo $d; // 未宣言としてここは防げる
----<test.php>----
0724nobodyさん2006/02/20(月) 14:14:30ID:???
>>722 ありがとう
0725nobodyさん2006/02/20(月) 15:02:51ID:???
>>722
URLエンコード??htmlspecialcharsじゃないのか?
0726nobodyさん2006/02/20(月) 15:27:30ID:???
720の始めの一行につぼったw
07276972006/02/20(月) 15:30:36ID:???
なんだか色々とありがとうございます。

>>713
「特定の動作」は、ループの最後の"$i<=5"が真ならば実行し、偽ならば実行せずにループ終了
というようにさせたいのです。
それですと必ず最初に「特定の動作」を行ってしまうので、申し訳ありませんが趣旨とは少し異なります。
>>715
ちょうどその動作です。
綺麗なコードをどうもありがとうございます。
>>716
$i=0と考えていただいて結構です。申し訳ありませんでした。
>>717
最初にdo...whileを使おうと方針を立てただけで、同じ動作が行われるならば特に問題はないです。

do{
//ループ
}while(条件式) ここに条件が真の場合に行われる動作 ;
このような仕様になれば楽なのですけどね。
0728nobodyさん2006/02/20(月) 15:44:16ID:???
>>727
$i=0から開始なら
for($i = 0; $i <= 5; $i ++, 特定の動作) {
}
でいいじゃん
0729nobodyさん2006/02/20(月) 16:05:20ID:???
キーをID、値をPASSになるように連想配列を作りたいのですがうまくいきません。。
ちょこっとヒント頂けませんかoz

$conn=ocilogon("xxx","yyy","zzz");
$sql = "select id,pass from users";

$stmt = OCIParse($conn, $sql);
OCIDefineByName($stmt, "ID", &$dbid);
OCIDefineByName($stmt, "PASS", &$dbpass);
OCIExecute($stmt);

while(OCIFetch($stmt)){
$idpw[$dbid] = $dbpass;
}

OCIFreeStatement($stmt);
OCILogoff($conn);

0730nobodyさん2006/02/20(月) 16:19:35ID:???
環境書き忘れてました apache2.2 oracle9rs2 php5.1.2
簡単なsql文でデータは持って来れてるのは確認したので
配列に格納するところがおかしいとは思うんですが・・・
0731nobodyさん2006/02/20(月) 16:21:01ID:???
>>729
問題なく動きそうな気が駿河…
結果として$idpwの中身ってどういう状態になるんだ?
07327292006/02/20(月) 16:44:05ID:???
ありゃ・・今確認してみたら格納できてました。てことは他のとこか

聞く前にまだ自分にできることあったのに気づかなかったのがセンスなさ過ぎますね(TT
ありがとうございました またしばらく悩んでみます
07336972006/02/20(月) 17:27:15ID:???
>>728
・・・。
自分が情けなさすぎます・・・。
ありがとうございました。
0734nobodyさん2006/02/20(月) 18:07:32ID:???
>>733
Cやれば?
おまいなら3ヶ月ぐらいで初級並みの実力なら超えられそうだが。
0735nobodyさん2006/02/20(月) 18:19:28ID:???
訳わからん。このままPHPでいいじゃんw
0736nobodyさん2006/02/20(月) 18:41:07ID:???
PHPプログラマーになりたいのか、プログラマーになりたいのかで違うな
0737nobodyさん2006/02/20(月) 18:54:32ID:E2kZov7h
PHPでContent-type: text/plain;なページを出すにはどうしたらいいですか?
PHPの最初で header('Content-type: text/plain;'); としてもうまくいきません。
0738nobodyさん2006/02/20(月) 18:56:12ID:???
headerの前で何か出力をすると意味ないよ。
header前でechoとかprintとか使ってない?
0739nobodyさん2006/02/20(月) 18:56:36ID:???
preg_match_allで、n回マッチしたら処理を終了させるよう
なことはできますか?
例)
preg_match_all('([0-9]+?)', '1,2,3,4,5,6,7,8,9', $matches);
この例では5までマッチしたら正規表現による検索を中止したい。
07407372006/02/20(月) 19:02:18ID:???
>>738
> headerの前で何か出力をすると意味ないよ。
> header前でechoとかprintとか使ってない?

使ってないです。
ちなみにheader()の前でheaders_sent()してみるとFalseでした。
php.iniの設定の問題ですかね…
0741nobodyさん2006/02/20(月) 19:04:14ID:???
>>740
改行や空白など一切のデータがheaderの前で出力されていない必要が
あります。
0742nobodyさんNGNG
>>738に補足
<?php の前に(たとえ空行でも)何かあってはならない
0743nobodyさん2006/02/20(月) 19:06:55ID:???
くだらない質問です。

カンマ刻みの「要素,キー」が複数行あるデータをtxtファイルから読み込みasortしたいのですが。
読み込んだファイルから一気に連想配列を作成のしかたを教えてください。

自分では、
$lines = file("test.txt");
で読み込んだあとに、
$i = 0;
foreach ($lines as $value) {
list($a => $b) = explode(",",$lines[$i]);
echo "$a => $b";
$i++;
}
でできるかな…とかおもったんですが無理でした。
勉強中なんですさまじく頭悪い質問だとおもいますがよろしくお願いします。
0744nobodyさん2006/02/20(月) 19:58:21ID:???
>>739
allでは無理。つーかallって言わないだろそれ。
preg_matchはそれを実現するために4.3.3以降でoffset指定ができるようになってるから
ループで回せ。
0745nobodyさん2006/02/20(月) 20:00:30ID:???
>>739
条件にあるループにして途中で
break
die
return
continue
あたりで出来るんじゃね
preg_match_all使ったこと無いけどさ
07467392006/02/20(月) 20:04:30ID:???
回答ありがとうございます。
>allでは無理。つーかallって言わないだろそれ。
うーm、確かに

それでは、ループで回してみます。
0747nobodyさん2006/02/20(月) 20:04:35ID:???
>>745
preg_match_allは一発で全検索結果を返すための関数だよ
0748nobodyさん2006/02/20(月) 20:58:35ID:???
>>743
> list($a => $b) = explode(",",$lines[$i]);
ここで無理せずに
list($a, $b) = explode(〜);
$array[$a] = $b;
にしときなよ。
0749nobodyさん2006/02/20(月) 21:08:16ID:???
>>748
レスありがとうございます。

やっぱ、それしかないんですかねぇ。
問題ないしやっぱりそれでいこうかとおもいます。
回答ありがとうございました。
0750nobodyさん2006/02/20(月) 22:01:47ID:???
利用可能なPEARパッケージを全てインストールしたいんですが、
一発でインストールできるコマンドは無いんですか?
落としたパッケージを一つ一つ入れる方法しか見つかりません。
Fedora core4です。
0751nobodyさん2006/02/20(月) 22:04:06ID:???
綺麗なコードなんて書かなくていい。
見やすいコードを書くんだ。
0752nobodyさん2006/02/20(月) 22:08:30ID:???
綺麗なコードって見やすいコードじゃないの?
それを言うなら「かっこいいコードなんて書かなくていい。分かりやすいコードを書くんだ」だと思う。
バグを生まない鉄則だよね。
07536972006/02/20(月) 22:34:44ID:???
>>734
実はCからPHPに移ったクチでして・・・
今度はVS2005が手に入ったのでC++に挑戦するつもりです。
0754nobodyさん2006/02/20(月) 22:58:13ID:???
タブ区切りのデータファイルの任意の行の任意の列にある文字列を参照して表示するにはどう記述すればいいんでしょうか?

hoge.csv の2行目,6列目の文字列を表示
<?echo
0755nobodyさん2006/02/20(月) 22:59:20ID:???
      ______       ______
     r' ,v^v^v^v^v^il    /          ヽ
     l / jニニコ iニニ!.   /  ジ  き  ぼ   l
    i~^'  fエ:エi  fエエ)Fi  !   ャ  れ  く    l
    ヽr      >   V  !   イ  い  は   l
     l   !ー―‐r  l <.   ア  な       l
 __,.r-‐人   `ー―'  ノ_ ヽ  ン         /
ノ   ! !  ゙ー‐-- ̄--‐'"ハ ~^i \_       _ノ
 ヽ ! ヽ、_     _.ノ  i  \    ̄ ̄ ̄ ̄
ヾV /              ! /.入
0756nobodyさん2006/02/20(月) 23:00:39ID:???
>>750
それってソフトやOSの設定でしょ?
Linux板行けば?
0757nobodyさん2006/02/20(月) 23:05:58ID:???
>>754
$fl = file ("hoge.csv");
$sp = split ("\t", $fl[1]);
$target = $sp[6];
かな。
0758nobodyさん2006/02/21(火) 00:09:51ID:???
>>757
なんで split を使わせるんだ? 正規表現じゃないなら explode で充分
0759nobodyさん2006/02/21(火) 00:26:57ID:???
perl上がりと見た
0760nobodyさん2006/02/21(火) 00:28:32ID:???
>>758
なるほど。
そうだよな。
スマン。
0761nobodyさん2006/02/21(火) 01:46:35ID:???
つfgetcsv
0762nobodyさん2006/02/21(火) 01:54:56ID:???
>>757>>758
ありがおう
>>761
> fgetcsv
csvファイルはタブ区切りでも使えますかね?
0763nobodyさん2006/02/21(火) 01:55:32ID:???
だあああああああめだあああああああああああああ
fgetcsvなんて運頼みの関数使っちゃああああああああ
0764nobodyさん2006/02/21(火) 01:56:44ID:???
マジでfgetcsvは危ないぞ

これ試してみ

"ソ","あああ"
0765nobodyさん2006/02/21(火) 02:49:36ID:???
fgetcsvは、確かにカンマとダブルクォートのデフォルトだと危ないけど、
タブ区切りだけのものとかにこう使うと問題無く使えて便利だよ。
$line = fgetcsv($fp, 1024, "\t", '');
0766nobodyさん2006/02/21(火) 05:12:01ID:???
PHPからZIP圧縮、またはJAR圧縮して標準出力に出力する場合にはどの関数を使えばよいですか?
ZIP解凍関数ならあるのですが…
0767nobodyさん2006/02/21(火) 06:25:49ID:???
>>766
関数はないのではないかな。
execかsystemを使って外で圧縮すればよいかと。
0768nobodyさん2006/02/21(火) 07:13:05ID:???
>>737
どううまくいかないのかわからないが
IEはContent-type無視するから意味ないよ
0769nobodyさん2006/02/21(火) 08:41:11ID:???
>>766
>>469-473
>>767のやり方も、方法のひとつ。
0770nobodyさん2006/02/21(火) 10:26:49ID:9X8UKVFd
SESSIONについて質問します。

ショッピングカートの原型を作っているのですが、
$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
header('Location')で次のページで表示します。

再び前のページに戻って今度は$nameにtest2が入っているデータを選択して
送信します。しかし、次のページではtestしか表示されません。

次のページではforを使って、$_SESSION['test']に入っているデータをすべて
出すようにしたのですが、1つしか入らないみたいです。


説明が下手で済みませんが、セッション変数に次々とデータを入れて
すべて表示させるような事はできるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています