【PHP】下らねぇ質問はここに書き込みやがれ 34
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/12/08(金) 04:22:54ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 33
http://pc8.2ch.net/test/read.cgi/php/1164209222/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0892891
2006/12/19(火) 09:12:11ID:???一覧表示→詳細表示→何かしらのアクション(使うとしたらここですね)
0893nobodyさん
2006/12/19(火) 09:18:46ID:???何をしたいのか今一つ判らんのだが
会員番号をログインIDとかに使っていなければ
まんま引数指定で良いんじゃない?
セッションとか言ってるのが引っかかるが…
0894nobodyさん
2006/12/19(火) 09:21:58ID:???つまり、会員番号=IDってこと?
番号/ID
0001/test
0002/guest
0003/hogehoge
0004/php
0005/cgi
こんな感じにIDごとに番号振り分けたらいいんじゃまいか?
0895891
2006/12/19(火) 09:32:33ID:???要は会員サイト内で相手の会員IDを分からなくしたいんですよ。
検索かけて会員リストがずらっと出て、その会員の詳細をみる時に
パラメーターで会員番号渡したら簡単なんですが、隠蔽するにはどうしたらいいのかなと・・・。
>894
そういう風にはしてるんですが、詳細見るときに会員番号をパラメーターで渡したくないんです。
0896nobodyさん
2006/12/19(火) 09:35:59ID:???これを
http://example.com/
これでできるようにってこと?
だったらセッション
0897891
2006/12/19(火) 10:06:00ID:???うーむ。それは分かるんですが・・・。
<a href="member.php?list=0">亀田</a>
<a href="member.php?list=1">やくみつる</a>
<a href="member.php?list=2">ガッツ</a>
と、ページに会員の詳細表示のリンクをアクセス順に
ソートして並べるとします。
上の様にリンクには連番を振ってパラメータで渡す様にしておきます。
それで、
$listNum = $_GET['list'];
SELECT * user ORDER BY access_time DESC LIMIT $listNum,1
(エスケープは今は無視)
とすれば、会員番号をパラメーターで渡さなくても
リストから詳細表示できます。
ここまではいいとして・・・
上の例で言えばアクセスでソートしてるんで会員リストをみている間に、
誰かがアクセスをしたらソート順が変わってしまい
正しく表示されない事が発生するかと途方にくれてまして・・・orz
0898nobodyさん
2006/12/19(火) 10:23:00ID:???0がアクセス多い、10がアクセス少ないってこと?
で、アクセス数で順位が入れ替わるから、参照ページが変わるってことでおkなのかな?
元々登録順にでも番号割り当てといて
0/abc
1/hogehoge
2/papa
3/awawa
で、順位に並べてみるのは?
高↑ <a href="member.php?list=2">亀田</a>
<a href="member.php?list=0">やくみつる</a>
<a href="member.php?list=1">ガッツ</a>
低↓ <a href="member.php?list=3">アントニオ</a>
0899nobodyさん
2006/12/19(火) 10:32:47ID:n9T52ppYimplode("",$hoge)でも実現可能なのですが
マニュアルには「好ましい使用法ではありません。」と書かれています。
implodeを使わずにこれを実現するためにはどうすればいいでしょうか?
0900891
2006/12/19(火) 10:35:32ID:???アクセスっていうのは、最終アクセス時間を降順でソートしてます。
まぁ、アクセス回数でもロジック的には同じ様なもんですね。
だもんで、
<a href="member.php?list=0">亀田</a>
<a href="member.php?list=1">やくみつる</a>
<a href="member.php?list=2">ガッツ</a>
を見てる間にやくみつるがアクセスしたとしたら、
<a href="member.php?list=0">やくみつる</a>
<a href="member.php?list=1">亀田</a>
<a href="member.php?list=2">ガッツ</a>
こうなってしまう可能性があります・・・。
今はおっしゃる様に、登録降順でソートしてるんですが
見てる間に誰かが登録したらこれも変わりますよね。
まーそんな激しく登録はないはずなんで大丈夫かと思うのですが・・・。
たまにそーなった時はご愛嬌ってことでいいのかなw
0902891
2006/12/19(火) 10:41:13ID:???$str = $hoge['0'].$hoge['1'];
普通に文字連結だとダメなのかな?
0903891
2006/12/19(火) 10:44:33ID:???寝不足でバグ連発中・・・orz
0904nobodyさん
2006/12/19(火) 12:11:03ID:???$array = ("文字A","文字B","文字C","文字D","文字E");
foreach ($array as $value){
$str .= $value;
}
echo $str;
こういうこと?
0905nobodyさん
2006/12/19(火) 12:41:15ID:n9T52ppY($array as $key => $value)で
0906nobodyさん
2006/12/19(火) 13:04:40ID:???0908nobodyさん
2006/12/19(火) 13:57:58ID:???0909nobodyさん
2006/12/19(火) 14:06:07ID:0YQ9Kyi3Bページへpostして表示するコードを書いたのですが
これをセッションで管理しようと思っています。
セッションに関する記述はbページに
session_start();$_session['aaa]=$_post['aaa'];echo $_session['aaa'];
と入力したのですが、もともとpostで送信しているのでセキュリティが甘いと思っています。
Aページ→Bページの間をセッションで受け渡すにはどうしたらよろしいのでしょうか?
0910nobodyさん
2006/12/19(火) 14:10:56ID:???SSLにでもするかとかしか・・
0911nobodyさん
2006/12/19(火) 14:22:47ID:???何を意味不明なこと言ってんだお前は。
ユーザーからのinputをセッションで管理するにしても、
必ず一度はPOSTしてもらわなきゃ受け取れないだろうが。
>>910
>>909の問題(POSTじゃなくsessionで値を渡したい)については
SSLとか一切関係ないし。
0912nobodyさん
2006/12/19(火) 14:27:23ID:???いやいやそれはわかってはいるんだが
セキュリティが甘いとか言ってたからせめて通信でもセキュリティ高めたほうがと思っただけだ。
なんかおかしいこと言ってるなら謝るが・・。
0913nobodyさん
2006/12/19(火) 14:56:05ID:???0914nobodyさん
2006/12/19(火) 16:00:04ID:???0915nobodyさん
2006/12/19(火) 17:00:40ID:jG1wL3dBどのように書けばいいのでしょうか?
$a = "";
$a;
0917nobodyさん
2006/12/19(火) 17:07:44ID:jG1wL3dBこんな関数があったのですね。
どうもありがとうございます。
0918nobodyさん
2006/12/19(火) 17:51:13ID:Bk1c9Up1global $sort_tgt;
if($a[$sort_tgt] < $b[$sort_tgt]){
return -1; }
else if($a[$sort_tgt] > $b[$sort_tgt]){
return 1; }
else{
return 0;}
}
usort($dispdata, "sort");
id,val,str
-----------------
0,5,あ
1,2,い
2,4,あ
3,3,あ
4,1,い
という感じのシンプルな二次元配列用のソート関数をサンプルを参考に使っているのですが
ソート対象の値が同一のものであった場合(今回の場合はstr)、さらにid順でソートをかけたいのですが
どなたか、良い解決法をご教示願えないでしょうか・・・。
よろしくお願いいたします。
0920nobodyさん
2006/12/19(火) 18:23:26ID:EZ7cfRuwデータ型がtextの「introduction」というフィールドの値が変更されません。
日本語や半角英語を入力したものをPOSTで受け取ったものでは変更されませんでしたが
半角数字のみを入力してPOSTで受け取ったものだと変更されました。
また、sql文のintroduction = $textの部分をintroduction = 'よろしく'などとすると変更することが出来ました。
原因がよく分かりません。よろしくお願いします。
<?php
$dbHandle = mysql_connect("localhost","root","tengonran");
if($dbHandle == False){
print("can not connect db\n");
exit;
}
$db = "sns";
$text = $HTTP_POST_VARS["introduction"];
$uid = $myAuth->getAuthData("uid");
$sql = "UPDATE usr SET introduction = $text WHERE uid = $uid";
$rs = mysql_db_query($db,$sql);
mysql_close($dbHandle);
print("登録情報を変更しました");
?>
0921nobodyさん
2006/12/19(火) 18:27:19ID:???0922920
2006/12/19(火) 18:45:41ID:???ありがとうございます。
変更することが出来ました。
文字列の入った変数を'で括るとおかしいのかと
思ってましたがそれでよかったんですね。
0924nobodyさん
2006/12/19(火) 20:04:47ID:4CUCrx49$count = eregi("http?", $message);
print $count
としても、1しか帰ってこない・・・
PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace - SAK Streets
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm
こちらには、マッチ数と書いてあるのですが・・・
0925nobodyさん
2006/12/19(火) 20:15:03ID:???そのサイトの書き間違いでしょ。
公式のマニュアルによると
ttp://www.php.net/manual/ja/function.ereg.php
> int ereg ( string pattern, string string [, array ®s] )
> string の中で pattern がマッチした場合にはマッチした文字列の長さを返し、
> マッチしなかった場合 またはエラーとなった場合は FALSE を返します。
> オプションのパラメータ regs が渡されなかったり マッチした文字列の長さが
> 0 だったりした場合は、この関数は 1 を返します。
と、1もしくは、第3引数を渡した場合に限りマッチした文字列の長さを返すことになっている。
PHPの説明って市販の書籍も含めて「誤り」または「情報が古い」ことが多いので
疑問に思ったら公式マニュアルを参照した方がいい。
あと基本的にはereg()に同じパターンがいくつ含まれているかという検索機能は無いので、
数をカウントすると必ず1個にしかならない。
「httpがいくつ含まれているか」を調べたいならpreg_match_all()を使う。
ttp://www.php.net/manual/ja/function.preg-match-all.php
0926nobodyさん
2006/12/19(火) 20:34:31ID:4CUCrx49書き間違えかよ!!!!('A`)
メチャメチャサンクス。
preg_match_all やってみます。
公式見た方がいいのな・・・
0929nobodyさん
2006/12/19(火) 21:25:12ID:???0930nobodyさん
2006/12/19(火) 21:47:50ID:???によるとWEBページを表示する方法として7種類サンプルがありますが、
みなさんはどれを使いますか?それとそれぞれのメリット・デメリットがあれば教えて下さい
0931nobodyさん
2006/12/19(火) 22:17:39ID:???1.PHPスクリプトとして評価される→ファイル読み込みも可能だが普通は他の方法で読み込む
2.そのまま出力したい時
3.一度に全て変数に読み込む必要がない時
4.1行ずつ配列に読み込みたい時
5.変数に読み込みたい時
6.ソケットを開いて(略)
7.6とやってる事は同じ。fsockopen使うのが面倒で楽したい時
0932nobodyさん
2006/12/19(火) 22:23:14ID:???「取得する方法」でなくて「表示する方法」?
無加工で単に表示するだけならそのサイトに直接飛ばすのが早いんじゃ…
という突っ込みはとりあえず置いとくとして、
とにかく表示(出力)がしたいだけならreadfile()。そのための関数だし。
無加工で取得したいならfile_get_contents()。
行単位に何かしら加工したいならfile()。
加工するけど行単位でないならやっぱりfile_get_contents()。
POST処理とかタイムアウト処理とかが必要ならHTTP_Request。
PEARを使えないケース(って滅多に無いが)ならfsockopen()。
ってとこ。
includeやrequireはPHPとして文法パース&実行を行うんで
そういうのが必要な特殊な用途じゃない限り使わない。
また、そんなのが必要なケースに自分はお目にかかったことがない。
fopenは対象ページがよっぽどでかいとかいうわけじゃなきゃ必要を感じない。
WEBページでなくアーカイブファイルとか動画ファイルとかのダウンロードなら
メモリ確保がシビアになるケースがあるのでこれを使う。
0933nobodyさん
2006/12/20(水) 00:09:03ID:???うん。
0934nobodyさん
2006/12/20(水) 03:13:58ID:Cie7izusなんとなく重要な関数(?)っぽいので、
どういう時に使うのかを知りたいのですが、
マニュアルに書いてあるなら誘導していただけませんでしょうか?
ちなみにどういうものなのかも教えていただければ嬉しいです。
0935nobodyさん
2006/12/20(水) 03:20:38ID:???関数じゃなくて「サイト内全検索(all php.net sites)」で
ttp://www.php.net/manual/ja/language.exceptions.php
0936nobodyさん
2006/12/20(水) 03:27:32ID:s+1rE1pcクライアントアプリケーションがCGI(PHP)に対して
octet-streamのデータをPOSTした場合、
PHPではどうやって値を取得すればよいのでしょうか?
URLエンコードされているデータの場合だと_POSTで
nameを指定すれば取得できることは知っているのですが
バイナリだとどうすればよいのでしょうか。
よろしくおながいします
0937nobodyさん
2006/12/20(水) 04:28:33ID:???nullを許可しているlongtextスペースに UPDATEを使って70000バイトほどの文字列を
入力したいのですがエラーになります。
10000以下位では入力出来ました。
何が原因でしょう?
ヒントください。
0939nobodyさん
2006/12/20(水) 08:33:35ID:???$data = '';
$fp = fopen('php://input', 'rb');
while (!feof($fp)) {
$data .= fread($fp, 1024);
}
fclose($fp);
0941936
2006/12/20(水) 11:04:10ID:s+1rE1pcまさにそれです!!
つたない説明文を理解していただき
最大級に感謝します
0942nobodyさん
2006/12/20(水) 15:00:15ID:???2年程ブランクがあるので、全てのアプリがメジャーバージョンUPされてて(泣
昔はPear::DB使っていたのですが、
PDO_MYSQLが使えるものかと思い、
マニュアルを確認すると、MySQL4.Xと書いてあります。
PDO_MYSQLはMySQL5でも使えますでしょうか?
0943nobodyさん
2006/12/20(水) 15:03:20ID:???0944nobodyさん
2006/12/20(水) 15:31:53ID:???それは質問に対する回答になってないよ
0945942
2006/12/20(水) 15:44:32ID:???PHP5.2の場合、PDO_MYSQLをインストールするのは
configureのオプションに以下を追加するだけでいいのかにも躓いてます…。
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql
0946nobodyさん
2006/12/20(水) 15:46:00ID:???そんなことってできますでしょうか?
どういう風にかけばいいのかわからなくて・・・
function A($a, $b){
echo $a+$b;
}
function B($a, $b, $c){
echo $a+$b+$c;
}
こんな感じのを1つにできたらなぁと。
0948942
2006/12/20(水) 15:54:52ID:???func_get_args() func_num_args() func_get_arg()
俺だったら、連想配列で渡しちゃいます。
0950nobodyさん
2006/12/20(水) 16:01:23ID:ar7H9Wcqネイティブなライブラリを呼び出す仕組みってあるんでしょうか?
Javaのネイティブメソッド呼び出しのような規約が
決められているのでしょうか?
0951nobodyさん
2006/12/20(水) 16:02:34ID:???〜〜
20.<input type="text" name="hoge[]">
このクエリを1個ずつデータベースに入れる際、空白(何もかかれていない)の場合、その変数を消したいのですがどのような方法が良いでしょうか?
こんなのしか思いつきません…
foreach($hoge as $h_arr) {
if(empty$h_arr)) {
unset($h_arr);
}
0952nobodyさん
2006/12/20(水) 16:08:27ID:???0954nobodyさん
2006/12/20(水) 16:15:01ID:???0955nobodyさん
2006/12/20(水) 17:37:39ID:Vi7URSuaの形から
1ヵ月後は 「YYYY-MM-DDである」
5ヵ月後は 「YYYY-MM-DDである」
1年後は 「YYYY-MM-DDである」…
と出したいのですが何か良い方法はありますか?
分解して精製するしかないのでしょうか?
0957nobodyさん
2006/12/20(水) 18:01:10ID:???$d = getdate(strtotime($date));
mktime($d["hours"],$d["minutes"],$d["seconds"],$d["mon"] + 1,$d["mday"],$d["year"]);
mktime($d["hours"],$d["minutes"],$d["seconds"],$d["mon"] + 5,$d["mday"],$d["year"]);
mktime($d["hours"],$d["minutes"],$d["seconds"],$d["mon"] + 1,$d["mday"],$d["year"] + 1);
0958nobodyさん
2006/12/20(水) 18:29:56ID:0HPzhBAY0959nobodyさん
2006/12/20(水) 18:37:29ID:Vi7URSuaありがとうございます。
[strtotime],[getdate]初めてしりました。勉強になります。
date('Y-m-d'strtotime('+1 month', strttime($date)));
date('Y-m-d'strtotime('+1 year', strttime($date)));
でできました!
ただ、来週とかができないのです…
date('Y-m-d'strtotime('next week', strttime($date)));
今一度、お力お貸しくださいませ。
0960959
2006/12/20(水) 18:38:32ID:Vi7URSua来週末、今月末等ができません。
宜しくお願い致します。
0961nobodyさん
2006/12/20(水) 18:47:44ID:???ttp://jp2.php.net/manual/ja/function.strtotime.php
0962nobodyさん
2006/12/20(水) 18:52:36ID:???ってか日時関数あまり使わなかったから知る機会なかっただけかな?
>>960
<?php
echo date('Y-m-d',strtotime("now")), "<br />\n";
echo date('Y-m-d',strtotime("10 September 2000")), "<br />\n";
echo date('Y-m-d',strtotime("+1 day")), "<br />\n";
echo date('Y-m-d',strtotime("+1 week")), "<br />\n";
echo date('Y-m-d',strtotime("+1 week 2 days 4 hours 2 seconds")), "<br />\n";
echo date('Y-m-d',strtotime("next Thursday")), "<br />\n";
echo date('Y-m-d',strtotime("last Monday")), "<br />\n";
?>
0963nobodyさん
2006/12/20(水) 18:53:06ID:???$dbh->prepare($sql);
このprepareメソッドでフリーズしてるぽいとこまでは分かったのですが
(前後でvar_dump("hoge")を試したところ、前は成功、後は失敗(ずっと応答待ち))
対処の仕方がわかりません・・・せめてどういうエラーか分かればいいのですが方法あるんでしょうか?
よろしくお願いします
0966963
2006/12/20(水) 19:08:08ID:XG/2ezlL>>例外処理
try~catchで囲んでみたんですが拾えませんでした。
原因が違うところにあるとしても、その前後では動いてるの確認(var_dump)してるので
エラーだとしたら何かしら拾えると考えたのですが・・・
応答待ちになってると考えて探った方がいいのでしょうか
0967959
2006/12/20(水) 19:18:57ID:Vi7URSuaせっくっす
0969nobodyさん
2006/12/20(水) 20:03:17ID:???来週末=来週の土曜日でいいのか?
だったら
echo date('Y-m-d-H:i:s',strtotime("+1 week Saturday")), "<br />\n";
0971nobodyさん
2006/12/20(水) 20:30:59ID:t+vbPSXB機種依存文字である�@�A�B�Cなどを画像にすることができません
いろいろなフォントで試してもだめでした。
imagettftextで機種依存文字を画像にするのは無理なのでしょうか
phpのバージョンは5.1です
0972nobodyさん
2006/12/20(水) 21:04:46ID:???$d = getdate(strtotime($date));
mktime(0,0,0,$d["mon"] + 1,0,$d["year"]);
0973nobodyさん
2006/12/20(水) 21:39:34ID:???0975超初心者
2006/12/20(水) 22:15:46ID:???何処にインストールされたのか分からなくなってしまいました。orz
(/usr/local/lib/php.iniも見当たらない)
ファイルを検索する方法を教えてもらえないでしょうか。
レベル低すぎる質問でもうしわけないです。
0976超初心者
2006/12/20(水) 22:28:01ID:???phpinfoで確認できることを思い出しました。
スレ汚してスンマソン。
0977nobodyさん
2006/12/20(水) 23:21:20ID:???0978nobodyさん
2006/12/21(木) 02:29:17ID:???0979nobodyさん
2006/12/21(木) 04:28:53ID:???指定したURLから<object>〜</object>や<title>〜</title>などのタグを指定して抽出するものはありませんか?。
参考になるサイトだけでもいいので知っている方教えてください。
0981nobodyさん
2006/12/21(木) 06:01:18ID:???「\n」と直接表示されてしまいます。
ソース内で改行させたいのですが、どのように記述すれば良いのでしょうか?
str_replace("\n","\r\n",$str);
で置き換えようと思ったのですが、置き換えることができませんでした。
0982981
2006/12/21(木) 06:03:58ID:???str_replace("\\n","\r\n",$str);
で解決することができました。
0983942
2006/12/21(木) 11:18:27ID:???try-catchなら、下の設定は必要かも。
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
0984nobodyさん
2006/12/21(木) 12:17:01ID:QeRiyNxN割り振るCGIやスクリプトってあるんでしょうか?
サーバが対応してくれないので困ってます…。
0985nobodyさん
2006/12/21(木) 12:19:19ID:???0986nobodyさん
2006/12/21(木) 12:19:45ID:???0987nobodyさん
2006/12/21(木) 12:41:12ID:KBdj5Zxx表示したいと考えております。
以下の条件文の*******をどう表記すればよいでしょうか?
お願い致します。
if(ereg("*******", $var)){
$errm .= "<span class=mj>E-mail入力値が不正です。</span><BR>\n";
}
0988nobodyさん
2006/12/21(木) 12:47:29ID:???ttp://phpspot.net/php/pg%82o%82g%82o%81%95%90%B3%8BK%95%5C%8C%BB.html
0989nobodyさん
2006/12/21(木) 13:07:55ID:???上記サイトで気になったのが、メールアドレスチェックの際
半角英数字と.と-のみのチェックしかしていませんでした。
もしメールアドレスに!や#などが使用されていた場合このスクリプト
だと誤ったメールアドレスとして認識されてしまいます。
メールアドレスのチェックは一般的に半角英数字と.と-のみで
良いのでしょうか?
0990nobodyさん
2006/12/21(木) 13:11:56ID:???if(!preg_match('/^[a-zA-Z0-9_\-]+$/', $_var)){
}
メールアドレスに使えるのは
A〜Zと-_.と数値だけ
0991nobodyさん
2006/12/21(木) 13:13:12ID:???もしそれらの文字がでてくるならその時にスクリプトも変更すればよいと思う
レス数が950を超えています。1000を超えると書き込みができなくなります。