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

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

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

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

本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/l50

前スレ【PHP】下らねぇ質問はここに書き込みやがれpart16
http://pc8.2ch.net/test/read.cgi/php/1139146534/l50

過去スレは>>2
0159nobodyさん2006/02/28(火) 23:11:14ID:???
学力崩壊―「ゆとり教育」が子どもをダメにした PHP文庫
和田 秀樹 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4569579108/ref=pd_sim_dp_4/249-5087703-6782729
0160nobodyさん2006/02/28(火) 23:50:56ID:???
馬鹿に限って血液型とかゆとり教育の話をする、とそういことさ
0161nobodyさん2006/02/28(火) 23:58:27ID:???
俺、血液型はAだけどゆとり教育なんだ。
0162nobodyさん2006/03/01(水) 00:24:46ID:???
>>158
気のせいですね。ここはPHPの雑談スレなんですよ。
0163nobodyさん2006/03/01(水) 00:27:02ID:HmVG72O5
ブラウザがcookieを使えるようになっているかを判別することはできるでしょうか?
0164nobodyさん2006/03/01(水) 00:30:16ID:???
クッキー送って記録されてればOK
0165nobodyさん2006/03/01(水) 00:51:43ID:???
cookieってsession_start()みたいな宣言必要じゃないですよね?
セッションなら上手くいくんですが、クッキーだと上手くいかんとです。
ブラウザ側で禁止してるわけでもないし。

$_COOKIE["hoge"] = "hogetest";
で使ってるんだけど、なぜか上手く保持できない・・・orz

表示するときも echo $_COOKIE["hoge"];
で間違いないですよね?
01661652006/03/01(水) 00:58:57ID:???
setcookie使ったらいけました・・・orz

手元のPHPリファレンスには
$_COOKIE["hoge"] = "hogetest";
と
setcookie("hoge", "hogetest");
は同じって書いてあるのですが、これはもしかして嘘でしょうか?
0167nobodyさん2006/03/01(水) 00:59:09ID:???
あのさ、最低、「php cookie」ぐらいでぐぐれよ。
0168nobodyさん2006/03/01(水) 01:02:56ID:???
>>166
はい嘘です。
setするときにはsetcookie使いなさい以上
0169nobodyさん2006/03/01(水) 01:07:06ID:ektJPim1
そのリファレンスの書名を是非教えてください
0170nobodyさん2006/03/01(水) 07:32:54ID:???
>>122
エラーのときfalseを返す関数はPHPでは一般的だったりする
str_word_countとか引数の違いで戻り値がstringだったり配列だったりするし
PHPやるなら型のことは忘れないと駄目だよ
0171nobodyさん2006/03/01(水) 08:18:27ID:???
usort関数で使うためのソート関数についての質問です。

$a[1] の内容 で 昇順にソートする場合には下記のような方法で出来ますが、
この場合、(A, F, G, Z, a, f, g, z) と並んでしまいます。
(A, a, F, f, G, g, Z, z) のようにアルファベットの大文字と小文字を区別しないような
ソート関数を作りたいのですが、どうすれば良いでしょうか?

