【PHP】下らねぇ質問はここに書き込みやがれ 25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/23(日) 20:00:03ID:???ここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0577nobodyさん
2006/08/01(火) 10:46:04ID:???危険度は大差ないというか「どっちも危険」。
多分、聞きかじった内容を思いっきり勘違いしてる。
実際はクオートは関係なく、それ以外にもっと重要な要素が抜け落ちてる。
>>575
それはPHPのクオートの話であってMySQLのクオートとは別の話。
0578nobodyさん
2006/08/01(火) 10:48:12ID:rUBuvQ+2function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes ($value);
}
// 数値あるいは数値形式の文字列以外をクオートする
if (! is_numeric($value)) {
$value = "'" . mysql_real_escape_string ($value) . "'";
}
return $value;
}
これでいいじゃん?
0579nobodyさん
2006/08/01(火) 10:49:19ID:rUBuvQ+2意見ありがとうございました。
貝から操作してCREATE TABLEします・・・
0580nobodyさん
2006/08/01(火) 10:57:59ID:???magic_quote設定なんていちいち見ないなー。
汎用のライブラリ作るんならそこまでやってもいいと思うけど、普通の開発じゃ無駄じゃない?
素直に
"select * from table where col = '" . mysql_escape_string($value) . "'";
でいいじゃん。
0584nobodyさん
2006/08/01(火) 11:09:14ID:???0585nobodyさん
2006/08/01(火) 11:15:42ID:???みんなPDOは使ってないの?
0587nobodyさん
2006/08/01(火) 12:38:32ID:???0588nobodyさん
2006/08/01(火) 12:56:22ID:i9MoMR6eが存在するかを調べる関数はありますか?
0589nobodyさん
2006/08/01(火) 12:59:37ID:???0590nobodyさん
2006/08/01(火) 13:12:15ID:???0596nobodyさん
2006/08/01(火) 15:52:25ID:???よくある買い物籠のイメージは、商品の識別番号と個数を籠(セッション)に保持しておくと思うんですが、
実データを入力させてそのままセッションに入れて持ち歩くような動作を考えてます
0597nobode
2006/08/01(火) 16:19:50ID:???ハッシュファイルベースのセッション管理なら
そのセッションファイルを保存しているディスク量がセッションの限界じゃないかな?
あとセッション変数にドンドン代入していくとioの時に一時的にRAM喰うからRAMは多めにつんどいたらいいと思うよ。
スワップすると重くなるよ。レンタルとかだったら基本的に限界は割り当てられたPHPのメモリ使用量じゃないかな。
ハンドラ使ってDBとかに保存するのも基本的にWEB層の制限を受けると思うよ。
ケースバイケースだけど。
間違ってたらごめんまだPHP初めて3日目だから...
0598nobodyさん
2006/08/01(火) 17:38:12ID:???php.iniでの設定値次第だと思うけど、
PHPの配列等で確保できるメモリには上限がある(デフォルトで8MBだっけ?)
から、それを超えるような分量になってくるとメモリ確保エラーを起こすと思う。
0600nobodyさん
2006/08/01(火) 20:18:01ID:CFVLtjTH$str='1234';
$str='12345';
という変数があったとして、
これらの長さを一意にしたいのです。
(指定した文字列になるまで指定した文字で埋めたい)
strlenで長さ読んで、足りない分の文字を足せばいいのはわかっているのですが、もし関数になっていたら知りたいな、と思ってカキコしました。
そんな楽する関数はありますか? or 自分で関数作っちゃった方が良いですか?
0601nobodyさん
2006/08/01(火) 20:18:46ID:???× (指定した文字列になるまで指定した文字で埋めたい)
○ (指定した文字数になるまで指定した文字で埋めたい)
0604nobodyさん
2006/08/01(火) 20:35:20ID:???sprintfで対処できました。
http://jp.php.net/sprintf
ありがとうございました。
0605nobodyさん
2006/08/01(火) 20:39:21ID:???こっちのほうが指定が簡単ですね。
処理速度計算して早いほう使ってみようと思います。
ありがとうございました。
0607nobodyさん
2006/08/01(火) 22:29:09ID:???0608nobodyさん
2006/08/02(水) 00:01:08ID:???例えとして「sample.txt」というファイルには下記のようなテキストが入っています。
2ch;giko;nanasi;\n
test;test;test;\n
これを
$list=$file('../data/sample.txt');
foreach($list as $line){
$array_list_tmp[]=$line;
$n++;
}
で、1行ずつ$array_tmp[]にいれまして
$findme=';';
for($x=$begin;$x<=$end-($end-$n);$x++){
$mystring=$array_list_tmp[$x];
for($y=0;$y<=2;$y++){
$setcount=strpos($mystring,$findme);
$array_list[$x][$y]=substr($mystring,0,$setcount-1);
$mystring=substr($mystring,$setcount);
}
}
で';'が最初に見つかる桁までの値を取得して、';'は必要ないので値-1で必要な文字列だけを取得したいんですが。
変数の中身が1回目のループ分しか取得できず、あとは''になってます。
馬鹿にもわかりやすく易しい文字列処理の方法がありましたご教授して欲しいであります。
0609nobodyさん
2006/08/02(水) 00:06:55ID:???$fdata = str_replace("\n", '', file_get_contents('../data/sample.txt'));
$mystrings = explode(';', $fdata);
何がしたいのかは知らんが。
0611nobodyさん
2006/08/02(水) 00:46:27ID:???0614nobodyさん
2006/08/02(水) 01:11:39ID:???どうもありがとうございます。
explodeがあったんですね、しかし今は頭煮立ってましてダメぽです・・・。
まだ初めて二日目なのでコツコツと試行錯誤してみます。
ソースの意味が良くわからないのに助言求めてすいません・・・。
とりあえず頭冷やしてから助言頂いたやり方でがんばってみます。
0615nobodyさん
2006/08/02(水) 01:17:44ID:???Cの場合、他の一般的処理がめっぽう速いから、printf系みたいに
パラメータの文字列解析と可変引数を含む処理は相対的に遅くなるんだよね。
PHPの場合、変数の処理自体がその種の解析とメモリアロケーションを含むので
全体にCほど速くないからprintf系もさほど問題にならない。
実際、sprintfとstr_padだと1.5倍ほどsprintfの方が遅い程度。(Cだと10倍くらい違うので大問題)
このくらいなら500万回ループとかでもない限り「使いやすい方を使う」で全然問題にならないと思う。
(1000回くらい使っても0.001秒ほどしか差が出ない)
それでもとにかく速い方がいい、というのであれば、str_padの方が速いよ。当然だと思うけど。
0616nobodyさん
2006/08/02(水) 01:19:51ID:???初めてまだ2日程度でいきなり他人に頼ろうと思ったこと自体が間違ってる。
もうちょっと自力で悩んでみ。
中学生がPHPを習得するスレ
http://pc8.2ch.net/test/read.cgi/php/1139746974/
とか
くだすれPHP(超初心者用)
http://pc8.2ch.net/test/read.cgi/php/1150088761/
に行くのもいいかもね。
0617nobodyさん
2006/08/02(水) 01:30:38ID:???むしろ、便利な関数に頼らず1度は文字列処理に頭を悩まし
アルゴリズムを色々考えた方が今のうちは勉強になるぞ。がんばれ。
0618nobodyさん
2006/08/02(水) 01:32:25ID:???俺が学生の頃なんかプログラミングなんか全然やらなかったな・・・
0619nobodyさん
2006/08/02(水) 01:35:26ID:???「俺が学生の頃」って一体何十年前の話さ。
0620nobodyさん
2006/08/02(水) 01:47:35ID:???あの先生は元気かな・・・綺麗な人だった・・・
言っておくがまだまだ20代だぜ!
0621nobodyさん
2006/08/02(水) 05:28:46ID:FnbeRIVd動作確認として
<? phpinfo(); ?>
と書かれていて実行しても動作しませんでした。
あれこれ3日間悩んだあげく、別の書籍で、
<?php phpinfo(); ?>
とあり、問題なく動作させることができました。
「<?php」が「<?」のみであった記述は
バージョン違いで動作しなかったのか、書籍の間違いであったのか
未だにわかりません…どちらなのでしょうか?
0622nobodyさん
2006/08/02(水) 05:58:04ID:???php.iniまたは.htaccessでshort_open_tagをONにしないと<? ?>形式は使えない。
標準ではこれはONになってるはず。(php.ini-distを使う場合)
アーカイブに同梱されているphp.ini-recommendedではXML併用対策としてOFFが標準になってる。
その書籍ではどのようにインストールするよう指示してる?
0623nobodyさん
2006/08/02(水) 07:14:51ID:1IWPQLfyいくつか調べて、「mysql_query("SET NAMES ujis");」ってのを用いれば直るとありましたが、
改善しません。
PHPは4.4.2、MySQLは4.1.19です。
0624nobodyさん
2006/08/02(水) 07:25:17ID:???PHPでinsert文を組み立てるとき、データの文字コードは何にしてるの?
MySQLへの指定はそれに合わせないとダメだろう。闇雲にujisにしてもダメ。
まず、php.iniとmy.cnfでそれぞれ文字コードが何に設定されてるかを確認して
それを揃えるのが先決だと思う。
これが揃ってさえいればわざわざSET NAMESなんて発行する必要はない。
レンタルとかで、MySQLの設定を変更できない場合以外はまず不要なはず。
0625623
2006/08/02(水) 08:29:31ID:???MySQLのデフォルト文字がujisで、
サーバ自体はレンタルという構成です。
なのでphp.iniがみれません。
INSERTする前の文字データはechoでみると文字化けしておらず、
INSERTしたデータをSELECTした結果を見ると文字化けしているのです。
UTF-8→EUC、SJIS→EUCとmb_convert_encodingでコード変換を試しましたが、
やっぱり文字化けが直りません。
0626nobodyさん
2006/08/02(水) 09:06:00ID:FnbeRIVdphp.iniでshort_open_tagは初期値のままOffになっていました。
書籍では部分に関する記述はなく、
Offのまま作業を行う流れであったため気づきませんでした…。
大変参考になりました。
0627(^ω^)
2006/08/02(水) 09:27:16ID:???php.iniの設定はphpinfo()を見ればわかる
それがダメなら一つずつini_get()すれば見れる
それよりも、まずどこで文字化けするか把握しないといけないから、PHPを通さずにSSHが使える鯖ならそこからMySQLにアクセスした方がいい。
それが無理ならローカルに同じ設定のPHPとMySQLを入れて実験。
鯖側がujisでPHPの文字コードもEUC-JPなら普通は何もしなくても通るはずだけど。
ujisよりeucjp-msを勧める。
0628nobodyさん
2006/08/02(水) 10:06:55ID:???0629nobodyさん
2006/08/02(水) 11:53:55ID:???実はDBにはちゃんとinsertできてるのに、表示のときにEUC-JPのまま表示しちゃって
PHPの設定と噛みあってなくて文字化けしてるとかいうオチじゃないだろうな。
selectしたデータをさらにEUC-JPからUTF-8やSJISに変換してから表示してみてはどうよ?
つか、まずはphpinfo()の確認が基本だけどな。
0630nobodyさん
2006/08/02(水) 11:55:28ID:???いや、short_open_tagのデフォルト値はOnなんだってば…
これがOffになってるのはチューニング済みのphp.ini-recommendedを使った場合のみだよ。
それがOffになってたんならお前のインストール方法が悪かっただけじゃないの?
0631nobodyさん
2006/08/02(水) 13:17:36ID:???windowsXP SP2にて
phpPHP 5.1.3
apache2.0
を導入し
// ループ1
while (1) {
// ループ2
while (1) {
$hoge = 1
if ($hoge) {
// ループ1からやり直し
}
}
}
このようなルーチンを書きたいのですが、この場合どのような関数を使用すれば良いのでしょうか?
PHPマニュアルを読んでbreak 1 や、continue 1 をしたのですが、思い通りに動いてくれません。
アドバイス頂ければ助かります。よろしくお願いします。
0635nobodyさん
2006/08/02(水) 14:40:37ID:???普通にbreakやcontinueでいいと思う。関数は要らない。
ひょっとしてbreak 1じゃなくbreak 2が希望の動きなんじゃない?
0636635
2006/08/02(水) 14:41:14ID:???0637nobodyさん
2006/08/02(水) 14:55:18ID:???しましたが、「あああ」というコメントでも弾かれます。
日本語が一切含まれない場合に弾くという処理をしたいのですが、どうすればよいでしょうか。
if (!preg_match("/^[あ-ン]+$/", $comment)) {
die('japanese only');
}
0640nobodyさん
2006/08/02(水) 15:09:01ID:???以下の文字でこのスレッドを検索しましたが出てきません
昔のスレッドでしょうか?
コメント、スパム、spam、preg、マルチバイト…
0644nobodyさん
2006/08/02(水) 15:49:44ID:???ID表示にしました。
>>643
あ、なるほど…
googleでも1時間程検索したのですが、全くヒットしないんです。
検索用語は、
PHP 日本語 コメント コメントスパム spam マルチバイト
検索用語だけでもいいので何かアドバイス頂けないでしょうか。
0645637
2006/08/02(水) 15:50:53ID:RhHoIqr9#2chブラウザ利用してるとデフォルトでなるからいつも忘れてしまう…
0647nobodyさん
2006/08/02(水) 16:09:46ID:???目に入ったのですが、どういうことかよくわからないです。
長さを求める関数なのは知っていますが、それでどのように日本語のみ、又は
アルファベットのみを判定するのかが想像もつかないです…
あー、今わかりました…
strlen と mb_strlenの長さが違えば、マルチバイトということですか。
ありがとうございました。
0648nobodyさん
2006/08/02(水) 16:12:50ID:???あれ、そうかと思ってやってみましたが、ダメでした…
どちらもdieします。
if (strlen($comment) == mb_strlen($comment)) {
die('japanese only');
}
0649nobodyさん
2006/08/02(水) 16:36:00ID:RhHoIqr9すみません。こちらのミスでできたようです。
$commentが何もない時に通っていました。 orz...
0650nobodyさん
2006/08/02(水) 16:38:12ID:???できればencodingを追加しておく方がよい。
0651nobodyさん
2006/08/02(水) 16:44:05ID:???と言いますと…
$comment = mb_convert_encoding($comment, '内部エンコーディング?'');
を直前に入れるという理解で良いでしょうか?
0652nobodyさん
2006/08/02(水) 16:46:00ID:???0653637
2006/08/02(水) 16:48:38ID:RhHoIqr9これか…
mb_strlen ( string str [, string encoding] )
デフォルトが内部エンコーディングだから…うーん、よくわからないですけど
とりあえずそのままでも動いているので良いかな…
0654nobodyさん
2006/08/02(水) 18:41:31ID:???なにかおかしいと思ってもう一度確認した。
やはりshort_open_tagはデフォルトでOffだった。
今の最新バージョンではデフォルトでshort_open_tagがOffになっている?
0655nobodyさん
2006/08/02(水) 18:49:43ID:???値を変更するには
メソッドを必ず用意しなければいけないのですか?
変数の代入みたいにできませんか?
0657nobodyさん
2006/08/02(水) 21:26:11ID:GYqJmd1rいまDBを使った投稿者に対し複数レスがつけられる掲示板を作っているんですが、投稿者用とレス用のテーブルを作ったんですが、どの様に表示すれば良いのかいまいち解りません。。
よろしくお願いします。。
0658nobodyさん
2006/08/02(水) 21:33:32ID:???0659nobodyさん
2006/08/02(水) 21:35:18ID:???表示ってそのまま親取ってきて、レス取って来ればいいのかと。
この場合JOINさせてもあんまり意味ないし。
0660nobodyさん
2006/08/02(水) 21:59:29ID:???どんなメソッドがあるか
まとめて調べる方法はありませんか?
0661nobodyさん
2006/08/02(水) 22:01:24ID:???スレとレスのテーブルは同じで出来るんじゃない?
全ての投稿にid付けて、例えばスレのIDが「2」なら、そのスレのレスのIDは「2-1」「2-2」「2-3」...とか。
そのレスのレスのIDは「2-2-1」「2-2-2」...
あとはSELECTのWHEREオプションでうだうだやって。。
0662nobodyさん
2006/08/02(水) 22:21:20ID:???そんなややこしい ID にすると SQL 一発で結果を得るのが難しくなるよ。
親記事の ID をそれぞれに持たせるだけで良いと思うよ。
親自体の親 ID は NULL で。
0663nobodyさん
2006/08/02(水) 23:33:49ID:???できるできないで言ったら同じテーブルでできると思うけど、
形式が違うor異なった拡張を考えているなら違うテーブル設計はアリだと思うな。
掲示板の表示はそもそもどういう風に表示したいのかが分からんので何とも。
投稿者表示が固定件数で、それに対してレスを全部表示、って形なら
$result1 = mysql_query("select * from 投稿者用テーブル order by 日付 limit 件数", $conn);
while($投稿者データ = mysql_fetch_assoc($result1)) {
投稿者データ表示($投稿者データ);
$result2 = mysql_query("select * from レス用テーブル where レス元 = '$投稿者データ[ID]' order by 日付", $conn);
while($レスデータ = mysql_fetch_assoc($result2)) {
レスデータ表示($レスデータ)
}
}
ってのを基本形にアレコレすればふつーにできると思う。
0665nobodyさん
2006/08/02(水) 23:42:01ID:???Complete Source Code PHP 5.1.4 (tar.gz)
と
Windows Binaries PHP 5.1.4 zip package
の両方ともを今ダウンロードしてきて確認したが、
どっちもphp.ini-dist(デフォルトのphp.ini)は short_open_tag = On になってたよ。
何か勘違いしてると思う。
0667657
2006/08/03(木) 00:45:35ID:???テーブルは一つで出来るんですね。
分けないといけないと思い込んでました。。
それでソースを書いていただいた>>663さんには大変申し訳ないのですが、テーブル一つでやりたいと思うんですが、やはり表示の仕方がいまいち解りません。。
>>661さんや>>662さんが教えていただいたやり方で考えているんですが、PEAR::Pagerと絡ませた場合どうすればいいのか。。
何度も何度も質問すみません。。
0668nobodyさん
2006/08/03(木) 00:55:55ID:???0669nobodyさん
2006/08/03(木) 01:27:26ID:???基本中の基本も理解してないうちからPEAR::Pagerを使うのはやめた方がいいと思う。
いつまでもアルゴリズムのなんたるかを理解できないまま進んでしまうぞ。
そういうのは、最低限当たり前のことができるようになってから挑戦しよう。
0670nobodyさん
2006/08/03(木) 01:53:06ID:???自分の能力を簡単に超えやすい
(手に負えなくなりやすい)
(メンテ大変)
0671nobodyさん
2006/08/03(木) 01:59:50ID:???複数階層のレスができるのか親子関係が1世代しかないスレッド式なのかで変わる。
たぶん後者の方が簡単。
ついでに。テーブル一つでやりたいってのはJOINが分からないとかのスキル不足から来るものだと思うけど、
(普通しないものを)無理矢理1テーブルにするってのは更に高いスキルを無駄に要求されると思うよ。
0672nobodyさん
2006/08/03(木) 02:06:24ID:???> ついでに。テーブル一つでやりたいってのはJOINが分からないとかのスキル不足から来るものだと思うけど、
そうか? 「記事」って単位で考えると、親も子も同じものだし、分ける方がおかしいと思うけど?
スレッド式だったらスレッドの階層毎に別テーブルにする? 親だけ分離?
0673671
2006/08/03(木) 02:31:31ID:???663の2テーブルのサンプルを見た後で1テーブルでしたいってのはそういうことかなと勝手に推測してね。
1テーブルに纏めると面倒ってのはスレッド式を想定したよ。例えばスレタイ。 PHP関係なくてすまそ。
0674nobodyさん
2006/08/03(木) 02:34:57ID:???記事IDとかをプライマリにして、親記事テーブル→子記事テーブル
ただ、高々ツリーのスレッドを生成するだけだから一つのテーブルにしてもテーブル分けても速度は全然
気にならないだろうな。
もしテーブルを一つにするなら親レコードなのか子レコードなのかを判断するフラグみたいなの持たせなきゃ
ダメだよな?
なんかそれは気持ち悪い
0675nobodyさん
2006/08/03(木) 02:35:24ID:CT8bx9Pd0676nobodyさん
2006/08/03(木) 02:49:12ID:???親記事1
├子記事1
│├孫記事1
│└孫記事2
└子記事2
親記事2
…
みたいな記事のツリー構造はどうするつもり?
親と子と孫で 3 テーブルか?
なんか皆想定している掲示板のスタイルが違うから話が噛み合っていない感じ。
■ このスレッドは過去ログ倉庫に格納されています