function cmp($a, $b) {
if ($a[1] < $b[$1) { return -1; }
if ($a[1] == $b[1) { return 0; }
if ($a[1] > $b[1]) { return 1; }
}
0172nobodyさん2006/03/01(水) 09:11:40ID:???
strcasecmpすればいいだけでしょーがー
0173nobodyさん2006/03/01(水) 12:22:53ID:C+OfQRhv
PHPで $hoge に任意の文字が含まれているとします。
もし、それが数字である場合に真を返す関数はありますか?
0174nobodyさん2006/03/01(水) 12:36:56ID:???
>>173
is_numeric とか gettype などいかがでしょう。
実際に試してないので自信ないですが。

はい、次ぼくの質問
↓
perlで言うところの

print <<HOGE;
なんたらかんたら
HOGE

みたいな書式はありますでしょうか?
この書き方の呼び方が分からんので検索できなかったす……
0175nobodyさん2006/03/01(水) 12:40:55ID:???
>>174
このスレを「 <<< 」で検索
01761742006/03/01(水) 12:41:13ID:???
自己解決。ヒアドキュメントね。そうそう。
01771742006/03/01(水) 12:42:26ID:???
>>175
失礼しました!猛省します。
あきれないで……今後ともよろしくお願いします
0178nobodyさん2006/03/01(水) 12:44:38ID:???
ちなみにecho以外にも、変数の格納などに応用可能。
0179nobodyさん2006/03/01(水) 13:07:10ID:YIO/KfnW
ヒアドキュメントってPerlだと

 print ($flag)? <<TEXT1 : <<TEXT2;
なんたら1
TEXT1
なんたら2
TEXT2

みたいに書けるんだけど、PHPの場合はこれって

 print ($flag)? <<<TEXT1
なんたら1
TEXT1
 : <<<TEXT2
なんたら2
TEXT2;

って書くしかない?
0180nobodyさん2006/03/01(水) 13:28:25ID:???
>>173
ctype_digit($hoge);
という関数もある。
Cのネイティブ関数なのでこれでよければctype関数の方が早い

ただし$hogeは文字列
$hoge = 10;
ctype_digit($hoge)はfalseになる
$hoge = 48; //'0'のASCIIコード0x30
ctype_digit($hoge)はtrueになる
ctype_digit("$hoge");と文字列にすると両方trueになる
0181nobodyさん2006/03/01(水) 14:02:36ID:???
>>179
後者しかないね。
PHPだと識別子直後の改行が必要なうえに、
次の行に何が書いてあっても取り込む文字列として見なされる。
0182nobodyさん2006/03/01(水) 14:48:01ID:???
 print ($flag)? (<<<TEXT1
なんたら1
TEXT1)
 : (<<<TEXT2
なんたら2
TEXT2);

カッコで閉じても無理?
0183nobodyさん2006/03/01(水) 15:21:27ID:???
>>182
何をしたいのか分からん。
おまけにTEXT1とかの後ろに)を付けるのは文法エラーだ。
0184nobodyさん2006/03/01(水) 16:09:03ID:???
ちょっと教えてほしいのですが
幾つかのデータを表にだしある行のデータを変更したら一番端に作っているチェックを
Javaでonにして、更新時はそのチェックをついている行のデータを更新させているのですが
↓こんな感じ 各チェックボックスの値は主キー
foreach($_POST['check'] as $val){
 mysql_query("update hoge set a='".$_POST{'a'.$val}."',b='".$_POST{'b'.$val}."' ");
}
$_POSTも項目ごとに必要だし各項目の後ろの主キー(一意の番号)をつけないといけないので
もっとスマートor簡単な処理方法なにかないでしょうか?
0185nobodyさん2006/03/01(水) 17:24:45ID:???
>>184
質問とは関係ないけどwhereはいらないのか
それと注射対策にエスケープしろよ
0186nobodyさん2006/03/01(水) 18:04:05ID:MpRVy8N5
>>184
何がしたいのか、解読するのが面倒なので、もっと質問を整理してください。
0187nobodyさん2006/03/01(水) 18:44:58ID:???
>>183
echo ($hoge) ? 'true': 'false';
0188nobodyさん2006/03/01(水) 18:46:21ID:???
>>184
日本語で
0189nobodyさん2006/03/01(水) 18:49:15ID:???
>>184
JavaとJSは別物

スマートにやるなら配列でもつかえばできるだろ?
0190nobodyさん2006/03/01(水) 19:17:28ID:???
PHPで掲示板を作ってるんですが、2chとかはスレのURLが「スレ番/レス」となってますよね。
ということは、新規にスレをたてた時には新しいディレクトリを作成し、さらにその中にindex.php(ログからスレ内容を加工、表示するスクリプト)とログファイルを生成してるんでしょうか?
普通のレン鯖でこういう仕様はやめた方がいいんでしょうか?
0191nobodyさん2006/03/01(水) 19:34:34ID:???
>>190

> 新規にスレをたてた時には新しいディレクトリを作成し
そんなことはやってません。

ttp://*.2ch.net/test/read.cgi/*/1140786348/l50

read.cgiで、/以降を解析して表示しているだけです。

> 普通のレン鯖でこういう仕様はやめた方がいいんでしょうか?
フォルダ作る分には全然構わないと思います


ここまで書いて自信なくなってきましたが、
おそらくこうだったと思います。
0192nobodyさん2006/03/01(水) 19:36:39ID:???
へー
0193nobodyさん2006/03/01(水) 19:41:00ID:???
>>190
参考までに

【スレッド】2ch型掲示板 14 【フロート型】@WebProg
http://pc8.2ch.net/test/read.cgi/php/1127896640/l50
0194nobodyさん2006/03/01(水) 20:02:46ID:???
>>191
そういえばread.cgiが間に入ってますね。ありがとうございます。

>>192
誘導ありがとうございます。参考にさせてもらいます。
0195nobodyさん2006/03/01(水) 21:09:07ID:MpRVy8N5
>>194
パスインフォ
0196nobodyさん2006/03/01(水) 23:10:25ID:9If1oYZF
midiファイルを再生させるソース
<EMBED
SRC=".mid"
WIDTH="150"
HEIGHT="40"
AUTOSTART="FALSE"
REPEAT="TRUE"
SAVE="TRUE"
>
これの類で複製を出来なくする方法ってどうやるのですか?
0197nobodyさん2006/03/01(水) 23:12:43ID:???
>>196
PHP関係ない
01981962006/03/01(水) 23:13:19ID:9If1oYZF
ごめんスレタイ見てなかった。
どこ逝きゃいい?
0199nobodyさん2006/03/01(水) 23:54:54ID:???
>>196
探せよ屑
0200nobodyさん2006/03/02(木) 04:18:35ID:???
WEBアプリケーションは

1.入力
2.入力チェック
3.確認
4.処理
5.完了

ってな感じが一般的だと思うんですが、これってひとつファイル中で if 使ってやるほうがいいか
form.php、check.phpとかファイルを分けてやるほうがいいかどう思いますか?
0201nobodyさん2006/03/02(木) 05:02:30ID:???
>>200
index.php と check.inc や end.inc というように、
1つのphpファイルと多数のincファイル(インクルードするファイル)で構成するのがいいと思う。
0202nobodyさん2006/03/02(木) 08:24:23ID:???
別に拡張子はなんだっていいよ。
0203nobodyさん2006/03/02(木) 09:20:52ID:c/Xyk/Yy
次のようなサンプルを良くみかけます。
$fp = @fopen($editfile, 'w');
$fp = fopen($editfile, 'w');


fopen関数の横に「@」があると無い場合とでは動作の違いはあるのでしょうか?
0204nobodyさん2006/03/02(木) 09:28:08ID:QF2KFk3i
>>203
エラーメッセージを抑制するだよ


そこでおいらの質問というか確認をお願いしますだ
Fatal error: Cannot redeclare user_function() (previously declared in /home/www/hoge.php:4) in /home/www/hoge.php on line 3
みたいなエラーが出たんだけど
ループの中で何回も
require 'user_function()';
をやっていたのがいけないんですよね?
0205nobodyさん2006/03/02(木) 09:42:45ID:???
>>204
エラーメッセージ通りじゃねーか。
0206nobodyさん2006/03/02(木) 10:07:55ID:???
>>204
わかってんじゃねーか
0207nobodyさん2006/03/02(木) 10:08:34ID:???
>>200
システムの規模なんかにもよる。
02082032006/03/02(木) 10:51:59ID:???
>>204
ありがとです
02092032006/03/02(木) 10:53:31ID:???
>>204
教えてくれたお礼に教えてあげよう。

includeはループの中で何度でもできるが、requireは1回しかできないから
ループの中で何度も使いたい場合は include使えばいいだよ
0210nobodyさん2006/03/02(木) 10:59:59ID:???
つ require_once
0211nobodyさん2006/03/02(木) 11:03:29ID:???
>>209
> requireは1回しかできないから
できる。
includeとrequireはエラー時にWarningになるだけかFatal Errorになってしまうかの差しかない。
0212nobodyさん2006/03/02(木) 11:06:34ID:???
>>211
勘違いしてない?
http://www.komonet.ne.jp/~php/chap7.htm
0213nobodyさん2006/03/02(木) 11:09:55ID:???
ttp://jp.php.net/manual/ja/function.require-once.php
ttp://jp.php.net/manual/ja/function.require.php
ttp://jp.php.net/manual/ja/function.include-once.php
ttp://jp.php.net/manual/ja/function.include.php
0214nobodyさん2006/03/02(木) 11:12:39ID:???
そのサイト、大丈夫か?

require()とinclude()は エラーの扱い方を除けば全く同様に振舞います。
0215nobodyさん2006/03/02(木) 11:14:35ID:???
どうしてこう、サイトといい書籍といい、PHPの解説してるとこって嘘書いてるとこが多いんだ?
0216nobodyさん2006/03/02(木) 11:14:45ID:???
同様に振舞うとかそういう問題じゃないと思うが。
printfとかprintとかechoが同じといってるようなもんだな。
0217nobodyさん2006/03/02(木) 11:18:31ID:???
公式マニュアルからのコピペですが。
英語だと
require() and include() are identical in every way except how they handle failure.
0218nobodyさん2006/03/02(木) 11:27:06ID:???
>>212
ソースは解説サイトよりマニュアルを参照した方がいい。
そこで自分の過ちに気付き、自分が間違っていたんだと認める事ができれば人間としてもレベルが高い。
更に変な解説したサイトに嫌がらせのメールを送ったり勝手にMLに登録したら次の日は大吉。
0219nobodyさん2006/03/02(木) 11:28:06ID:???
>>212
[a.php]
<?php
require("b.php");
require("b.php");
?>

[b.php]
<?php
print "a\n";
?>

実行結果
a
a
02202032006/03/02(木) 11:29:03ID:???
なぬ、解説サイトが間違っていたのか
それをずっと信じてました
すみません
0221nobodyさん2006/03/02(木) 11:33:10ID:???
http://www.komonet.ne.jp/~php/chap13.htm

「(2)クッキーは、設定されたものと同じパラメータで削除する必要があります。クッキーを削除する場合には、ブラウザの削除機構を起動する為に、必ず有効期限を過去に設定する必要があります。」
もうむちゃくちゃだな。

「Cookieの削除をするには過去に設定するしかない」ってデマ情報がやまほどあるんだけど
真面目にいってるんだろうか。

setcookie( "Cookie", ""); だけで削除できるだろうが。

0222nobodyさん2006/03/02(木) 11:39:54ID:???
http://hotwired.goo.ne.jp/webmonkey/2000/02/index4a.html
0223nobodyさん2006/03/02(木) 11:50:43ID:???
>>221
http://www.php.net/manual/ja/function.setcookie.php
02242042006/03/02(木) 11:53:31ID:???
皆さん情報ありがとうございます。
思いのほか盛り上がる内容だったみたいでなんだか嬉しいです。

>>210さんの方法が一番楽そうだったので、安直な私としては即採用です。
どう見ても便利です。ありがとうございました。
0225nobodyさん2006/03/02(木) 11:56:43ID:???
>>224
1番楽そうというか、それしか回答はないよな
0226nobodyさん2006/03/02(木) 12:03:08ID:???
>>224
俺としては何でループの中でrequireしないといけないのかが気になるがな
0227nobodyさん2006/03/02(木) 12:03:31ID:???
>require 'user_function()';
コレの意味がわからんのは俺だけか?
0228nobodyさん2006/03/02(木) 12:16:33ID:???
>>227
もちろんファイル名だろ
02292042006/03/02(木) 12:20:20ID:???
>>226
うーん、間違った行為なんでしょうか
ループが無駄に長いもので、ループの外にrequire書いてもいいんですが。
requireとその中にユーザ関数があるんですが、記述が離れると一覧性が下がるかなぁと。

>>227
oops,
require 'user_function.inc';
とでも皆さん脳内変換してくれてたんですね・・。
02302212006/03/02(木) 12:22:04ID:???
>>223
「クッキーを削除する場合には、ブラウザの削除機構を起動するために必 ず有効期限を過去に設定する必要があります。 前の例でクッキーを削除する方法のサンプルです。」と
公式マニュアルにもあるのか。
値が無いCookieをSetすることでFirefoxやIEでは正常にCookieが削除されるけど、これは仕様外の動作なのかな。
0231nobodyさん2006/03/02(木) 13:04:31ID:???
>>230
「クッキーは設定されたものと同じパラメータで削除する必要があります。 値が空文字列("")で、その他の全ての引数が前にsetcookieをコールした時と 同じである場合に、指定された名前のクッキーはリモートクライアント上から 削除されます。」
とも書いてあるんだから両方とも正しいんじゃない?
0232nobodyさん2006/03/02(木) 13:42:54ID:???
mysql_query()関数で正しく実行できなかった場合に
詳細を知る方法はないでしょうか?
sql文をよく間違うのですが、
原因を見つけるまでかなり時間がかかります。

$error = mysql_query($sql);
echo $error;
これでは無理でした・・・
0233nobodyさん2006/03/02(木) 13:49:35ID:???
del_set_cookie();
を使いましょう。








ユーザ関数で
0234nobodyさん2006/03/02(木) 14:22:21ID:???
HTMLフォームのsubmitボタンから、外部PHPスクリプトの特定の関数を呼び出すことはできますか?
0235nobodyさん2006/03/02(木) 14:31:46ID:???
>>234
(--;) ウ〜ン
何を突っ込んでいいのやら…
0236nobodyさん2006/03/02(木) 15:11:17ID:???
>>232
>$error = mysql_query($sql);
これで$errorにクエリが成功/不成功したかという情報が入ってるから、
その情報を元に、別の関数(直前のクエリのエラーを得る)で詳細を取得。
つかマニュアル読める環境で作業してないのけ?
0237nobodyさん2006/03/02(木) 15:54:52ID:wuWQEqGX
助けてください。お手上げなんです。

hatena というテーブルに word というカラムがあります。このカラムには hatena goog good のように単語が半角スペースにて区切られ格納さています。

例えば hatena という単語と完全一致する単語があるレコードすべてを表示するにはどうしたらいいのでしょうか?

この場合、wordというカラムに hatena だけが入っているレコードはもとより hatena www yahoo のように他の単語もはいっているレコードも表示しなければなりません。

どうぞよろしくお願いします。
0238nobodyさん2006/03/02(木) 15:58:13ID:???
板違いじゃね?
0239nobodyさん2006/03/02(木) 15:59:11ID:???
DB板もエスパーいないよ
0240nobodyさん2006/03/02(木) 16:00:45ID:wuWQEqGX
PHPのプログラムがほしいのですが。
0241nobodyさん2006/03/02(木) 16:09:09ID:???
>>240
どこがどうお手上げなんだか示せ。
0242nobodyさん2006/03/02(木) 16:11:25ID:wuWQEqGX
まったく分からないんです。

われながら考えたのですが、preg_match()でなんとかとはいきませんでした。
0243nobodyさん2006/03/02(木) 16:11:37ID:???
>>237
SQLの範疇だと思うんだが?
普通にSELECT 〜 WHERE word = 'hatena'
0244nobodyさん2006/03/02(木) 16:14:27ID:wuWQEqGX
それだと hatena だけが入っているレコードは取得できるのですが、 hatena 2ch のように他の単語が入ってしまうと取得できないんです。
0245nobodyさん2006/03/02(木) 16:16:35ID:???
>>232
>>236が言うように、マニュアルですぐに分かりそうなもんだが。
mysql_error -- 直近に実行されたMySQLコールのエラーメッセージを返す
mysql_errno -- 直近のMySQL処理からエラーメッセージのエラー番号を返す
0246nobodyさん2006/03/02(木) 16:18:56ID:???
>>244
SELECT 〜 WHERE LIKE 'Q%'
02472462006/03/02(木) 16:19:35ID:???
>>244
すまん、暴発した。
SELECT 〜 WHERE LIKE 'Q%'
0248nobodyさん2006/03/02(木) 16:20:26ID:wuWQEqGX
>>246
それだと haten sql でもヒットしてしまいませんか?
02492462006/03/02(木) 16:21:15ID:???
何で連続で暴発する…。LIKE使ってみ。
SELECT 〜 WHERE word LIKE '%hatena%
0250nobodyさん2006/03/02(木) 16:22:36ID:wuWQEqGX
なるほど、ありがとうございます。

ところで爆発って?
0251nobodyさん2006/03/02(木) 16:26:16ID:???
>>248
あ、単語のみか。不恰好だが、
SELECT 〜 WHERE word = 'hatena'
OR word LIKE 'hatena %' OR word LIKE '% hatena %' OR word LIKE '% hatena'

>>250 いや、書き込みボタン押してないのに、何故か書き込まれたので。
0252852006/03/02(木) 16:27:29ID:tZ9efk0A
>>85で質問をした者です。

ファイルを連番で1.4メガバイトずつに分割したいのですが、
やり方がわかりません。
fopen、fread、fwriteを使うという事を以前教えてもらい、googleで検索しましたが、よく分かりません。
どのように記述すればよいか教えてください。
例えば、hoge.swf(3MB)を、hoge1.swf(1.4MB),hoge2.swf(1.4MB),hoge3.swf(200KB)に分割するような感じです。
0253nobodyさん2006/03/02(木) 16:28:55ID:???
>>237
スプレッドシートではなく、DBMSを使ってるらしいことは判ったが、
>hatena という単語と完全一致する単語があるレコードすべてを表示する
条件にマッチするものを取得→表示で問題があるのか?
それとも表示の条件と取得の条件が異なるのかい
取得に関して話が出てきてないように思えるが、
そうなら何のために取得が必要なのか説明もしてくれ。
0254nobodyさん2006/03/02(木) 16:38:38ID:???
>>252
hoge.swfをfopen(rb)、hoge1.swfをfopen(wb)
freadでhoge.swfから固定バイト読み込みhoge1.swfに書き込み
(読み込みは小分けにするのが普通だから何度か繰り返す。1MBぐらないなら一気にやってもいいも)
最後にhoge1.swfをfclose。
hoge.swfのEOFに達してなければ新しくhoge2.swfをfopen、hoge1.swfと同様に処理。
全ての最後にhoge.swfをfclose。
0255nobodyさん2006/03/02(木) 16:54:36ID:???
>>230
それホントに削除されてるの?空文字列が格納されてるわけじゃなくて?
0256nobodyさん2006/03/02(木) 16:57:22ID:???
>>229
requireはいちいちディスクアクセス&ソースのコンパイルが入るので
そんな真似すると遅い&サーバー負荷になるよ。
せっかくのPHPのキャッシュ機能も宝の持ち腐れ。

そもそも一瞥できないほど長いループブロック書いてる時点でダメダメって気がするけど。
0257nobodyさん2006/03/02(木) 17:03:02ID:???
>>252
分割はそのうち出来るだろうから他の識者に任せるとして、
それよりも、分割してダウンロードさせたファイルを端末サイドで
結合させるロジックに非常に興味があるな。
しかもauだそうで…
まさか、公式BREWアプリでやろうってか?
BREWの通信制限3Mの壁とか…
なぞは深まる・・・
0258nobodyさん2006/03/02(木) 17:03:24ID:???
>>237
select 〜 where word like '% $w %' or word like '$w %' or word like '% $w'
って空白込みでlikeを使う手じゃないの?
wordカラムのデータを '単語 単語 単語' にしないで ' 単語 単語 単語 ' って先頭と末尾にも空白入れとけば
select where word like '% $w %'
で一発だけど、そんな先のことを見据えた設計はしてないんでしょう。

いずれにせよPHPは「全く」関係ない。
■ このスレッドは過去ログ倉庫に格納されています