【PHP】下らねぇ質問はID出して書き込みやがれ 82
1 :
nobodyさん :
2009/03/09(月) 02:14:28 ID:HyrthkeE 質問者はまず
>>1 を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
次スレは
>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 81
http://pc11.2ch.net/test/read.cgi/php/1234958956/ ◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
中途半端にスレたててんじゃねえ! テンプレがたりねえだろksg
文句言う暇があるなら自分でやれよ 俺は携帯だからめんどい
5 :
nobodyさん :2009/03/09(月) 16:52:14 ID:An8QqtfK
rewriteの記述がおかしい件
7 :
nobodyさん :2009/03/09(月) 18:48:52 ID:An8QqtfK
ありがとうございます。どう書けばいいんですか?
9 :
nobodyさん :2009/03/09(月) 20:24:08 ID:An8QqtfK
>>8 (´・ω・`)
スラッシュがダメなんだよね。
オレ、正規表現すごく苦手なんだ。
エロい人、答え教えてー(>_<)
>>9 RewriteEngine On
RewriteRule ^url/(.*)$ sample.php?url=$1 [L]
11 :
nobodyさん :2009/03/09(月) 21:17:55 ID:l0zAqNTV
PHPで新しいページを開くことはできないんですか? おとなしくその処理だけjavascript使っといたほうがいいですか?
>>11 そういうのはクライアントサイドスクリプトの仕事
<a target="_blank"
>>13 補足しとくが、それはクライアントのほうな
だから?
16 :
nobodyさん :2009/03/09(月) 22:04:02 ID:ObAH+zkj
クラスの継承って、機能を追加したいとき親クラスとほとんど変わりなければ、 もう親クラスを書き換えてしまったほうが気持ち悪くないように思えるのですが、 親を書き換えて機能を追加すると面倒くさい作業になるという場合以外に、 プログラムを書く初期段階で敢えて継承を使うときって例えばどんなときありますか
17 :
nobodyさん :2009/03/09(月) 22:14:56 ID:4+GIMEEF
質問です。 PHPでHTMLページの解析をやりたいのですが、いろいろな方法があるようです。 今はどの方法がいちばんお薦めなのでしょうか? 個人的には、SimpleXMLのような使い方ができるとありがたいです。
>>17 DomDocument::loadHTML -> simplexml_import_dom
でSimpleXMLでHTMLも扱えるようになる
でも俺は Simple HTML DOM Parser の方が好きだな
file_get_contents or file + 正規表現
1文字ずつ見ていくやりかたもあるな
24 :
17 :2009/03/09(月) 22:57:35 ID:4+GIMEEF
皆さん、ありがとうございます。 SimpleXML ではなく、PEAR XML_Serializer で使うとすると、どうするのが おすすめでしょうか? 特に、タグが整合していないようなHTMLにうまく対応するには、どういう方法 があるでしょうか?
pearのそのライブラリは重大なバグが潜んでるってバグ情報に載ってたぜ
26 :
17 :2009/03/09(月) 23:14:07 ID:???
27 :
nobodyさん :2009/03/09(月) 23:49:28 ID:wECRTT84
ちょっと角度の違う質問ですみませんがよろしくお願いいたします プログラミングができることとPHPができることはイコールでしょうか? 基本的なプログラミング作法を習得すればpython,perl,rubyを覚えるのは簡単ですか?
>>27 そういう質問が出るということは
あなたはプログラミングはまったくやったことがない?
努力次第
30 :
5 :2009/03/10(火) 00:17:26 ID:IndrzJie
>>27 イコールじゃないってのはwikipediaで知らない言語を調べたときに
書いてある内容がチンプンカンプンだったりしたことがあったりしてわかるだろ
図書館なり本屋なりで計算機科学の大学の教科書みたいな本を手に入れてきて、
そんな質問したことで欝になるがいいさ
>>27 >プログラミングができることとPHPができることはイコールでしょうか?
PHPもプログラム言語の1つなので間違ってはいないけど
PHPができるようになってプログラミングできるとかは公言しないほうがいい
世の中にはすごい人はいっぱいいるので
その人たちとの会話するには1歩ひかないと痛い目見る
PHPだけをやってるうちは難しい話ふられてもわからないからね
>基本的なプログラミング作法を習得すればpython,perl,rubyを覚えるのは簡単ですか?
簡単かどうかは経験次第
基本的にベースができてれば仕様書読めば組むことができるが読み方がわからないと話にならない
PHPマニュアルと他言語のAPI仕様書なんかは結構違ってくるので
その差をどう吸収できるかが最大の問題
言語をたくさん覚えたいというならPHPを最初にやるのはおすすめしない
いろんな言語のベースになってるCやJavaをやったほうが短期間で効率よく移行できると思う
効率よく移行したいからCやJavaから始めるとか打算的なことやっても 大抵微妙で終わる気がするが
独学とか言うのは信用ならない 学校がいかに効率的なシステムなのかは後悔したときになって初めて分かるw
WebプログラミングができるということはPHPだけではやっぱだめなんだよな いろんな技術ができてはじめてWebプログラミングができるといえるようになると思う たとえばECサイトの構築なんかに必要なものは HTML+CSS+JavaScript+PHP+XML Schema+XML(RSS等も)+DB(SQL) RIAの選択肢によってはアプレットやFlash(Flex)やSilverlightなんかも そのほかにもプロトコル(http,https)なんかの知識も必要だったり地獄 PHPができるってことは単にPHPができるってことなんだと思うわ
なに語っちゃってんだよ
>>35 PHPだけで言えると思ってたなんて甘すぎ
何をいってんだおまえは
40 :
nobodyさん :2009/03/10(火) 10:20:12 ID:oLUhH3AJ
今まで完全に手続き型でやっていたプログラムを、 オブジェクト指向で書き直そうと思うのですが 怖くて一歩前へ踏み出すことができません・・ 書いたプログラムの規模や内容によるとは思いますが、 何かコツとか、やるならこれもやっておけみたいな点がありましたら教えてください
なんのためにやるの?
Javaの入門サイト池
>>40 テストファーストだけはやっといて損はないからやとけ
41のように答えられないんだったら無理して答えなくていいよ。 散々知識知恵を絞って、うまい回答ができないのを自ら晒しているだけ。
お前は何を言ってるんだ
46 :
nobodyさん :2009/03/10(火) 11:08:50 ID:uqvOEBO8
こんにちはをオブジェクト指向で書きたいのですがサンプルが見つかりません どなたか教えてくだいさ
こんにちはをオブジェクト指向でって何だ
<?php class hello { function ko(){echo 'こ';return $this;} function n(){echo 'ん';return $this;} function ni(){echo 'に';return $this;} function ti(){echo 'ち';return $this;} function ha(){echo 'は';return $this;} } $obj= new hello(); $obj->ko()->n()->ni()->ti()->ha(); ?>
return $this かっけえ
メソッドチェーンをおぼえて使いたくて仕方なかったんだろ
<? class greeting{ function hello(){ return "こんにちは"; } function goodevening(){ return "こんばんは"; } } class bibiru extends greeting{ function goodevening(){ return "こんばんみ"; } } class arare extends greeting{ function hello(){ return "んちゃ"; } } $bibiru = new bibiru(); echo $bibiru->hello()." ".$bibiru->goodevening()."<br>"; $arare = new arare(); echo $arare->hello()." ".$arare->goodevening()."<br>"; ?>
>>46 class Hello {
static function main() {
echo "Hello world!";
}
}
Hello::main();
PHPはメインメソッドが存在しないからいちいち呼び出さないとだめ
純粋なオブジェクト指向言語じゃないので全てをオブジェクトで包む必要がない
よってPHPでHello worldを出力するだけなら
クラスを使うのは用途としておかしい
サーバでうpしないで読む練習のためソースを読んでみたのですが
>>53 さんのを読むと
こんにちは こんばんみ
んちゃこんばんは
って表示されるのでおkですか?
単にメソッドをオーバーライドしてるだけじゃん インタフェースはどうした.デザパタはどうした.
59 :
nobodyさん :2009/03/10(火) 12:21:04 ID:TmDav5cL
【data.php】 $title = "タイトル"; $h1 = "見出し1"; $p = "文章です"; 【template.html】 <html> <head> <title>{title}</title> </head> <body> {h1} {p} </body> テンプレート(template.html)を元に{title},{h1},{p}にdata.phpにためてあるデータを値を入れたいのですが データの数は日々追加したり削除することも考えうるのですが どのようにしたらいいでしょうか? 【求める結果】 <html> <head> <title>タイトル</title> </head> <body> 見出し1 文章です </body>
一番簡単なのは テンプレートエンジンを使うこと。
<?php echo $title; ?>
63 :
nobodyさん :2009/03/10(火) 12:40:40 ID:TmDav5cL
smartyで
>>59 みたいに分離してこんにちはと表示させる書き方を教えてください
勉強のために書きたいんです
>>59 function convert() {
include func_get_arg(1);
return preg_replace(
'/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/e',
'isset($$1) ? htmlspecialchars($$1, ENT_QUOTES) : \'undefined\';',
file_get_contents(func_get_arg(0)));
}
echo convert('template.html', 'data.php');
コードが少ないけどさっぱりわからんねえわw
fluent interfaceになってない件
匿名関数とかクロージャーとかでいいじゃん・・・
## PHPによる、連想配列を使ってキーワード引数をエミュレートした例 $rows = Query.find_all('stocks', array('where'=>'price >= 1000', 'order_by'=>'name', 'limit'=>10)); これ本当に例?
70 :
nobodyさん :2009/03/10(火) 13:53:03 ID:9aCbhHpk
ArrayAccessをある基底クラスにimplementしたら、 その基底クラスより前に拡張クラスを書くと 「クラスがない」というエラーが出るようになりました。 基底クラスの後ろに拡張クラスを移動するとエラーは消えましたが。 なぜ、ArrayAccessをimplementすると こんなRubyやPhthonのような動作をするようになるのでしょうか?
71 :
nobodyさん :2009/03/10(火) 14:09:35 ID:v2XXMSa6
>>70 日本語で書いてくれ
基底クラスより先に拡張クラスを書けば、基底がないって言われるのはあたりまえ。
ArrayAccessをimplementしたなら、interfaceを実装すればいいだけ。
ArrayAccessがどうとかは関係ない。
>>70 が言いたいのはこの現象だろう
1: class C extends B {} // 1: をコメントアウトすると動く
2: class B extends A {}
3: class A {}
コンパイル時、 C は未定義のクラス B を参照しているので解決を保留する
B もまた同様に保留され、A のみ定義した時点で終端に達しそのまま打ち切る
そして実行時に入って再度 C>B を解決しようとするが B が未定義のままなので Class 'B' not found になる
1: をコメントアウトした場合は、B は A しか参照していないので実行時に解決できエラーも出ない
ただ組み込みクラス、インターフェイスによって実行前解決が出来る出来ないの違いが出る理由は分からない
ソースを追いかけられる人に任せる
var_dump(class_exists('Klass', false)); // false
var_dump(interface_exists('IA', false)); // true
var_dump(interface_exists('IB', false)); // false
interface IA {} // 実行前に解決
eval('interface IB {}'); // 実行時に解決
class Klass implements IA, IB {} // 未解決の IB があるので実行時まで解決を遅らせる
var_dump(class_exists('Klass', false)); // true
var_dump(interface_exists('IA', false)); // true
var_dump(interface_exists('IB', false)); // true
>>73 それが不思議に思うのは、実装系以外におまいさんルールのほうが理想的とおもってるからじゃね?
普通に、実行時のロードされてるかどうかの違いでしかない > 組み込みも含めて。
76 :
73 :2009/03/10(火) 17:02:25 ID:AQjjLY2m
>>75 遅延評価の一例上げただけだ、説明が下手なら悪い
俺がソースを読まないと説明できないと言ってるのは次の挙動
// SPL組み込みクラス true true
var_dump(class_exists('ArrayObject', false), class_exists('XArrayObject', false));
class XArrayObject extends ArrayObject {}
// SPL組み込みインターフェイス true false
var_dump(interface_exists('ArrayAccess', false), interface_exists('XArrayAccess', false));
interface XArrayAccess extends ArrayAccess {}
あと
>>70 と俺は別人だからな、IDは出しとく
>>76 それが説明できないって言ってるけど、何を説明してほしいんだ?
あるがままだろ
>>76 一応説明しとくか。
上のケース、
XArrayObjectはvar_dump評価時にすでにロードされてる。
下のケース
XArrayAccessはvar_dump評価時にロードされていない。
よって、そのような動作になっている。
79 :
73 :2009/03/10(火) 17:35:45 ID:AQjjLY2m
分かりました質問としてやりなおします
【OS名】 Windows XP SP3, FreeBSD 6.4
【PHPのバージョン】 5.2.9, 5.3-dev, 6.0-dev
【質問内容】
組み込みのクラスとインターフェースで、
定義済みになるタイミングに違いが出る理由もしくは原因を教えて下さい
ソースコードは
>>76 です
>>77 ,78のような観察日記な回答は要りません
81 :
73 :2009/03/10(火) 17:49:35 ID:AQjjLY2m
82 :
nobodyさん :2009/03/10(火) 19:29:40 ID:U6ySWdbJ
先輩方に質問です。 phpの掲示板を運営しているのですが、海外からの宣伝書き込みを阻止したいのですが、半角英数記号のみ書込禁止は↓の構文で大丈夫だったんですが、半角スペースが含まれると対応できません。。。 何か良い方法はありませんか? if (preg_match(\"/^[!-~]+$/\", 変数名))
逆の発想でひらがなかカタカナが含まれていなければはじくとか そっちの方が効率的だと思うよ
半角英数の書き込みができないその手の対策はもう去年までの話だろ 時代に取り残されるぜ
やっておくのが無駄とは思わないけどな
すいません。ラウンドロビンや負荷分散の説明見ました。 PHP側としてはどうしたらいいでしょうか? 同期ってレンタルサーバーの複数台プラントかは 勝手にやってくれるんですか?
当然
ありがとう。複数台運営が将来の夢でしたので調べていました
91 :
nobodyさん :2009/03/11(水) 17:14:13 ID:Txff9mTl
$a=isset($_REQUEST['b'])?$_REQUEST['b']:''; php学習2日目の名無しです このスクリプトの意味を教えていただけませんか
92 :
nobodyさん :2009/03/11(水) 17:16:18 ID:L2Yi36ri
$a = 0; if($a === 0){ echo "ok"; }else{ echo ""; } で問題なく、okが出るのですが、 pdoで、$aをbindParamしたものを間に挟むと、elseしてしまいました $a = 0; ・・・ $result->bindParam(":A",$a,PDO::PARAM_INT); ・・・ if($a === 0){ echo "ok"; }else{ echo ""; } しかし、 $a == 0 とすればokでした。 原因は何なのでしょうかよろしくおねがいします php5.2.6 OS windows
>>87 やらなくていいって話ではなくて、それは古いって話だ
素人乙
95 :
nobodyさん :2009/03/11(水) 17:27:49 ID:Txff9mTl
96 :
nobodyさん :2009/03/11(水) 17:54:26 ID:aBj2wILp
PHPで、端末のOS・ブラウザ・IPなどを取得できるのは知っているんですが、固体識別番号(?)を取得することは可能でしょうか? 以前に、他人の家から漏れている無線LANの電波を悪用して、殺人予告したヤツが捕まりましたが、ノートPCリカバリ→他人の電波で殺人予告→再リカバリとやればバレないような気がします。 厨房質問でお恥ずかしいですが、よろしくお願いします
通報しました
98 :
nobodyさん :2009/03/11(水) 19:13:57 ID:TxDdMOL9
「最新記事一覧」とか「サイト内検索」とかの機能を プラグインとしてまとめて、下のようにして読み込んでいます。 $plugin_name = "new_list.php"; define("PLUGIN_DIR",プラグインまでのパス); if(file_exists(PLUGIN_DIR."/".$plugin_name)){ include PLUGIN_DIR."/".$plugin_name; newList(); //プラグイン内の関数を実行 } こうするとプラグインの数だけ毎回includeする事になるのですが 負荷がかからないか、後々めんどうなことにならないかと懸念しています。 自分では予測できないのですが、「こういうやり方だとこうなる」 というような指摘があれば、教えて下さい。
>>96 リカバリしてもmacアドレス変わらないから無理じゃね?
>>98 そういう時のためにinclude_onceとかrequire_onceという組み込み関数が用意されてるけど、負荷が高くなるのでお勧めしない
なのでプラグインがクラスで実装されているなら、ファイル名とクラス名を統一しておいて
$files = glob(PLUGIN_DIR .'/*.php');
foreach ($files as $file) {
if (!class_exists(pathinfo($file, PATHINFO_FILENAME))) require $file;
}
などとすればいいんじゃない?
101 :
nobodyさん :2009/03/11(水) 20:09:31 ID:BrBOeywI
初めて書き込みさせて頂きます。 【OS名】Windows XP 【PHPのバージョン】php4.4.9 【連携ソフトウェア】Apache2.0.63, MySQL Server 6.3 【質問内容】 pearを導入したく、go-pear.batを実行して試みたのですが、 Extracting installer.................. Using local package: PEAR.............ok Using local package: Structures_Graph....ok Preparing installer.................. Warning: fopen(XML/RPC.php): failed to open stream: No such file or directory in C:\php\temp\PEAR\Remote.php on line 187 For this remote PEAR operation you need to load the xmlrpc extension or install XML_RPC 続行するには何かキーを押してください . . . というエラーが出てしまい、途中で止まってしまっているようです。 インストールされていないためにPEARコマンドも実行できません。 php.iniのinclude_pathにpearディレクトリへのパスや、extensions_dirなども 見直しましたが、他に何が悪いのかわからず困っております。
困っておりますじゃなくて、何が知りたいのか書けば? 困っておりますじゃぁ、「そうですか」としか言えない気もするが、 めっちゃ親切な人がいれば答えてくれるのかもしれんけど。 それはそうと、PHP5にして試してみたら? go-pearが古いのかもしれないよ。
103 :
101 :2009/03/11(水) 20:34:19 ID:BrBOeywI
すみません、自己解決までには至っていませんが、少し先に進むことができました。
上記失敗の原因はphp.iniのphp_xmlrpc.dllがコメントアウトでした。
これを外し、必要となるiconv.dllをsystem32にコピーしてから試したところ、
PEAR_Remote (pear.php.net:80) : unexpected HTTP response
という別のエラーが出るようになりました。
こちらの対処法を調べてみることにします。
>>102 その通りですね、失礼しました。
以後、質問の意図を明確にするよう注意しようと思います。
104 :
認定回答者 :2009/03/11(水) 20:39:09 ID:nPJIwFx5
>>104 他の回答者を格付けできるほどの立派な頭脳をお持ちなら、何故そこで最適解をお示しにならないのでしょうか?
不思議で仕方がありません><
ファイルアップロードの質問です。
クライアントの方はJavaScript/VBScriptで、バイナリファイルをサーバー(PHP)へ
アップロードしたいのですが、どのようにすればいいでしょうか?
JavaScript は
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); //XMLHttpRequest();
xmlhttp.open('POST', '
http://hoge/recieve ', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send('formdata=123');
とすると、PHPの方で'123'は取れるのは確認しました.問題はバイナリで、
"ADODB.Stream"でバイナリファイルを str=Read(); strをBase64変換しようとするのですが
使っている変換用モジュールが駄目なのかもしれませんが、ここでこけてしまいます。
まずはBase64変換でポピュラーなやり方を説明しているサイトなどありませんでしょうか
お願いいたします。
>>106 <input type="file">
任意のフォルダ名を入力させて、その中のファイルをULさせようとしております。 <input type="file">はひとつひとつファイル選択しないといけないので、、、
,..-─‐-..、
/.: : : : : : : .ヽ
R: : : :. : pq: :i}
|:.i} : : : :_{: :.レ′
ノr┴-<」: :j|
/:r仁ニ= ノ:.ノ|! _
/:/ = /: :/ }! |〕) コツン
{;ハ__,イ: :f | /´
/ }rヘ ├--r─y/
/ r'‐-| ├-┴〆 _, 、_ '⌒ ☆
仁二ニ_‐-イ | | ∩`Д´)
| l i 厂  ̄ニニ¬ ノ ⊂ノ
>>108 ,ゝ、 \ \ __厂`ヽ (__ ̄) )
/ /\_i⌒ト、_ ノrr- } し'し′
└-' ̄. | |_二二._」」__ノ
,..-─‐-..、
/.: : : : : : : .ヽ
R: : : :. : pq: :i}
|:.i} : : : :_{: :.レ′
ノr┴-<」: :j|
/:r仁ニ= ノ:.ノ|! _
/:/ = /: :/ }! |〕) コツン
{;ハ__,イ: :f | /´
/ }rヘ ├--r─y/
/ r'‐-| ├-┴〆 _, 、_ '⌒ ☆
仁二ニ_‐-イ | | ∩`Д´)
| l i 厂  ̄ニニ¬ ノ ⊂ノ
>>109 ,ゝ、 \ \ __厂`ヽ (__ ̄) )
/ /\_i⌒ト、_ ノrr- } し'し′
└-' ̄. | |_二二._」」__ノ
113 :
98 :2009/03/11(水) 23:04:15 ID:???
>>100 こういうやり方、はじめて知りました!
ちょっとよく分からない関するとかありますが、調べてみます。
ありがとうございました。
<img src="
http://xxx.com/xxxx.php?sz=160x240&type=11 ">
サーバーを引っ越したらこういうような画像が表示ができなくなりました。
いろいろ試してみたところどうも引越し先のサーバーが上の表記のものを
画像として認識してないと思われます。
画像元は他サイトなのでいじれません。
どうすれば画像として認識してくれるのでしょうか?
accessで何かすればいいのかなとは思っていますがどう書けばよいでしょうか
ご教授お願いします。
115 :
nobodyさん :2009/03/11(水) 23:32:05 ID:Co0l4rZT
>>92 使用しているDBまた、どんなSQLを実行したか分からないけど、
bindParamは変数は参照としてバインドされるので、
メソッドの中でPDOドライバが何か余計なことをしたのかもしれないね。
bindParamの前後で、デバッガか、var_dumpで変数をチェックしてみては?
117 :
114 :2009/03/12(木) 00:02:38 ID:???
初歩的な質問で恐縮です。 正規表現で複数回続く文字 。 を一回に置換したいです。 以下で試しましたがうまくいきません。 最長マッチ?のしかた教えて下さい。 mb_regex_encoding("sjis"); $text = "今日は木曜日です。。天気は晴れ。。。。"; $text = preg_replace("/。+/","。", $text);
>>118 preg_replace('/(。)+/', '。', '今日は木曜日です。。天気は晴れ。。。。');
で、できた。
括弧が必要な理由は分からん。
それじゃ”。”にしか対応できてへん
オブジェクト指向なるものを調べ始める ↓ みんなで開発するときは作業分担効率化 ↓ フレームワークを使うのが当たり前 ↓ ある程度自動でさくさくプログラム書けるらしい ↓ なんか自分でやった感がなさそうな気がしてモチベーション下がってきた・・・ まだ初心者すぎるし、ずっと手続き型でやるほうがいいのだろうか・・・ でも作業分担ですっきり綺麗にプログラムかけるのとか憧れるし、 そんなことができるなら今のうちにやっておいたほうがいいし、 でもプログラム自動生成とかになるらしい?からそれになれちゃうと、 今度は手続き型で覚えてきた基礎がおろそかになって忘れそうな部分が多そうで怖い・・・ 一体どうしたら
別に手続き型言語でもフレームワークとか自動生成とかあるだろ 問題を分けて考えるべきだ
一人OOPで作業分担もヘチマもないだろw
誰にも見せないプログラムでも 後から見て、 おお〜これは見やすくて編集しやすいな〜 みたいに言われそうなの書いてみたい
>122 ・21世紀にもなってOOPができないエンジニアはゴミ ・OOPでないコードは、ひとりで書くコードでもゴミ ・「手続き型のコード」が何を指すか知らんが、PHPの文法はどのみち完璧にしないと何も出来ない ・個々のフレームワークの知識は要らん MVC構造とは何かを頭に叩き込んでから、必要なものを自分で書け OOP分かってない奴はクラス使っても糞コードしか書けないのと同じで、フレームワークを使おうが基礎が出来てない奴のコードはやっぱりクズだ ・ガタガタ抜かす前に動くコードを書けよハゲ 自動でサクサクできる?んじゃあやってみろよハゲ 手を動かさないエンジニアはゾウリムシ以下だ
>>118 ,119
補足
mb_regex_encoding()はmb_ereg*()にしか適用されないので
マルチバイト文字だと認識できていない事が原因
その例ならpreg_replace()ではなくmb_ereg_replace()を使う
今はアスペクト指向なんてものがあるんですよ
手続きとかオブジェクトとかアスペクトとか手段でしかないからそれありきで考えるなんてアホ 成果上げるためにどう開発するのがいいか個別に考えればええやん
開発速度を犠牲にしても初心者は手続きで何がどうなっているのかを ちゃんと見極めたほうがいい 仕事になればたいした技術もおそわらず FWとAPIの使い方を覚えさせられてラピッド開発させられるだけ 短期間で効率的に開発というのは業務では中核となる課題だが 結果ゆとりを多く生み出してる
すいませんブログを作りたいのですが必要最低限の機能は以下でそろってますか? トラックバック 書き込み(コメント、記事投稿) ログ出力
132 :
nobodyさん :2009/03/12(木) 11:26:19 ID:blHr3iRk
すいませんid出し忘れました
133 :
108 :2009/03/12(木) 11:41:37 ID:???
さっさと回答しろよ初心者ども
ブログに必要なものは ↓
根気
>>131 最低限、カテゴリ別一覧とカレンダーと月別一覧は必要だろう
>>136 最低限、占いとポストペットとログールは必要だろう
ウェブログリングをお忘れでない?
>>136 カテゴリ別一覧とかカレンダーとか月別一覧とか
生きた化石がこんなところにもいるんですね
140 :
nobodyさん :2009/03/12(木) 17:39:53 ID:w9p/Xb/s
カテゴリ別一覧の仕組みがいまいちわからないんですけど どのような仕組みでしょうか?
SELECT title,body,entrydate FROM entry WHERE categoryid=1;
>>139 あなたは使いにくいものはかっこいいと勘違いしてるクリエイターさんですね
143 :
nobodyさん :2009/03/12(木) 19:04:33 ID:y65Mhsc8
配列から要素を抜き出し、その分を詰めたいのですが、どうするのがスマートですか? $array = array('a','b','c'); $str = pick($array,1); ↓ $array : array('a','c') $str : 'b' のような動作をさせたいです
>>143 $str = $array[1];
unset($array[1]);
unset使うコーディングはクズだな
>>143 list($str) = array_splice($array, 1, 1);
>>144 unsetは数値キーを再割り当てしない
148 :
nobodyさん :2009/03/12(木) 21:50:39 ID:Y3aY0Tvp
PHP+MYSQLで、MySQL寄りの質問になると思うんですが、 MySQLのスレッドがなかったので…。 スレ違いなら申し訳ないです。 [testテーブル] no(オートインクリメント) name 1・フォームからnameデータを受け取り、testテーブルにINSERTで入力。 2・その後すぐに、1の入力で作成されたレコードのnoを引き出す。 これを行うのに最適な方法はなんでしょう? nameはキーではなく重複する可能性があるのでnameでのselectは不可です。 とりあえず2で select * from test order by no desc limit 0,1 で取り出す方法を考えたんですが、 その場合1と2の間に一貫性?を持たせなければなりません。 この一貫性を保持させる方法がMySQLにあるのかPHPにあるのか・・・。 もしこの方法が最適なら一貫性を持たせる方法 (できれば例のコード)を教えてください。 また他に最適な方法があるならぜひお願いします。
>>148 説明
int mysql_insert_id ([ resource $link_identifier ] )
直近の INSERT クエリにより AUTO_INCREMENT カラム用に生成された ID を取得します。
150 :
nobodyさん :2009/03/12(木) 22:12:31 ID:w9p/Xb/s
classの継承についてちょとよく分からないので質問です。 class Main{ function dbList(){ // MySQLから特定のテーブルリスト一覧を取得する } } class Sub extends Main{ function output(){ $list = $this->dbList(); // Mainからテーブルリストを取得 } function output2(){ $list = $this->dbList(); } } こういうclassがあったとして、Sub内のoutput()を実行すると MainのdbList()を実行することになりますよね? そしてoutput2でdbList()を使いたい場合、再度実行する事になりますよね? そうではなくて、Mainで設定した内容を使い回しするような事って出来ないのでしょうか?
>150 function dbList(){ if(false === isset($this->dbList){ $this->dbList = mysql_fetch_なんとか(); } return $this->dbList; } 遅延初期化とか呼ばれるテクニックで、割と定石。 使いすぎるとカオスになるので、どの値をどのクラス/インスタンスで保持するかは慎重に検討したほうがいい。
152 :
nobodyさん :2009/03/12(木) 23:11:07 ID:Y3aY0Tvp
>>149 まずint mysql_insert_id ([ resource $link_identifier ] )
について調べてみます。
助言本当にありがとうございます。
153 :
nobodyさん :2009/03/12(木) 23:53:49 ID:ZuCT+g0F
file.txtにcsvで以下のように記録しました これからファイルからデータベースにデータを移し替えたいと思ってます id,name,age 1,木村,10 2,佐藤,20 3,木下,30 4,山田,40 5,坂本,50 mysqlを使用した場合でダイレクトにid2の佐藤さんのデータのみを取得するにはどうしたらよろしいでしょうか? ファイルですとforeachでまわしてexplodeで区切る感じで、データを全部読み込んで処理させてるのですが データベース使ってもデータは全部読み込んでまわして取得するのでしょうか?
154 :
nobodyさん :2009/03/12(木) 23:59:52 ID:qegdPp88
タブ区切りのbbs.cfgからexplodeで設定値を取り出す このとき、配列の要素が100個ぐらいだとして、 こういう場合はいちいち使うものに変数名をつけるか、 それとも配列の[数字]でつかうのか、 どっちが一般的なんでしょ? こういう場合に限らず、一般的に他の言語とかでも たくさんの値を使う場合はどういう管理をしてるんでしょう??
>>153 データーベースの場合は、
WHERE id=2
とかって指定すれば、id=2のデーターだけ
読み込める。
>154 個数はあんま関係ないな。 論理的に「同じようなものが100個」ならば、100要素の配列を使う、というだけ。 例えば>153のデータが100行ならば、人間が100人なわけで、100要素の配列に格納するのは理にかなっているわけだ。 だが、列が3列だからといって、各行を3要素の配列で表現したりはしない。idと年齢は別の概念だからな。 たとえスリーサイズとか干支とか住所とかで各行の要素が何十とあったとしても、数字添字の配列にはしない。 $person[0] = array( 'id' => 1, 'name => '木村', 'age' => 10); $person[1] = array( 'id' => 2, 'name => '佐藤', 'age' => 20); みたいな連想配列に格納する。もしくはクラスを使う。 1行ずつ処理する場合も list($id, $name, $age) = explode(',', $line); みたいにやった方が、コードが読みやすいはず。
>>154 >>156 俺は100も200もあって意味とか型とかが同一のデータなら(試験の点数など)、
いちいち列名なんてつけずに数字で扱うけどな。まあどっちもでいいんじゃね
158 :
nobodyさん :2009/03/13(金) 11:07:13 ID:eI4NlDZU
classの中で変数を宣言するときvarにしようと思ったのですが どこかのサイトで、php5はvarは使うな的なことを書いてありました そのサイトどこか忘れてしまったのですが、varの他に何を使うのが適当なのでしょうか
PHPである程度の量の文(300KBぐらい)を処理するために ヒアードキュメントを使っています。 フォームで処理すればコピペの時のスクロールが省けると思いフォームの POST経由で変数を処理しましたが100KBぐらいしか処理できません。 これはフォームの入力制限等があるからでしょうか?
>>160 そんなことはないと思うぞ。ブログとか文章が長くて容量がでかいだろ。
おそらく、設計にミスがあるんじゃないか?
>>153 DBの場合、主にSQL文を使う。その場合なら
SELECT id,name,age FROM テーブル名 WHERE id = 2;
こんな感じのSQLをデータベースに投げることによって、idが2のやつのデータを返してくる。
ファイルよりも細かい検索ができるからいろいろやってみると面白いよ。
詳しくはMySQLのオンラインマニュアルとかSQLの入門サイトを参照のこと。
164 :
nobodyさん :2009/03/13(金) 15:02:30 ID:6EGCx2Tu
PHPで痴漢、いやっ置換する関数などはありますか?
str_replace preg_replace
166 :
nobodyさん :2009/03/13(金) 15:05:04 ID:OOgBCn1Z
Cache_Liteを使って、 一つのフォルダに50万以上のページのキャッシュを保存してます。 今後も+1万/日のペースで増加します。 やはり、キャッシュを保存するフォルダは適度に分散した方がいいのでしょうか? 動作が遅くなる可能性はありますか。
167 :
nobodyさん :2009/03/13(金) 15:19:24 ID:DZKgFtDb
classの中でevalを使う方法を教えていただけませんか 使えなかったらすみません class hoge{ var $hoge = eval("a"); } このようなエラーが返ってきます。Parse error: syntax error, unexpected T_EVAL
eval(笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
class hoge{ var $a; function hoge(){ $this->a = eval... } } こうしてみたら? eval使ったことないけど。
170 :
nobodyさん :2009/03/13(金) 16:00:26 ID:XJCetXbH
自動で、毎日ある時間になったら、スクリプトを実行させたいのですが、 ループ文で四六時中、time()関数を実行して、設定した時間になったら、ループを抜け出しスクリプトを実行する、 というやり方はありですか?
>>170 おぉ、その手があったか。是非、max_execution_timeの限界ってどのくらいか試してくれ。
でもそのスクリプト、ずーっと実行し続けられる保証がないよね?
そしたらそれを定期的に監視するするスクリプトもそれで動かせばいいね。うんうん。
現実的には cron だな。
173 :
nobodyさん :2009/03/13(金) 16:13:19 ID:DZKgFtDb
>>169 なるほど!
思いつきませんでした。ありがとうございます
>>170 ものすごく負荷がかかると思います。
レンタルサーバーなら、コンパネからcron使えないですかね
>>170 クライアントPCつけっぱなしか。電気代もったいないな
175 :
170 :2009/03/13(金) 16:21:18 ID:XJCetXbH
レスありがとうございます。 まったくの入門者でwinで自鯖をやる予定です。 max_execution_timeというので、負荷がわかるわけですね、勉強になりました。 まだ、試してないんですが、cronだと細かい設定が出来ないですよね?
>>174 ignore_user_abortがある
>>175 工夫すれば負荷なんてそんなにかかんないよ。
1クライアント分消費するだけ。
max_execution_timeを無限設定して
ignore_user_abortで起動して、forループにSleepを巨大な秒数でセットしてやれば。
あとは、プロセスを一つに絞るのに、どっかにPIDファイル作るとか
177 :
質問させて下さい :2009/03/13(金) 21:45:58 ID:75Yme90V
php5.25です。
phpで下記を書いてます。
<?php
$mainrss = array (
'
http://www.123.net/ ○○',
'
http://456.net/ ○○'
);
?>
URLは取得できるようになるんですが、URLの後ろに短い紹介文を書きたいのですが、
カンマじゃなくて何を使ってあげるといいのでしょうか?
○○に短い紹介文を記入したいです
アドバイスをお願いします。
意味が分からんけど=>でキーにでもすれば?
179 :
質問させて下さい :2009/03/13(金) 21:50:51 ID:75Yme90V
.
181 :
質問させて下さい :2009/03/13(金) 22:06:25 ID:75Yme90V
カンマじゃなくてドットだって
183 :
質問させて下さい :2009/03/13(金) 22:15:49 ID:75Yme90V
それでもだめでした。 レスを有り難うございます。 本を買ってきて勉強したいと思います。
いや、つか何をしたかったの?
>175 Unix/Linuxならcronだが、同じ事はWindowsではタスクスケジューラで実現する。 (Windows上で動くcronも存在するが) 無限ループを回すよりはこちらのほうがスマート。 「cronだと細かい設定が出来ない」の意味が良く分からんな。 1分以下の精度で実行タイミングを指定したい(12時30分15秒じゃないとダメなんだ!とか)とか言う意味ならcronの仕様上無理だが。 曜日指定とか時刻指定とかなら余裕で可能。cron覚えるのがダルいならスクリプト側で制御してもいいしな。 任意のスクリプトを動作させられるのだから、そのPC上で可能な事はなんだって出来る。
>>176 >max_execution_timeを無限設定して
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑
188 :
170 :2009/03/14(土) 01:07:17 ID:u9lyCe1c
170です。レスくれた方ありがとうございます。 いまいちよくわからないので、もう少し勉強してからもう一度質問させて頂きます。
189 :
質問させて下さい :2009/03/14(土) 07:04:33 ID:hOLVrRGN
>>187 わああああああ!
レスありがとうございました。
このようにやりたかったです。
無事に出来ました!本当にありがとうございます。
phpの本は買って勉強をしておきます。
>>187 に超図解シリーズで本を出してもらうしかないな
って、超図解の出版元って倒産してるのかよ!w
192 :
nobodyさん :2009/03/14(土) 11:44:37 ID:sxFlkHR4
phpって一つの.phpに何行くらい書いても大丈夫なんでしょう 5000行くらいなら平気ですかね?もちろん文字数や処理にもよると思うのですが、 (適度に改行したとして)大体何行くらいに納めるみたいなのがあればよろしくおねがいします
特にないよ
>192 俺の場合、1ファイル1クラスは死守。 1クラス500行上限が目安で、1メソッドは基本的にスクロールせずに全部見える分量に収める。 1ファイルが大きくなると、当然その分パフォーマンスに影響するし、保守もしづらい。
同サイズだったらファイル数が多い方がパフォーマンス悪くなるわ
>>195 クラスローダーを書いて、頻繁に使うクラスはパッキングしてキャッシュすればOK
197 :
194 :2009/03/14(土) 13:56:17 ID:???
>195 毎回毎回すべての処理を呼び出すならその通り。 だが、呼び出しの9割は参照系へのアクセスで、そのうち8割はトップページだ。 つうか、パフォーマンスなんぞどうでもいいんだけどな。管理しづらい、読みづらいというのが最大の問題点。
自分で書いたくせに何言ってんだお前www
199 :
質問させて下さい :2009/03/14(土) 19:52:27 ID:hOLVrRGN
2度目の質問失礼します。 file_getについてアドバイスをお願いします。 下記にするとエラーが出ます。 <?php echo mb_convert_encoding(file_get_contents("111.php"), "shift-jis", "auto"); ?> エラー内容 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in 111.php on line 59 下記にするとエラーは出ません。 <?php echo mb_convert_encoding(file_get_contents("111.php"), "shift-jis", "shift-jis"); ?> "shift-jis", "shift-jis"と2重にしたんですが、おかしな書き方になるのでしょうか? 別の書き方がありましたら教えて下さい。
201 :
nobodyさん :2009/03/14(土) 20:37:03 ID:qjtwBjoL
キーと値の組み合わせとしてではなく、 array('a','b','c') のように値の羅列の形式で代入された配列の正式名称って何ですか?
>>201 そのまんま配列
キーと組み合わせたのは連想配列
>>199 file_get_contentsに設定するパラメータは以下だけです
filename
flags flags
context
offset
maxlen
よって君は何か勘違いをしている
マニュアルをよく読みましょう
君が勘違いしている
>199 111.phpのエンコードが事前に分かっているなら後者の書き方のほうが望ましい。 前者だと、間違ったエンコード判定がされた場合文字化けの原因になるしな。 Shift_JISからShift_JISに変換しているわけで、ヘンっちゃあヘン、というか無駄だな。 状況によっては100%無意味というわけでもないが… echo file_get_contents("111.php"); とほぼ同じ意味だ、というのは理解してるのかな。
$hoge = "hoge"; var_dump($hoge); echo "<br>"; function hogehoge(){ $hogehoge = "hogehoge"; echo $hogehoge; } var_dump(hogehoge()); echo "<br>"; function hogehogehoge(){ return "hogehogehoge"; } var_dump(hogehogehoge()); の結果が、上から順に string(4) "hoge" hogehogeNULL string(12) "hogehogehoge" このNULLってどうしてでてくるんですか?><
値戻してないからだろ
>206 $a = hogehoge(); $b = hogehogehoge(); として、$aと$bの中身をvar_dumpで見てみろ。
209 :
nobodyさん :2009/03/14(土) 22:01:33 ID:fYsVSce/
>>207 hogehoge()の中にreturnをいれて、
function hogehoge(){
$hogehoge = "hogehoge";
echo $hogehoge;
return "ho";
}
にしたらNULLなくなりました><
ありがとうございました
>>208 こうでしょうか><
$a = hogehoge();
$b = hogehogehoge();
var_dump($a);
echo "<br>";
var_dump($b);
結果、
hogehogeNULL
string(12) "hogehogehoge"
になりました><
210 :
nobodyさん :2009/03/14(土) 22:20:14 ID:S24jNTMx
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form method="post" action="<?php $_SERVER["PHP_SELF"]; ?>"> <input type="checkbox" name="bbb[]" value="かきくけこ"> あいうえお<br> <input type="submit" value="選択"> </form> <?PHP if(isset($_POST['bbb'])){ foreach ($_POST['bbb'] as $a){ print ($a); print "<br>"; } } ?> </body> </html> これで、ローカルで試すと問題なく動くのですが、 レンタルサーバーにアップロードして試すと 文字化けになります。なんででしょうか?
>>210 自己レス
サーバーのphp.ini の
mbstring.internal_encoding = UTF-8を設定して
上書きしてファイルを再読み込みしてリトライしたらできた。
サーバーのデフォルトではEUCになってた。氏ね。
212 :
質問させて下さい :2009/03/14(土) 22:37:16 ID:hOLVrRGN
>>203 そういうことについては全然勉強足りていないので頑張って覚えてみます。
アドバイス有り難うございます。
>>205 詳しい解説有り難うございます。
おかげでよく理解出来ました!
感謝しております。
>>200 意味がわかりませんでした。
失礼致しました。
>>210 php_selfは推奨されてないのに使うバカ発見
215 :
nobodyさん :2009/03/14(土) 23:52:54 ID:da46lvzd
トラックバックの送受信の処理を書こうと思うのですが もし既存のライブラリがございましたら教えてください
218 :
nobodyさん :2009/03/15(日) 00:05:25 ID:yySd7NKe
cliでpg_connectを実行したらSegmentation faultが出るんだけど。 PHP 5.2.6-2ubuntu4.1 with Suhosin-Patch 0.9.6.2 (cli) <?php $DB = pg_connect("host=$DbIp dbname=$DbName user=$DbUser password=$DbPass"); ?> これはうちの環境の問題なのか、誰か教えて欲しい。
>>218 そりゃ変数に何も格納されてないなら無理だろ
PHP5.3使ってるんですが、メモリ不足を例外処理みたく捕まえることってできますか? 方法をご存じの方がいらっしゃいましたら教えてください。
221 :
nobodyさん :2009/03/15(日) 06:06:51 ID:+CIxhGml
残念ながらそういうのは無い
223 :
220 :2009/03/15(日) 06:27:45 ID:???
>>222 やっぱそうですか。
踏ん切りがつきました。ありがとう。
224 :
nobodyさん :2009/03/15(日) 08:14:23 ID:yySd7NKe
>>219 書き方が悪かった。
実際の変数部分には正しい値が入る。
ちなみに接続も成功するしSQLの結果もかえってくる。
apacheで実行した時は何も問題ない。
でもcliの時だけfaultが最後に出るから悩んでる。
>>224 使ってるphp.iniが違うとかはないの?
それで落ちるかといえば疑問だけど。
とりあえずphpinfo() で使ってるphp.ini確認してみたら。
あとバージョンが違うライブラリにパスが通ってるとか。
実行ユーザーが違うので ・ログに書けないよエラー ・そのエラーログを書こうとしてエラー ・そのエラーログのエラーログを書こうとしてエラー ・その・・・・ とか。
228 :
nobodyさん :2009/03/15(日) 09:58:53 ID:qN1+xeFs
foreachの中から、そのループが1回目か/最後か等を調べるいい方法を 教えてください
>>228 いい方法かはわからないけど、
$i = 0;
foreach(){
$i++;
}
みたいなやり方はだめなのかな
count()を使えば配列の要素の数も得られるから、それで最後かどうかもわかるのでは
>>225 ubuntuなんで、php.iniは別なんだけど設定は同じ。
ライブラリ系もまったく同じ。
今思ったけど、linux板で聞いたほうがいいのかも。
ちょっと移動してきます。
ありがとう。
>228 無い。 ループの何巡目かが処理に影響するような場合はforを使え。
232 :
nobodyさん :2009/03/15(日) 11:18:55 ID:Ok7zsTbr
セッションIDって基本的にはクッキーに保存されるじゃん じゃあ、クッキーが無い時代はどうやってたの?
>>231 プログラミングに「ない」を考えるあなたの考えにナイワ
>>232 原初、最初にクッキーだけがあった
したがってクッキーのない時代などない
クッキー使えなくても埋め込みがある どっちも平文で送信されるから似たようなもんだ
本来、1つのクラスは、1つのファイルに分けるべきみたいなのを よくみるんだけど、数行程度でも?
239 :
238 :2009/03/15(日) 14:40:11 ID:???
あ、そうか エラー見つけやすいから分けるのか とりあえず小分けにしておくわ
240 :
nobodyさん :2009/03/15(日) 14:45:54 ID:L+gdJUIE
>>238 数行程度のクラスがわんさかあってもウザイと思うが
241 :
nobodyさん :2009/03/15(日) 14:46:54 ID:L+gdJUIE
>>235 クッキーの無い時代もあったんじゃね?
それよか、フォームすらなかった時代もあったんじゃね?
ネットスケープ社が頑張って実装したんじゃね?
243 :
nobodyさん :2009/03/15(日) 16:35:04 ID:L+gdJUIE
>>242 お前の方が大丈夫か?最初のHTMLは画像すら使えなかったって知ってるか?
これ以上ない「ゆとり」と発言したくなるシチュ
245 :
nobodyさん :2009/03/15(日) 18:46:33 ID:tXlRktlT
複数行入力できるtextareaを使って入力してもらい それをmysqlのtext型としてinsertしました それをselectクエリで取り出して表示してみた所、改行されずに 表示されてしまうんですが、入力の時と同じように表示させる ためにはどうすればいいんですか?
昔はクックーもフォームも使えなかったことを知らないとは
249 :
nobodyさん :2009/03/15(日) 19:25:38 ID:tXlRktlT
>>246 >>248 できました! こんな便利なものがあるなんて知らなかったです
まだまだ勉強不足ですね がんばります
ありがとうございました!
>>250 (1)
MySQLでPDOが使える(無料のところはPDO使えないことが多い)
(2)
強制挿入される広告が消える
(3)
場合によっては有料のところでは独自ドメインが使えるかも
(無料でも一部使えるところはある)
(4) sendomailが使える (無料のところではsendmailは無効化されていることがおおい) sendmailが使えないとメールが送れない。 PHPのmail関数は、サーバーのsendmailに仕事を 丸投げしているだけなので、sendmailが動いていないと 何も起きない
DBやメールなんかでいろいろ制限があるんですね。 ありがとうございました。
よく見たら、CGIを利用するには有料じゃないとダメですね。
無料/安価なサーバーはだいたい重い。 少数のサーバーに人を大量に詰め込むからな。 (そうしないと初期投資を回収できないので仕方ないが)
ifの代わりにswitchを使ってやろうとしたのですが、 <?php $i = 3; switch($i){ case 0: case 1: case 2: case 3: case 4: echo "iは0〜4"; break; default: echo "iは不明"; break; } ?> これがもし、case 0:〜case 4:の部分で、 case 0:〜case 100:までを判断したいとき どういう風に記述すればいいのでしょうか。
100行書くしかないのでは?
横に繋げれば1行で済むのでは?
なんでifにしないのか理解に苦しむ。
iが0〜100までかを調べたいなら if ($i >= 0 && $i <= 100) { echo "iは0〜100"; } else { echo "iは不明"; } でいいのでは?
>>258 switchでcaseが大量になる場合は配列をうまく利用することをおすすめする
function func1() {
}
・
・
・
$case = array(func1(),func2(),func3(),・・・・・func999),
$case[0];
267 :
261 :2009/03/15(日) 22:54:26 ID:???
>264 せめて $case = array('func1', 'func2', 'func3'); call_user_func($case[0]); // $case[0]();でも多分動く にしとけ。 とりあえずそのコードは実行効率、可読性、保守性などあらゆる観点で最低だ。 後者2つについてはこのコードも大差ないが。
ふと思ったんだけど、例えば見栄え良く 改行いっぱい使って、 $hoge = "hoge1" . "hoge2" . "hoge3" ; こうしたのと、単に $hoge="hoge1hoge2hoge3"; ってしたのとでは、 上のような改行いっぱい使った場合のが 積み重なってくると、改行使ってないものよりも 読み込みが遅くなる? 改行やスペースは無視になるとはきくけどなんか不安なのです。
>268 文字列の結合の分遅くなるな、理論上は。 改行も、確かに理屈の上では遅くなる。人間に知覚できる差じゃないけどな。 仮に10000行空行があったとしても、目に見える応答速度差は出ない。 1MB分改行があっても気づかないと思う。 つうか、お前は、ペーパー代を惜しんでウンコした後ケツを拭かなかったりするのか? ゴミみたいな高速化と可読性を天秤にかけるなら、どう考えても可読性を優先すべきだ。
javaだと文字列リテラル同士の結合はコンパイル時にオプティマイズされて 結合された文字列になるんだっけか。 スクリプト言語で拘ってもしょうがないとは思うが、気分的にはやってほしいところではあるな。 APCとかのキャッシュ環境なら差がでるかも知れんし。
「PHPでOOPで書く場合の、helloが出てくるまでの長い一日」 (1)さーって、、、まんず、helloって出すわけだから、 print "hello"; だろ、、、これはまず100%確実、、、 (2)そんで、クラスの宣言せんといかんな、、、 class { } 、、、っと、、、 あ、、、クラス名、考えないといかんな、、、 はじめてのだから、firstでいいか? class first { }
(3) そんで、さっきの print "hello"; を、メソッドの中に入れないといかんのだよな、、、 あ!メソッド名も考えないといかんのだよな、、、 helloを出すメソッドだから、helloでいいか? function hello(){ print "hello"; }
(4) よしよし、、、作業は順調だな、、、 これで、このメソッドを、さっき作った クラスの中に、放り込めばいいのだよな、、、 class first{ function hello(){ print "hello"; } }
(5) これでクラスは完成、、っと、、、 次は、このクラスをnewして、 オブジェクトに代入せなあかんのだよな、、、 $obj=new first();
(6) よしよし、、、 これでインスタンスができたから、 このインスタンスから、->で、クラス内の メソッドにアクセスすればええんだよな、、、 print $obj->hello();
(7) <?php class first{ function hello(){ print "hello"; } } $obj=new first(); print $obj->hello(); ?> 完成、、、と、、、。 カンタンに説明すると、 firstというクラスを定義しhello()というメソッドを定義し そのメソッドの中でhelloを出力する命令を書きnewでfirstクラスの インスタンスを作成しオブジェクト変数に代入しそのできてきた インスタンスからhello()メソッドにアクセスして最終的にhelloを 画面に出すことに成功しました。
>>276 どちらでも実行できるんだけど、なんか問題あるなら
それを解説したページをプリーズ
ちなみに手続型でhelloを出すソースは以下の通り <?php print "hello"; ?>
クラス使えばOOPってわけじゃないべ。
つか全然OOPじゃないわな
>>282 ものの考え方・概念のことだから本質的にはそうだね
ただOOPの核となる継承やらカプセル化をする為にはクラスを使わないといけない
helloを出力するだけにわざわざクラス使うのはPHPではただの冗長
hello出力するだけのただの形ではあるから参考にならないなあ OOP勉強してる人いないの?
>>279 おお、さすが最強PHPw。
ハーディ・ラマヌジャン数を出力するプログラムは、
Cで書いても、実行に数十秒かかる。
perlやpythonに至っては数分以上かかる。
だが、PHPなら、一瞬。むしろ、計算する必要すらない。
<?php
echo "1729";
?>
もちろん、パクリネタだ。
>>285 本気で勉強したいならJavaでやったほうがいいって散々言われてるだろ
オブジェクト指向という考え方を理解するためだけなら
わざわざPHPでやる必要はない
OOPに関するドキュメントの多いJavaでやったほうがいい
PHPでOOPなんてJavaやC#なんかをやってるやつの為にあると思っていい
289 :
nobodyさん :2009/03/16(月) 15:26:16 ID:zNDXWAna
くだらない質問ですがお願いします。 ($a < $b) ? $key = $a : $key = $b; これの意味がちょっとわからないのですがif文で表すことってできますか?
if ($a < $b) { $key = $a; } else { $key = $b; }
$key= ($a < $b) ? $a : $b; 普通はこう書く if ($a < $b) $key= $a; else $key= $b;
292 :
nobodyさん :2009/03/16(月) 15:52:09 ID:zNDXWAna
>>292 上記のような簡単なif文なら三項演算子でもいいと思うけど、複雑なものになると
可読性が落ちるので、その場合は素直にif文で済ませた方がよい
>>292 三項演算子は変数に入れることができる
なので結果を変数に入れたいときとかは便利だが
条件文をかくためだけに使うなら可読性を重視して
普通のif-else文を使ったほうがいい
三項演算子なんてなくてもコーディングできるので
他の人と共同開発なんかの場合は使わないほうがいい
295 :
nobodyさん :2009/03/16(月) 16:34:41 ID:zNDXWAna
296 :
nobodyさん :2009/03/16(月) 16:46:33 ID:TMtB/4sw
オープンな掲示板へのスパム投稿をブロックするにはどうしたらいいでしょうか? メジャーな方法だとcaptchaを入れるんでしょうが、他に方法あったら教えてください。 たとえば、スパム業者(国内・国外問わず)のIPリストなんかはないんでしょうか? よろしくお願いします
>>296 そのリストがあったら既に大手ブログサービス業者は導入して平和になってるはずだよな
>>296 基本的な対策として
本文中の
http://文字列を禁止する もしくは出てくる回数を制限する
(最近は
ttp://からはじめたりドメインからはじめたりするスパムもある )
文字がどういうもので構成されてるかを見る
日本語[あ-ん]が必ず入っていないと駄目とか
[\x00-\x7f]のみの文字列だったら駄目とか
(最近は文章の最後のほうに日本語を適当に入れてくるスパムもある)
スパムをあえて投稿させてパターンを分析し
自分でリストを作成する(IPなり禁止文字列なり)
(IPはできればサーバ側ではじく)
このほかによく見る方法としては
ひらがなに対応するカタカナを入力してもらうとか
(captchaはすでに効果がないので代替手段を)
他の閲覧者にスパムかどうかを判定してもらってJavaScriptで非表示にする
(youtubeなんかで見るパターン)
とかかな
いずれも限界があるので閲覧者に被害が出ないようにだけ配慮すればいいんじゃない?
そういう観点では誤クリ防止に
http://のオートリンクをしないとかが一番効果的
どれもいまいちな方法だな
あなたはスパム業者ですか? はい いいえ ↑これを入力させればいい
2chはどうやってんだろ?
304 :
nobodyさん :2009/03/16(月) 18:04:29 ID:GOOX8xiJ
PHPで効率化を突き詰めていくと、 MVCを考えた、フレームワークのような形になるのですが、 やっぱり皆さんもそうですか?それとも最初からフレームワーク使いますか?
>>298 日本語が入ってないとダメってのはもう古い
日本語スパムははじけないよ
やっぱり、画像認証(ランダムの数字を入力するやつ) しか対処できないんじゃないか? ライブラリも多いし、作るのも難しくないだろ。
>>303 2chは管理に協力してる人間がいっぱいいるから
手動でどうにかなるレベルなんだよ
PHPの初心者用参考書をちょっと読んだだけの初心者です register_globalsをonにするとセキュリティ上よくなく また、PHP6からはonにすることができなくなると聞きました そこで質問なのですが、ハイパーリンクにごとにページの内容を変えたり 処理の内容を変えたりしたい場合は他にどのような方法があるのでしょうか 質問とは関係ないのですがスパム対策で 1 + 2 = [ ] といのを見たことがありますね (数値は画像でランダムでした
>>308 基本的には POST あるいは GET メソッドでクエリを渡して、その値に応じて処理を分ける。
ハイパーリンクでなら GET 。
310 :
nobodyさん :2009/03/16(月) 19:21:10 ID:TMtB/4sw
>>298 たくさんの意見ありがとうございます
カタカナをひらがなにっていうのはいいですね!
キャプチャの文字列をカタカナにするってのは無理なんでしょうか?
スクリプトでは理解できない&日本人にしかわからないような 質問をランダムに生成できればいいんだが 質問と答えがあらかじめ決まってるようなものだとそのうち解析されるし 画像のひらがなをみてカタカナにしろぐらいだとCaptcha解析技術応用すれば 解析したひらがなに対応するカタカナに置き換えればできちゃうし 完全な対策なんてないからどこかで妥協するしかない いろんなことやった上でなんとかして投稿してやろうなんて考える 海外のスパマーなんてそうはいないよ 仮にいろんな対策をした上で変なのが投稿されたらそれは日本人の愉快犯だ というわけでそんな神経とがらせてスパマー対策しなくてもいいんじゃないだろうか
>>310 できますよ
そういうライブラリは探せばあるんじゃないかな?
単に文字を画像に出力するだけなら簡単なんですけどね
画像をゆがめたりする処理が難しいんじゃないかな
普通にCAPTYAいれとけば?
ちなみに2ちゃんがやってるのは、、、 (1)書き込みをしようとしてきたら、クッキーを 受け入れてるかどうかを確認する。クッキーないやつは 書き込みできない (2)書き込みしてきようとしたサーバーに簡易ポートスキャンをかけ、 オープンプロキシでないことを確認する。もしオープンプロキシだったら拒否 (3) プロキシからの書き込みについては、手動で リストを作成して、そのリストにIPが載っていたら、拒否。 こんな感じ。一部だけど。
315 :
nobodyさん :2009/03/16(月) 23:05:32 ID:l8gT672P
セッションを使って、 ログインしないと見れないページを作ったんだが、 画像はどうやって守ればいいんだ?
>296 >297 DNSBL(DNSブラックリスト)でぐぐれ スパムちゃんぷるーが手軽
318 :
nobodyさん :2009/03/16(月) 23:35:54 ID:l8gT672P
>>317 PHPで画像を送出するってことかな?
ぐぐったけど具体的なコードがわからない
2行でおk ヘッダ送信 readfile()で出力
セッションも処理しないとwwwwwwwwww
321 :
nobodyさん :2009/03/17(火) 00:28:16 ID:PIugUbr/
$sql = "SELECT name FROM address"; $res = mysql_query($sql); $row = mysql_fetch_array($res); echo $row["name"]; こうしたらMySQLから1行取得出来ますが、もっと簡略化する方法は無いでしょうか? 特に、結果が1行・1フィールドだと分かっている場合、 mysql_fetch_arrayをして一旦配列に入れるのは不効率な気がしています。
echo (mysql_fetch_array(mysql_query("SELECT name FROM address")))["name"];
>321 SELECT name FROM address LIMIT 1 配列に代入云々は数マイクロ秒とかのゴミみたいな差しかつかない。 こいつは測定可能なレベルで実行性能に影響する。
324 :
321 :2009/03/17(火) 01:11:49 ID:???
>>323 >>321 のようなテーブルにアクセスして、指定値を取得する関数を
作っているのですが、 321のソースでフィールド「name」が異なる場合、
echo $row["name2"];
というように名称を指定して出力しなければいけません。
まぁ、関数を
function dbSelect($fld_name){
echo $row[$fld_name];
}
とすれば良いだけの気がしますが、
何か良い関数があるのかと思い、質問しました。
1からCMS作ろうと思います。 応援よろしくお願いします
がんば〜
実はおれもCMS自作してるけど ネックなのは一度もCMSを使ったことがないことだ・・
CMSを使ったことがない人がCMS作っても劣化品にしかならない
330 :
nobodyさん :2009/03/17(火) 10:44:32 ID:Ib1RB6YL
キーワード自動リンクの仕組みを作っています。 データベースなどに以下のようなデータがあるとします。 id,word 1,日本 2,日本海 3,日本海溝 4,太平洋 これらを辞書として、 ・日本海溝は太平洋側にあります。 という文章に最長で一致するものからリンクを張っていくのですが、 <a href="word/3"><a href="word/2"><a href="word/1">日本</a>海</a>溝</a>は<a href="word/4">太平洋</a>側にあります。 のように、重複してリンクが張られてしまいます。 すでにリンクが張られている言葉の内側にはリンクを張らないようにしたいのですが、 どのような対処法が考えられますでしょうか? PHPで処理する場合の対処法を教えてください。
マッチさせてるコードは?
$words = array( array( 'id' => 1, 'term' => '日本' ) ); 辞書がこんなかんじの配列にあって、 foreach ($words as $word) { str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body); } 辞書は単語の文字数の長い順にソートさせてあります。 実際のコードとは違うのでどこか変かもしれませんが、流れはこんな感じです。 単純に、辞書の配列をforeachさせて、 str_replaceでアンカータグをつけたものに置き換えているだけです。 なので、重複して置き換えられてしまうのは当然なのですが、 対処法が思い浮かばなくて; よろしくお願いします。
すみません、訂正です; × str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body); ○ $body = str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);
334 :
330 :2009/03/17(火) 11:34:31 ID:Ib1RB6YL
335 :
nobodyさん :2009/03/17(火) 11:45:00 ID:PBdJ+iXh
宜しくお願いします。 【OS名】Windows XP 【PHPのバージョン】php4.4.4 【質問内容】 『−』を含んだ文字列を preg_match で検索するとエラーが発生するのでキーワードを preg_quote で処理すると 『ホームページ』が『ホ―[ムペ―[ジ』となってしまいます。 お知恵を貸して下さい。お願いします。
336 :
nobodyさん :2009/03/17(火) 11:48:44 ID:Vq5xUXrn
>>335 mb_internal_encoding('utf8');
mb_regex_encoding('utf8');
337 :
nobodyさん :2009/03/17(火) 11:49:06 ID:qY/TJCjN
たまにGDでjpeg画像を処理した時にエラーが出て何も描かれてないjpeg画像がブラウザに出る時があるんだけど そのエラーを表示しない方法はphp.iniで指定するってのは分かった。 これでエラーは出なくなったわけだが、画像はやっぱり出ない。 どうやらいつも同じファイルを処理した時にエラーになるので 画像ファイル側の問題だと思うけど これをうまく処理する事はできるの? そもそも何でこんなエラーがでるの? 知ってる人 教えてYO!
その画像をうpれ
340 :
nobodyさん :2009/03/17(火) 13:22:05 ID:PBdJ+iXh
>>336 さん。
有難う御座います。
mb_regex_encodingでUTF-8にしてもやはりホ―[ムペ―[ジとなってしまいます。
>>339 さん。
まだ勉強中の為に5への以降は難しいです…
まず検索する対象とキーワードの文字コードを把握できてないと解決できんぞ
4で勉強してから5にうつるより、最初から5で勉強しちゃったほうがいいような気もするんだけど。
4とか過去の汚物なんだから使う価値0
移行ってほど変わらんだろ。さっさと5使え
345 :
nobodyさん :2009/03/17(火) 15:52:24 ID:s4aiV5Ak
質問です。
このサイト(みんなのキャンパス:
http://campus.nikki.ne.jp/ )
のように掲示板の情報を一部だけ閲覧することができ、
登録・ログイン後に情報をある程度投稿すると全ての情報が閲覧できるような
会員制サイトを作成したいと思っています。
WordPressやOpenPNEで色々試したのですがいまいちうまくいきません。
こういうものは、どうやったら実現できるのでしょうか?
よろしくお願いします。
if (未ログイン) { 一部表示処理 } else { 全表示処理 }
CMSで駄目なら何をやっても駄目な気がする とりあえず Wordpress の方なら is_user_logged_in() でログインしてるかどうか調べられるよ
フレームワーク使っているかもしれないけど、 各プラグインは自作しなければいけないからな。 俺も自作システムを作る時にWordpressやらOpenPNEやらを見たけど、 やっぱり「目的の仕様に合った作り方」をしているので、 それらを改造してオリジナルのシステムを作るのは無理があるよ。
350 :
345 :2009/03/17(火) 17:04:11 ID:s4aiV5Ak
みなさんご回答有難うございます。
質問の仕方が悪くて申し訳ありません。
みんなのキャンパス:
http://campus.nikki.ne.jp/ というサイトは登録後ログインしても、
大学の講義情報を3件書き込まないと全ての情報を見ることができません。
このように書き込まないと掲示板の他のページが見れない、といったように
するにはどういった処理が必要なのでしょうか?
よろしくお願いします。
351 :
335 :2009/03/17(火) 17:08:29 ID:PBdJ+iXh
>>341 さんとレスを頂いた皆さん。
お陰で解決致しました。有難う御座います。
出来るだけ早く5に以降するよう努力致しますf^^;
有難う御座いました!
>>350 そこがどんな風な実装をしてるかは知らないけど。
ユーザー情報に「書き込んだ回数」を記録する。
一緒に「全ての情報を見れる権限」もフラグとしてDBに記録しておいて、書き込み回数が3回を越えた時点で true にする。
で、ページを表示するときにその権限を持ってるか持ってないかを判断する。
俺だったら「書き込んだ回数」か「全ての情報を見れる権限」のどちらかしか属性作らないな
>>353 確かに書き込み回数だけでも十分だな、すまん。
355 :
330 :2009/03/17(火) 17:37:21 ID:Ib1RB6YL
>>330 の回答をどなたかお願いできませんでしょうか?
>>355 自分がどうやってるか書いてないよな。推測すると、再帰でpreg_matchでもやってんのか?
まぁ、それはいいや。
単語リストをベースにトークナイザーにかけて処理するのがいいと思うよ。
357 :
345 :2009/03/17(火) 18:00:29 ID:s4aiV5Ak
>>352 さん
>>353 さん、回答下ったみなさん、有難うございました!
2ちゃんねるはじめてだったのですが回答いただけてうれしかったです。
なんとなく方向がわかったので色々やってみます。
358 :
330 :2009/03/17(火) 18:07:06 ID:Ib1RB6YL
>>356 すみません;
>>332 に書いたのですが、IDを出し忘れてしまって・・・
恥ずかしながら、トークナイザーというのをはじめて聞いたのですが、
どういったものなのでしょうか?
PHPには、その機能は備わっているのでしょうか?
wikiのソース参考にしてみたら?
>>330 アルゴリズムの問題だと思うけど、マッチングした文字列をいったん置き直して、展開しなすとかしたら?
日本海溝は太平洋側にあります。
<3>は太平洋側にあります。
<3>は<4>側にあります。
みたく文字列を順次置き直して、あとから <id>をリンクつきのHTMLで展開。
361 :
330 :2009/03/17(火) 19:43:02 ID:Ib1RB6YL
>>359 それだけの力があればそうしたいのですが・・・
基本的な考え方だけでもお願いしたいです。
>>360 おぉ!そういう方法がありましたね。
しかし、元の文章に<1>という文字列が含まれていた場合、面倒なことにならないでしょうか?
元の文章は、ユーザーが自由に投稿できる類のものなので・・・
<<<1>>>のように、括弧を増やしたり、!?!1!?!のように、複雑なものにすれば
出現する確立は減らすことができるのでしょうが、それでも0パーセントではないですし・・・
おっしゃるとおり、PHPに関する質問という範囲を超えているかもしれませんが、
どうかお付き合いお願いしたいです。
キーワードをrsortして順にリンク外文字列に対して処理していけばいい
ユーザの投稿に<1>があったら\<1\>とかにまず置き換えればいいじゃん
そんで
>>360 の処理のあとにもとにもどせばよい
>>330 優先順位が悪い
1,日本海溝
2,日本海
3.日本
の順でループして探索して見つかったら置き換えてbreakして位置を記録
最後に置き換えた位置から同様にして探索
これをEOFに達するまで繰り返す
365 :
364 :2009/03/17(火) 20:10:19 ID:???
ごめんよくよく考えたら非効率だな 忘れてくれ
366 :
330 :2009/03/17(火) 21:04:12 ID:Ib1RB6YL
>>362 リンク外かどうかの判定の仕方がわからなくて・・・
>>360 さんに提示していただいたように、特殊な記法に置き換える方向で行こうかと思います。
>>363 そうでした!一度エスケープのような処理をすればよかったのですね!
・・・これでなんとか解決したように思ったのですが、今度は、辞書に<id>という単語が含まれていた場合に、
問題が発生しました。
たとえば、辞書にこんな感じの単語があると、
id,word
5,<3>
長いものから置き換えるので、
まず「日本海溝」が<3>に置き換えられ、
その後、「<3>」がふたたびマッチしてしまい、
<5>に置き換えられてしまいます。
最終的に出力されるのは
<a href="word/5"><3></a>
になってしまいます。
意外と難しいですね;
>>364 位置を記憶するというのはやってみたのですが、
文字数の長い順に出現するとは限らないのでだめでした・・・;
>>366 そもそも最終的に生成するHTMLにタグじゃない < > を入れてどうする気だ。
テキストとキーワードにあらかじめhtmlspecialchars しておけばいいやん。
368 :
366 :2009/03/17(火) 21:20:04 ID:Ib1RB6YL
>>367 そうでした;;
キーワードもエスケープ処理しておくことでうまくいきました!
おかげさまで、当初の目的が達成できました。
もっと精進します・・・w
レスをくれたみなさん、ありがとうございました!
キーワードは最長一致させるのが原則。 "WEBプログラミング"なら、"WEB"や"プログラミング"より "WEBプログラミング"の方が指定がより明確だから重要度が高いよね。 それに最長一致なら被らない。 処理の重さに関しては、保存時はゆっくり反映で良いので問題ない。 はてダみたいに、外部リンクのサイトのタイトルの文字列まで取得して 投稿を書き換えようとするのは外部サイトの都合で時々タイムアウトしてるけど、 自鯖の中でのリンクの置き換え程度なら、よっぽどキーワード数が多いとかじゃなければ タイムアウトはまず起こらない。 キーワードを使うケースの場合、ROMユーザーが書き込むユーザーより圧倒的に多いし そうでなければそのサービスは成り立たないから、ROMユーザーに対して 内容がキャッシュされてれば投稿時はかなり重い処理でも構わない。
またWikiやはてなみたいなスパムサイトが増えるのか。
371 :
nobodyさん :2009/03/17(火) 23:09:10 ID:whdlEm3/
array('a'=>'b','c'=>'d') を array('a','b','c','d') にする簡単な方法があれば教えて下さい
>>371 foreach( $oldarray as $key => $value ){
array_push( $newarray, $key ); array_push( $newarray, $value );
}
>>371 $newArray = array_merge(array_keys($oldArray), array_values($oldArray));
ああこっちだったわ $newArray = array_keys($oldArray) + array_values($oldArray);
376 :
nobodyさん :2009/03/18(水) 03:57:38 ID:Zcgp4DkA
文字列がintとして妥当かどうか調べるにはどうしたらいいですか?
死ぬほど既出
「intとして妥当」を説明してみろ。
is_numeric is_int のことじゃないかとエスパーしてみる
is_intは型判定だろ
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
>>376 正規表現で調べればよい
if (preg_match("/^[0-9]+$/", $string)) {
妥当
}
>>382 それだとunsigned intじゃ...
負も調べたいってこと? なら if (preg_match("/^-?[0-9]+$/", $string)) { 妥当 } かな
ちなみに指数表記やInfinityまで対応というなら またパターンを増やせばよい
あと厳密にintならPHPの場合何バイトかしらないけど(たぶん4?) その辺も考慮しないといかんかな strlenで32ビット以内かどうか調べる処理とか
strlenは関係ない 2^32を2の補数で表した値の範囲かどうかだな ?2147483648〜2147483647
preg_match("/^-?[0-9]+$/", $string) && $string >= -2147483648 && $string <= 2147483647
$は改行にもマッチするから、D修飾子を付ける それから、0123は整数か?
>>388 厳密な数値かはわからないよね
だってそれだと下のどれでも引っかかるからね
123
-123
"123"
"-123"
つ[:digit:]
質問者があいまいなまま補足してくれないのにこぞって答えなくても
0xa0 だって立派にint型を表現した文字列として妥当といえるよねー
答えるのが簡単だからだろ?
死ぬほど既出だけどな
テンプレ守ってる以上答えてやってもいいだろ いちいちグチグチ言うやつは黙ってればいい
397 :
nobodyさん :2009/03/18(水) 14:23:57 ID:R7u4YHhc
なぜimagecreatefrombmpは無いんですか? デジカメとかだとBMPで出力するカメラも結構有るし需要あると思うけど。 ビットマップからイメージ作れるユーザー関数ありますか?
>>397 User Contributed Notesの一番上
399 :
nobodyさん :2009/03/18(水) 14:47:40 ID:meKzf6DJ
クラス内のメソッドはだいたい何行くらいで収めるのが目安でしょうか?
50行くらい
>>399 画面半分に納めるのはよいプラクティスだって昔だれかがいってた。
スクロールしないと見れないメソッドはクソの匂いがするとも。
>>399 pearのコーディング規約に1行何文字程度に収めるか決めてるから参考に読んでこれば
1行あたりの文字数と メソッドを何行に収めるかの話が 関係あるのか?
掛け軸ぐらいな縦長のモニタだったら余裕だなw
フォントを1ドットにしてもいいぞ
お前は何を言ってるんだ
412 :
nobodyさん :2009/03/18(水) 23:15:59 ID:gf2MXR+O
本運用のリモートのunix系鯖か、 開発のローカルのwinかで、 デバッグ云々用とかで判別するのは if (DIRECTORY_SEPARATOR == '/') { ... で問題なし?
開発環境をunixにしたくなったら詰むな。 それと、Win環境で本番環境同様の状態をエミュレートしたくなった場合も身動きが取れなくなる。 function isDevelopEnvironment() とかをどこかグローバルにアクセスできる場所(グローバル関数か、クラスのstatic関数)に置いとけ。 他の場所からはこの関数で判定するようにしておけば、判定方法が変わっても変更が一箇所で済む。 実装と意図の分離は設計の基礎。 呼び出し側でやりたい事(意図)は環境の判別なのだから、関数名はそうなっているべき。 環境を識別するのにDIRECTORY_SEPARATORを使う、ってのは実装の話で、意図じゃない。 (もっと言うなら、開発環境がWinで運用環境がUnixなのも「たまたまそうなってる」だけの、つまり実装依存な話) で、実装の話だが。 俺ならホスト名を開発環境と本番環境で変えておいて、それで識別する。もしくは設定ファイルか何かに書いておく。 WinとUnixを識別できればそれでいい、ってんなら>412で問題ない。 php_uname()関数の例にもディレクトリ・セパレータでOSを判別するコードが載っている。
>>379 それ。
is_numeric()は"."を許したよーな気がする。
気をつけたほうがいいよ〜
D:\tools\php-5.2.8-Win32>php -r "var_dump( is_numeric( '1.5' ) ) ;"
bool(true)
((string)(int) $string === $string) これはどう?int判定
PHP_OS
>>399 行数っていうのとは違うけど
コメントを書かなくていいくらいに分かり易い
っていうのを目安にするといいっていう考え方もあるね。
コメントで「○○を処理する」とか入れるくらいなら
そのまとまりをprivateなメソッドにする感じ。
まぁ好き嫌いもあるけどねー。
>>285 OOPっていう概念よりも
そもそもプログラミングにおいてクラス使うと何が便利?
って考えたほうが分かりやすいかもしんない。
DIRECTORY_SEPARATORでOS判定なんてどう考えてもスジが悪いだろ 常識で考えて・・
>>414 ctype_digit
でいいんじゃないの、バージョン注意だけど
421 :
nobodyさん :2009/03/19(木) 09:10:09 ID:8+csUcRF
fsockopenのテストをしているのですが、 ローカルのサーバ(localhost)上ではオープンできないのでしょうか? if(!$sock = fsockopen("localhost",80,$errNo,$errStr,10)){ echo "エラーです"; } として開こうとしても、エラーになります。
なんのために$errNoと$errStrを指定してるんだ
423 :
421 :2009/03/19(木) 09:32:30 ID:???
localhostを127.0.0.1にしたら出来ました・・。
425 :
nobodyさん :2009/03/19(木) 11:06:59 ID:GwakzSEQ
【PHPのバージョン】php5.2.8 【質問内容】 クラスのメンバ変数についての質問です。 あるメンバ変数が宣言されたかどうかを調べるにはどうしたらよいでしょうか? 代入はされていないのでissetではダメでした。
get_object_vars もしくは get_class_vars
427 :
425 :2009/03/19(木) 11:16:32 ID:???
>>426 超速でありがとうございます
さっそくテストコードにかかってきます。
is_nullのほうがいいよ
issetのほうがいいよ
h1タグの部分を置換したいです。 もっと、スマートの方法ありますか? (h1の要素は不特定、ない場合もあります。) <?php $file = " <html><body> <h1 id=\"news\" name=\"news\" style=\"size: medium;\">WBC速報</h1> <p>4回裏 2 - 0</p> </body></html> "; preg_match_all('/<h1[^>]*?>(.*?)<\/h1>/is',$file , $match); $tag = $match[0][0]; $title = $match[1][0]; $file = str_replace($tag,"<div>{$title}</div>", $file); echo $file; ?>
訂正 スマートな方法
>>420 ctype_digitってマイナス値の場合falseになるから使えなくね
まだやってんのか。 strval(intval($str)) === $str でいいだろ、面倒くせえ。
>>420 その関数はバグがあるから使い物にならない
>>438 この人前も誰かにつつかれてキレてたよなw
三行でまとめてくれ
お前と同じで内容もロクに読まずに転載してるだけですよ、と言ってあげたい
Diggのトップページやdel.icio.us/popularで表示されたページの概要を訳しているだけなんだから、 せめて自分で確かめてから紹介しようよw >>phpspot
>442
[email protected] はRFCに準拠している。
ドキュモを弾くかはか方針次第だが、このアドレスを弾いてはいけない。
元々phpspotの提示していたコードが役に立たないのは確か。
出力例が「正しいかもしれない」「間違ってるかもしれない」な事からも明らか。
こういうのは「絶対正しい」「間違ってるかも」、もしくは「正しいかも」「絶対間違ってる」のいずれかを返さなければ糞の役にも立たん。
準拠してようがおれはそんなメアドは通さねーぞwwwwwwwwwwwwwwwww
プロバイダのメールアドレスをなるべき通したい場合は別にそこまでこだわる必要なし +\とか記号を入れるメアドなんて普通の人は持ってないだろ
>448 なんというか、ここにも馬鹿が多いな。 「食べやすい大きさに野菜を切るには」という記事に「カレーは野菜が大きいほうが美味しい」とか言ってるようなものだぞ、それ。
それ話が通ってるじゃん
RFCに準拠してさえすればいいってもんじゃない
>>449 プロバイダやgmailを除いたメジャーなアドレスで記号付きのメールアドレスを取得できる所教えてください
453 :
nobodyさん :2009/03/20(金) 11:54:25 ID:MICYHS4W
【OS名】debian etch 【PHPのバージョン】php5.2.0-8 PukiWiki Plus!で「ajaxtree.inc.php」プラグインを使おうとしたのですが キャッシュファイルの作成が正常に行われず色々と調べてみていたところ 下記の部分でよくわからない動きをしていることがわかりました。 (ajaxtree.inc.php 198行目付近) foreach ($pages as $page) { if ($leaf[$page] === false) { plugin_ajaxtree_update_cache($page); } echo $page . " " . $leaf[$page] . "<br>\n"; //debug } 具体的には「plugin_ajaxtree_update_cache」関数が一度でも実行されると その時点でループが終わってしまい配列の残りの要素が処理されなくなってしまうといった感じです。 (関数から戻ってきたあとのechoまでは処理されています) ループ後の「$pages」の値には特に変化が無く、エラーも発生していませんでした。 なぜforeachが途中で止まってしまうのかわからずに困っています。 この場合、どういった原因が考えられるのでしょうか?
454 :
nobodyさん :2009/03/20(金) 11:55:01 ID:uQ1BNnXR
トラックバックやpingの受信機能を作っています。 fsockopenで送信されたPOSTやGETを受け取ると思うのですが、 連続送信防止の処理って入れられるのでしょうか? WEBページのフォーム処理からだと、cookieで制御できると思うのですが fsockopenは出来ないような気がしています。
>>453 display_errors
error_reporting
>>454 内容を比較すればいいのでは?
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>449 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
458 :
453 :2009/03/20(金) 12:31:15 ID:MICYHS4W
>>455 ありがとうございます。
該当するコードに特にエラーなどは発生していませんでしたが解決しました。
配列を関数の戻り値の参照として受け取っていたためおかしな挙動をしていたようでした。
$pages =& plugin_ajaxtree_get_pages();
失礼いたしました。
459 :
449 :2009/03/20(金) 12:38:12 ID:???
docomoの非準拠アドレスを通すかとか、gmailの無限アドレスを通すかとかは、メールアドレス正規表現とは別の問題だろ? 実装の問題じゃない。ビジネスロジックの問題だ。何をどこまで許容するかは技術の問題じゃない。 コーディングする奴が勝手に決めてはいけない問題だし、従って前提条件が提示されないと「正しい」コードなんぞ書けっこない。 何が「正しい」のか、仕様が決まってないんだから当たり前だな。 「正しい」メールアドレスを「RF2822準拠」と定めるなら、PHPSPOTや百式のコードは明白に間違っていて、小飼のコードは正しい。 docomoの非準拠アドレスを許容しなければいけない、とか、gmailの無限アドを拒否しないといけない、という条件下なら小飼のコードは間違っているだろう。 実際、小飼の出力メッセージはちゃんと「RFCに準拠しているか」で出るだろ。 あのコードが解こうとしている判定問題は「RFCに準拠しているか」であって、「一般社会で通用するメールアドレスか」じゃない。 それをてめえらは勝手に問題を取り替えてガタガタ抜かしてるだけなんだよ。これだからPHPerは馬鹿だとか言われるんだ。 RFCに準拠していないアドレスが通ったり、準拠しているアドがNGだったら文句を言うべきだが、それ以外は筋違いだ。
じゃなんで正規表現をblogに書いちゃいけないの?
>>459 RFCに準拠してる正規表現はブログに書いてもOK
RFCに準拠してない現実に即した正規表現はブログに書いたらNG
ってことですね、わかります
>>459 自分ルールを持ち出したのは「PHPer」とか言って悦に入っている人だよな。
っていうか誰この人?
ほとんどの無料有料サービスの登録時にRFCに100%準拠されたメアドは使えない件
._-0-9a-zA-Zぐらいしかたいていのサービス登録では使えない件 何が言いたいかというとRFC必死だな(笑)
弾もPHPERも文末判定に$を使っているが $は行末判定なので最後に改行コードが付いてても通ってしまう。 ちゃんと\zを使えよ 弾&phpspotともどもm9(^Д^)プギャー!
$が末尾の改行コードに一致するのってPHPだけじゃなくて?
preg_matchはperl互換だからそれはないだろ
perlが死滅した、といっても、 ある程度のシェアを取った言語なので、 perlの正規表現の文法は他の言語にも そのまま受け継がれていくわけだな。 つまり勉強したことが無駄にならず 再利用できると。 シェアととると、こういう「いいこと」があるんだよな。
何年か前にperl厨が騒いでた その上でどんなスクリプトでも走るエンジンみたいのどうなったんだよ えーこら
471 :
nobodyさん :2009/03/20(金) 22:34:03 ID:oZ8fGjsV
javascriptがオンかオフかの情報を知りたいのですがどのような方法が妥当かわかりません 以下のような方法も考えたのですがページを移動するか更新しないとクッキーを読めないので困ってます どなたかアドバイスお願いいたします javascriptでクッキーを発行する ↓ クッキーが読み込めたらjavascriptがオン・読み込めなければオフ
>471 処理の順序を考えれば分かるが、無理。
ajaxでやればできるでしょ
そもそも、ページを移動も更新もしてない状態で、サーバ側でJavascript有効かどうか判断しなきゃ いけない状況って何だろう?
その状況を考えられないならこの業界で食えませんよ
ajaxでリクエスト飛んできたらon、飛んでこなかったらoff
>>475 なんで?
Ajax使う前提なら、こんなことで悩まんでしょ。
有効な時にメッセージ出したいなら、Javascriptで出せば良いし、使えない時にメッセージ出したいなら
NOSCRIPT使えばいいし。
トップページへのアクセスだけで、Javascriptを有効にしてるかどうかサーバ側に記録を取りたいとか、そんな感じ?
>477 だとしても、JavaScript経由で鯖にアクセスさせるだけだしな。 PHPではできない、というのは正しい。 まあ、質問が抽象的すぎるんでなんとも言えん。どうして質問掲示板の類の質問者は情報を出し惜しみするんだか。
>>478 それはいいがかり。
おまえだって18世紀にペストにかかったら
「ネズミが運んできた病原菌のせいで感染しました」
とは医者には報告しないはずだ
たとえのほうがわかりづらいってどういうことよ
www
そうか?非常に分かりやすい例えに感じたけど
479=482wwwww
484 :
nobodyさん :2009/03/21(土) 19:33:45 ID:Kz7V9K+/
掲示板を作るのですが共同で作る場合、どのようなシステムを導入するといいですか?
サーバサイドのプログラムが永久ループしたらどうやって止めるんですか? そういうのがあると、レンタルサーバ屋に怒られるんですか?
コンセント抜けばおk
設定次第だがデフォルトは30秒
止めるのは鯖屋の仕事だから好きなだけ無限ループさせておk
とっくに想定済みなんですね。 ありがとうございました。
まぁ鯖潰したら損害賠償だけどな
>>492 ちょっと中級者ぶりたい年頃だけど外してるの図
いきなり本番とかやらなければ普通起こさないと思うけど>無限ループ
よくCMSなんか見てると、全てのファイルの頭に
/**
*
* @package hogehoge
* @version $Id: index.php 0000 2010-01-01 14:00:00Z hogehoge$
* @copyright (c) 2010 fugafuga
* @license
ttp://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
こんなの見かけるけど、これは手動で書いてるんですか?
まさかね?
497 :
496 :2009/03/22(日) 01:35:02 ID:???
ID
498 :
496 :2009/03/22(日) 01:35:33 ID:pWqW8Yq7
また間違えたorz ごめんなさい
すいません。CMSなどはHTMLファイルを生成するんですよね メニューに一項目増えた場合 全部のHTMLページを 書き換える処理ってしてるんですか?
>>500 テンプレートにして動的にしてる場合が多い気がする。
スタティックなHTML吐くのはあまり見たことがない。
>>501 つまりmod rewriteってことですか?
素人ですいません。
mod_rewriteがどう関係あるんだ?
つまりHTMLじゃないけれど、HTMLとしてって方法ですか? 自分はプログラムで呼び出すか、SSIしか思い浮かばないです
プログラムで呼び出せば?
CMSってHTMLファイルを作っていくイメージがあったんです すいません。ただ、require include で呼び出したページは グーグルランクつきにくいです SSIにしてみたところ、それよりはわずかにつきやすかったです CMSがHTMLファイルなら、どうやって外部からメニューを 呼び出しているかわからなかったので
別に動的でもSEO考慮する方法はいくらでもあるべ?
>>507 具体的に教えて下さい お願いします
もっどりライトは厳しい感じがしました 結果が
結果がって?
>>509 グーグルランクのつきが明らかに悪いです(個人の弱小HP)
そしてSSIに変えたところ、3つほどつきました
現在SSIのほうがPHPによる外部ページ呼び出しよりランクがつきやすいです
内部は全く変えてないです
じゃSSIでいいじゃん
(;^Д^) そうですか
そう
ひどい自演を見た><
>>492 =499
自分はマジレスじゃなかったことにしようとして外してるの図
>>492 がマジレスなわけないだろ。初心者は半年ROMれよ
またその話かよ A型はひつこいな
ホントに鯖潰したら、普通に損害賠償だけどな。
初心者(笑)は半年ROMれ(笑)よ
普通は損害賠償とか面倒なことに発展する前に、凍結されたり追い出されたりする Nucleusでアクセス解析いれたら劇重になって、翌日、鯖停止->強制解約になったよ。オレ
粘着すぎる いつもむかむかしてるのかな
邪魔なんだよね〜 これ以上やるなら専用スレ立ててやるからそっちで共食いしてくれ
>>484 バージョン管理システムを導入するといいです
>>496 いくつかのIDEでは/**と入れて改行すると自動で作ってくれます
EclipseのPHPプラグインあたりだと
最初に関数を定義してからその上に/**を入れて改行すると
下の関数を見て引数があったら@param
返り値があったら@returnを生成してくれます
その他については必要であったら自分で記述するか
デフォルトの値として設定可能なものなら設定するしかありません
526 :
nobodyさん :2009/03/22(日) 11:49:05 ID:dhNIUg3n
多次元配列へのアクセスを動的にやりたいのですが、 どうすればいいですか? get_multi_array($array,array('hoge','fuga','poge')) →$array['hoge']['fuga']['poge']を取得 こういう動作をさせたいのです
>>492 =499=521=523=524
立場が悪くなって第三者のフリをしようとしてるけど外してるの図
>>527 邪魔なんだよね〜
これ以上やるなら専用スレ立ててやるからそっちで共食いしてくれ
>>528 無視できない時点で同類だって教わらなかったの?
というより自演バレバレだよ初級者君(笑)
おまえらケンカしろ byひきこもり塾っぽいの
いいんだよ byスレ回り先生
自作自演する若者はためが無い by湯浅誠
自作自演格差社会 〜492のレス能力格差がスレッドを引き裂く
>>528 は、新自由主義者
何でも排除して、格差を作ろうとする
>>529 邪魔なんだよね〜
これ以上やるなら専用スレ立ててやるからそっちで共食いしてくれ
532 :
nobodyさん :2009/03/22(日) 14:07:27 ID:ofSdd/CM
モバイルからなのでID固定できませんが質問です
"<a href='".$value."'>"などとしたときに
htmlspecialcharsだけでは変数にscript:〜が含まれていた場合に回避できませんが
変数の前に"
http://sample.com/ "とURLがあれば問題ないのでしょうか
実際Firefox,safariなどでは普通にnot foundになります
>>526 こんなのどう?連想配列でも多分問題ないと思う。
<?php
function get_multi_array(array $a, array $keys) {
$tmp = &$a;
foreach ($keys as $key) {
if (! is_array($tmp) || ! array_key_exists($key, $tmp)) return null;
$tmp = &$tmp[$key];
}
return $tmp;
}
// 以下テスト
$array =array(
array(
array(1,2,3), array(4,5,6),
),
array(
array(7,8,9), array(11,12,13), array(14,15,16)
)
);
var_dump(get_multi_array($array, array(0, 1, 2)));
こんな過疎板で煽り合って自分が上にしたい奴ってうつ病だろな
>>535 よくぞ見抜いた・・
社会不適合者な俺万歳
537 :
nobodyさん :2009/03/22(日) 17:29:33 ID:XWTxCtFo
test
538 :
nobodyさん :2009/03/22(日) 17:35:05 ID:XWTxCtFo
<form action="log/200902.htm" method="POST"> <input type="text" name="title" value=""><br> <textarea cols="80" rows="7" name="text"></textarea> <input type="submit" value="send"> </form> <?php $title="<h2>".$_POST["title"]."</h2>"; $text='<div class="text">'.$_POST['text'].'</div>'; if ( get_magic_quotes_gpc()) { $title = stripslashes($title); $text=stripslashes($text);} $text = nl2br($text); $log = 'log/200902.htm'; $lock = 'lock.txt'; $lock_fp = fopen($lock,"w"); flock($lock_fp,LOCK_EX); $old_log = file_get_contents($log); $fp = fopen($log,"w"); fwrite($fp,$title); fwrite($fp,$text); fwrite($fp, $old_log); fclose($fp); flock($lock_fp,LOCK_UN); fclose($lock_fp); ?> これ、とあるサイトから引用してきたスクリプトなんですけど、どうやっても$_POSTの値を取得できずにlog/200902.htmの内容が<h2></h2><div class="text"></div>と内容が空になってしまいます。 POSTの値を取得するにはどうしたらいいんでしょう?どなたか知識のある方、ご教授下さい。
とりあえず、<?php の直後で var_dump($_POST);exit;
それと form のアクションプロパティはそれでいいのか?>action="log/200902.htm" 自身に送るなら空白
>>535 よくぞ見抜いた・・
社会不適合者な君万歳
542 :
nobodyさん :2009/03/22(日) 17:52:24 ID:XWTxCtFo
早速ありがとうございます。var_dump($_POST);exit;としてみたのですがarray(0) { }としか表示されません... formのアクションプロパティは合ってるかと思いますが…。log/200902.htmというファイルに書き込みたいので。
formのactionには データを渡すスクリプトのパスを書くんだよ どのファイルに書き込むかとかは、 スクリプトの方で処理すること $_POSTの中身が空の配列ってことは、 データが渡されてないってこと
544 :
nobodyさん :2009/03/22(日) 18:02:21 ID:XWTxCtFo
あ!formのaction属性を空にしてみたらこんな表示が出ました。 array(2) { ["title"]=> string(4) "test" ["text"]=> string(4) "test" } これはデータが渡されてるということなんでしょうか。しかしlog/200902.htmの中身は相変わらずです…。
exitしてるからログは書き込まれないよ それはそうとまずHTMLを理解しないと
546 :
nobodyさん :2009/03/22(日) 18:12:30 ID:XWTxCtFo
すみません…。あまりにも無知でした。exitすると処理が終了するということはリファレンスサイトで見たはずなのに…。恥ずかしいです。 HTMLにも理解がありませんでした。重ね重ね恥ずかしいかぎりです…。
547 :
nobodyさん :2009/03/22(日) 18:17:48 ID:XWTxCtFo
できました!ご教授下さった方のいう通りにしたらlog/200902.htmに書き込むことができました! 本当に無知な私にここまで親身になってくれてありがとうございました。本当に感謝します。 また何かわからないことがあったら自分で調べて、それでもわからなかったらまたこのスレにお世話になると思います。その時はどうか暖かい目で見てやってください…
ログファイルがhtmってのなんだかな〜
549 :
nobodyさん :2009/03/22(日) 18:34:08 ID:XWTxCtFo
はい。htmlにさせて頂きました...
いやそういうことをいってんじゃないんだけど まあいいや
普通はログはテキストのまま、つまり記事本文だけを保持する。 例えば2chは、以下のようなテキスト形式でデータを保存している(本当は違うんだが、まあ割愛)。 nobodyさん<><>2009/03/22(日) 18:34:08 ID:XWTxCtFo<> はい。htmlにさせて頂きました... <> そのログファイルの内容を読み込んで、HTMLとして整形して書き出すPHPで本文を表示させるわけだ。 HTMLで保持しない理由はいくつかある。パッと思いつくのは 柔軟性 例えば、表示されるHTMLを別の形にしたいとか、RSSも書き出したい、という時に再利用しづらい。 記事削除passをつけたいとか、データ保持先をDBにしたいとか、色んな拡張性が失われたりもする。 セキュリティ 本文に<script>alert('うけけけけけ');</script>と書かれたらどうなる?とか。 どちらにせよ対策は必要なのだが、ログをHTMLとして持っていると、どこで対策すりゃいいのかが曖昧になりやすい。 容量 無駄にデカくなる。大した問題じゃないが。
実体参照化してからHTML化すれば?
やり方にもよるかな ログをhtmlとして書き出す掲示板はkentも作ってたな
やり方にもよるって・・ ログをHTMLとして書き出しておくのは 論外といったら失礼かもしれないけど、 明らかに保守性なさすぎじゃないか?
555 :
554 :2009/03/22(日) 23:29:53 ID:???
書き出しておく・・じゃなくて 保持しておくだった
テンプレートとログを分けておいて、記録するときにテンプレートを元にhtml化すればおkだけどな
XMLみたいなもんと思えば、アリじゃないかとも思う。 一件一行で、ヘッダとフッタを除いた状態で保存するなら、そんなに保守性もわるくないと思うが。
閲覧が多くて書き込みが少ないのならhtml化してもいいかな
あめぞうスクリプト見れ
560 :
nobodyさん :2009/03/22(日) 23:49:52 ID:cLpptsUH
現在自分が作成しているPHPとMySQlを使ったログイン認証システムで 穴がないか不安になってきたので、質問します。 要点のみを記載します。 ・ID(又はメールアドレス)とパスワードをフォームに入力して、 MySQL内の情報を照合 ・正しければトークン用のコードを発行し、ユーザ情報を更新 (テーブルのtokenフィールドに作成した値を追加) ・その他、セッション変数にはログイン時のUAとIPアドレスを代入 ・各ページアクセス毎にセッション情報が正しいかをIFで調べる (会員情報編集などの場合、ユーザIDとトークンコードが正しいか照合) ・パスワードはmd5で保存 と言うことをしています。他に「これもしろ」と言うことはありますでしょうか?
ソースを見せるのが早い
ID(又はメールアドレス)とパスワードをフォームに入力して、 MySQL内の情報を照合 (1)この時に、SQLインジェクション対策はされているのか?
md5は破られるのでsha2にしたほうが無難
>>560 そういうしつもんすると
>>562 みたいな質問がきりがなく出てくるのでソース出したほうが早い
>>533 やっぱり再帰ですね
ありがとうございました
566 :
560 :2009/03/23(月) 00:16:39 ID:???
>>562 しています。まず入力値にhtmlspecialcharsをかけて
DBアクセス時にmysql_escape_stringをしています。
ソースに関してですが、莫大な量になるので掲載を控えます。
それにソースや構文の組み立てを聞きたいのではなく、
自分の足りない知識・誤っている知識を指摘していただきたく思い、質問しました。
( ゚д゚)
>>566 >まず入力値にhtmlspecialcharsをかけて
らめぇええええ
570 :
nobodyさん :2009/03/23(月) 02:53:59 ID:RPfvHZ0v
test.txt > 0123456789 test.php > $fp = fopen("test.txt", "r"); > while(!feof($fp)) { > print fread($fp, 1); > flush(); > sleep(1); > } > fclose($fp); test2.php > $fp = fopen("test.txt", "w"); > fwrite($fp, "aaaaaaaaaa"); > fclose($fp); > > $fp = fopen("test.txt", "r"); > print fread($fp, 10); > fclose($fp); test.phpが走ってる最中にtest2.php走らせても test.phpの出力にtest2.phpの書き換えは反映されなかった。 読み出しに関してはルーズな実装してもOKって事?
flushされるタイミングの都合で、たまたまじゃないかなぁ。
良く見たら明示的にflush は、してるのか。 ごめん。
>>560 とは別人で悪いんだけど、気になったからよこやり入れさせて。
>>568 ID(もしくはメールアドレス)は、必ずしもブラウザで表示するわけじゃないから、
・DB内の情報と照合する時 → mysql_escape_string(mysql_real_escape_string)
・ブラウザに表示する時 → htmlspecialchars
みたいにする、ってことでおk?
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'<'って保存されてしまうからっていうことかな。
見当違いだったらすまん。
連続書き込みスマソ
>>573 訂正
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'&lt;'って保存されてしまうからっていうことかな。
そうやって保存されてしまうからっていうのと、 保存されてしまうことによって再利用するとき不便になるからだね
test
>>575 なるほど、いい勉強になった。
ありがとう。
578 :
nobodyさん :2009/03/23(月) 23:45:08 ID:uVBii4+5
サーバを再起動したらapacheのerr.logに PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\PHP\\ext\\php_curl.dll' と同じようなログがたくさん出ます。 でも、該当のファイルは存在します 何が原因でしょうか?
>>573-575 でもさ、ID・メールアドレスを更新する時に<を使う場合ってあるの?
IDはだいたい半角英数字だし、メールアドレスもそうでしょ?
どこでサニタイズするかは勝手だが、 100%ってことはないので出口でサニタイズしろってエロい人が言ってた
サニタイズニダ!
>>578 PHPのバージョンは?
DOS窓から、php -mや、php -iって打っても、エラー出る?
5.2.9-1なら
> Please note that the cURL related function is disabled when open_basedir or safe_mode enabled.
ってニュースが出てたけど、関係しそうなとこある?
すいません。PHP勉強して半年になります。順調に進んでいたのですが echo $a[0] = 'aaa'; echo $a[0][0] = 'news'; こうすると、なぜかバグルのですが、なぜですか?
そりゃechoですからね 出力だけしてくださいよ
すいません、なぜこれでバグになるかわからないんです echo $a[0] = 'aaa'; echo $a[0][0] = 'news'; print_r($a); ↓結果 Array ( [0] => jaa )
>>584 おまいさんは、輪をかけてドアホーみたいだけどな
>>586 バグってないじゃん。仕様通り
文字列の1文字目を置換してる
バグって増すよ <?php $a[0] = 'aaa'; $a[0][1] = 'jjjjk'; print_r($a); Array ( [0] => aja )
>>589 バグじゃないよ。
$a[0]は文字列
$a[0][1]はその2文字目を代入しようとしてる文字列の1文字目で置換せよ
だから、$aは1要素配列のまま。
そんだけ。
>>590 そうなるんですか。知りませんでした。今までやってきて
そんな配列あったんですか 適当に使ってました
自分は初心者なので、配列=箱としか書いてあるものをみたことが
なかったんです。助かりました
>>1-589
変数を array で初期化しないで、いきなり配列として使うのは、どうも生理的・本能的にダメ。
arrayで初期化しても置き換えられますよ 自分初心者だったのでこんなのあったんだとびっくりしました
残念ながら
>>594 が言ってるのは次元の違う話だ
PHP使いは適当がモットーだから気にしなくていい
>>596 そうですか。今まで掲示板とブログ作ったんですか
そのような配列の使い方を書いてあるのがみたことなくて
気になりました
2重配列って呼び方であってる?
2次元配列じゃないよ。そのケース。 単に、1次元配列の要素が文字列で その文字列にstring offsetでアクセスしてるだけ
600 :
586 :2009/03/24(火) 08:34:05 ID:???
難しいなあそんなの出てこなかった 初心者本には、 あくまで 配列は個々の箱だと意識してました データ型を指定しなくていいように、箱も好きに使っていいと 思ってました。
そりゃ初心者本だからだろ
>>589 バグ
>>590 は下のコードと勘違いしてるんじゃないのかね
$str = "12345";
$str[0] = "a";
echo $str; // a2345
>>602 いや、だからそれとやってることは一緒だろ
602が勘違いしてるんじゃないのかね
コンパイラ言語はデータ型ちゃんと指定するから 静的な変数(配列)の型定義というのは 型に応じたメモリ領域を確保するということ(Javaでint型なら4バイトlong型なら8バイト等) PHPはインタプリタだからその辺を動的にやってるわけ この辺をちゃんと理解してないと正しいイメージはわかない 配列は箱ではなく連続したデータというイメージが正しい メモリ上ではそのように配置されている
606 :
nobodyさん :2009/03/24(火) 09:45:45 ID:VfITkfEn
>>582 versionは5.2.3だったと思います
C:\php>php -m としたら、「isqlt09a.dllが見つからなかったため、このアプリケーションを開始できませんでした。
インストールし直すと解決する場合があります」 とアラートが出ました
C:\php>php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_ifx.dl
l' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_oci8.d
ll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pdo_oc
i.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pdo_oc
i8.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pspell
.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_sybase
_ct.dll' - 指定されたモジュールが見つかりません。
C:\php>php -pでも同じ結果です
見つからないって言われてるモジュール、extの中にちゃんと存在してるんですが、、
607 :
586 :2009/03/24(火) 19:06:44 ID:???
誰かプロの人 $aiueo[0] = "a"; $aiueo[0][0] = "aa"; とPHPで入れると置き換わったりする理由を書いて下さい
>>606 記憶違いかも知れんが、依存関係の都合でライブラリを読み込む順序によって、
そんなメッセージがでたかも。
以前、Windows版のPHPってサンプルのphp.iniの順番だとエラーが出てずいぶん
悩んだことがある。
>>606 書いてないから確認しとくけどinclude_pathの設定は?
>>607 置き換わる理由は仕様だから。それだけ。
$a[0] = 'abc';
$as = 'abc';
if ($a[0][0] === $as[0]) {
echo ' $a[0][0] equal $as[0]' . " <br />\n";
}
echo "target :" . $as . " = " . $a[0] . " <br />\n";
echo "offset0:" . $as[0] . " = " . $a[0][0] . " <br />\n";
echo "offset1:" . $as[1] . " = " . $a[0][1] . " <br />\n";
echo "offset2:" . $as[2] . " = " . $a[0][2] . " <br />\n";
$as[1] = $a[0][1] = 'xxxxxxx';
if ($a === array($as)) {
echo ' $a is array of $as' . "<br />\n";
}
echo "replaced:" . $as . " = " . $a[0] . " <br />\n";
echo "offset0 :" . $as[0] . " = " . $a[0][0] . " <br />\n";
echo "offset1 :" . $as[1] . " = " . $a[0][1] . " <br />\n";
echo "offset2 :" . $as[2] . " = " . $a[0][2] . " <br />\n";
>>606 併せて、php.iniで、extension_dirがC:¥PHP¥extになってるか確認してみて。
すまんinclude_path関係ないね
>>606 phpinfo()を実行してみて、php.iniをどこから読み込んでいるのかも確認してみて。
以前、WINDOWSディレクトリと、phpの展開先の両方に異なる設定のphp.iniを置いていて、はまったことがあるので。
始めの頃ありがちw
616 :
nobodyさん :2009/03/24(火) 21:07:22 ID:/zsLtnA9
クラスの数が多くなってきたので(__autoloadで読み込み) 複数クラスを一つのファイルにまとめたら速くなるのではと 思うのですが、それって実際どの程度の効果があるでしょうか? まとめなくても、元来OSがファイルキャッシュするので、 あんまり変わらない気もします
計れば良いのでは?
>複数クラスを一つのファイルにまとめたら速くなるのではと 再利用とか無視して一人で使うんだろうから別にいいとは思うけど それでも基本どおり1クラス1ファイルにしときな
619 :
606 :2009/03/25(水) 00:12:15 ID:4yhBz/QX
みなさんたくさんのレスありがとうございます
>>612 そうなってました
>>614 C:\WINDOWS でした。正しいですよね…
>>608 さんの書いてる原因かなぁ
もうwindowsで作るの自体やめよっかな
>616 ボトルネックがわかっていない状態でチューニングをしてはいけない。 まずは測定。 ファイル数云々というより、__autoload()の呼び出し回数が減ることによる高速化は一応期待できるかな。 マジックメソッドの類は総じて重い。 まあ、DBやファイルへのアクセスがあるならそっちがボトルネックになってるとは思うけど。
>>616 環境いじれるなら、APCとか使うのが良いんじゃないかなぁと思う。
ソースコードは扱いやすい単にしておいた方が、いろいろ良いし。
自分ははクラスはモジュールぐらいの単位の方が扱いやすいんで、
1クラス1ファイルにはしてないけど。
622 :
nobodyさん :2009/03/25(水) 11:16:26 ID:yQlt60AA
PDOで永続接続を使っている場合、prepareを使うと2回目以降の実行が効率化するんでしょうか それとも実行のたびに毎回prepareステートメントを発行するから意味無いんでしょうか
prepareって接続してんの?
624 :
nobodyさん :2009/03/25(水) 15:06:05 ID:Ijn9qBql
htmlspecialchars($var, ENT_QUOTES, 'utf-8') でhtmlエスケープしていたのですが、 アンパサンドがエスケープされるので、 数値実体参照が「&#〜;」という文字列として表示される ということが分かりました。 数値実体参照の場合は生で表示するにはどうしたらいいですか?
出力するときに&に置換すればいいじゃん
フォームの処理でmethodがpostの場合、 一度submitで送信した後、更新ボタンを押すと 再度送信するようなアラートが出ますが、 これを出さないようにする方法はないでしょうか? header関数で送信元のページにリダイレクトして戻す方法以外で教えて下さい。
627 :
626 :2009/03/25(水) 16:47:05 ID:7ip+uIiL
すみません、ID隠してました・・・
>>626 ブラウザの仕様なのでPHPでどうこうできる問題じゃない
629 :
nobodyさん :2009/03/25(水) 19:52:08 ID:Ut4OfJaE
俺のマシンはwinXPの32ビットで4Gのメモリを積んでます。 システムのプロパティで見ると3.25GB認識してるのですが PHPでどんなに重い処理をしてもタスクマネージャで見ると700MB位しか使っていません。 PHPのメモリリミットは-1の無制限にしてるのに何で? もっとメモリ使ってくれたら速くなりそうなんだが。 スペックはアパッチ、PHP5
メモリ使ったら速くなる?
>>626 「リロード対策」というキーワードでググると
情報が出てくる。
だが、自分には複雑すぎて理解できなかったが。
633 :
nobodyさん :2009/03/25(水) 21:30:14 ID:POBIuYee
まずJavaScriptの基礎から学ぶといいかと
>>629 画像データをメモリ上に読み込んだりしない限り
そんな使うことはないだろ
重い処理なんていってもPHPの場合たかがしれてる
>>625 そうですね
そもそも&までエスケープする仕様はやりすぎのような・・
2chでも&はエスケープしてないし。googleも。
>>636 xmlデータにおいては、&は実体参照必須だけどね。
>636 気に食わないなら文句言ってないで自分で実装すりゃいいじゃん。 単純に置換するだけだから、str_replace一発でできるぞ。 俺はやりすぎとは思わないな。入力文字列をそのまま画面に出力したいなら、&の置換もしたほうがいい。
639 :
nobodyさん :2009/03/26(木) 00:25:15 ID:l1PHOXdz
数値を0.5刻みでフォーマットしたいのですが、 何かスマートな方法はありますでしょうか? (例) 1.0以上1.5未満 => 1.0 1.5以上2.0未満 => 1.5 2.0以上2.5未満 => 2.0 よろしくお願いします。
>>638 安全にこしたことはないですが、今回は実体参照を頃されてしまうのが問題なので・・
それにしても、エンコードを意識せず、単に置換したらいいだけなんですか?
だとしたら、htmlspecialcharsのエンコード指定は何に使われているんだろう
644 :
nobodyさん :2009/03/26(木) 01:05:32 ID:fG8U3yBv
MySQLのSQL文のWHEREを $where_ary = array("id"=>"1","name"=>"あああ"); foreach($where_ary as $key=>$value){ $array[] = $key."='".$value."'"; } $where = join("&",$array); と言うように連想配列を使って生成しています。 上記のようにすると、変数に値が入っている場合は大丈夫なのですが、 MySQLの関数(NOWやDATE_FORMATなど)を使いたい時、使えません。 かといって値の部分に関数を記述しても文字列となります。 もっと効率よく生成するには、どのようにすれば良いのでしょうか?
>>642 指定はできるけど、何も使われていない、って情報が
どっかのブログに書いてあった
648 :
644 :2009/03/26(木) 02:06:29 ID:???
>>646-647 これは非常に参考になります。
実際に自分もSQL文の生成にはクラスを使っているので
Zend Dbを参考に、独自の仕様にしてみます。
649 :
nobodyさん :2009/03/26(木) 11:39:12 ID:p1YkL4wy
WindowsにCLIでインストールされたPHPでphp -a ではなく、 ある程度インラインで入力してからまとめて実行したいのですが、 どうすればできますか?
651 :
nobodyさん :2009/03/26(木) 18:55:54 ID:JIscrcVE
phpで、「何時間毎に」とか、「何月何日に」とかいう指定で、プログラムを走らせたりメールおくったりするにはどうすればいいでしょうか?
>>651 それか、そのファイルに対する最終アクセス時刻を記録しておいて、
「前回のアクセスは3日前だな、、、
だったらよし、今回は3日分の処理を一気にやればいいんだな」
とかってプログラムで判断させて、アクセスするたびに
その処理を実行するとか。
もちろん、この場合、アクセスがなければ処理も実行されない。
Windowsだったら、タスク スケジューラ それがUNIXのcronと同じ。
クソサイトの宣伝すんなや web cron
すぐ吠えるDQNって・・・どこまで底辺なんだよ
658 :
nobodyさん :2009/03/26(木) 20:59:43 ID:JIscrcVE
ありがとう、普通にcronすればよかった、トンクス
660 :
nobodyさん :2009/03/26(木) 21:23:14 ID:ih4lRG32
PHPのソースを読んでコメントを抽出する正規表現を書きたいのですが どうにもうまくヒットさせることができません /** */ */ の時に長い方がマッチされてしまいます どう書けばいいですか?
"!/\*(.*?)\*/!s"
>>661 できました!ありがとうございました。
*?で最短にマッチさせられるんですね
663 :
nobodyさん :2009/03/26(木) 23:16:05 ID:46RAjvuH
fgetcsv関数って基本的にwhileとセットで使うの?
retunr値が配列なだけだろ
665 :
nobodyさん :2009/03/27(金) 07:08:11 ID:viybN2w6
symfonyにあるような、 ディレクトリを再帰的にさらってクラスをリストアップする機能が欲しいのですが どうしたらいいですか? PEARのPHP Parserを使ってみたのですが エラーが出まくって使い物になりませんでした
667 :
nobodyさん :2009/03/27(金) 09:19:56 ID:DtOzsPN+
rename関数でフィアルを移動するプログラムを書いています 移動先に同名のファイルがある場合に上書きさせたいのですが 一度unlinkしてからrenameしないと駄目なのでしょうか?
うん
>>666 こんな便利そうなものがあったとは!
まさに欲しかったものです
ありがとうございました
670 :
nobodyさん :2009/03/27(金) 15:35:49 ID:LbT/oMC/
ただ今MVCにてアプリケーションを作成していて モデル部分にデータベース関係の処理(selectやdelete)を全てまとめてますが フォームの項目チェックなどのバリデーション関係は モデルではなくコントローラーに記述するべきですかね?
>670 MとCならばC。Cからバリデーション専用クラスを呼び出せ。 ただし、Cにベタ書きで実装するのはオススメできない。Visitorパターンで実装するのが割と良く見る形。 バリデートはほぼ全てのフレームワークに存在する機能なので、おとなしくフレームワークのマニュアルを読んで構成をパクったほうが速いけどな。
バリデーションがC??
画面やテーブルごとにチェックする項目が異なるのに バリデーションがCはありえない
674 :
nobodyさん :2009/03/28(土) 06:25:24 ID:xuBHT5om
newしたオブジェクトを変数に代入せずにメソッドを呼びたいのですが そういう書き方ありますか? {new Hoge()}->method() みたいなイメージです
>>676 お前、馬鹿だろ
前のレスで完結してるのにわざわざくだらん横槍を入れる必要はない
静的メソッドしか呼び出せないじゃん
>>676 じゃないが、
>>675 は別モンだと思うけどな。
>>674 は何でそんなことしたいんかナゾだけど。目的も書くべきだろ。
ただの興味ということなら、それはそれで良いけど。
というか何の意味があるんだろう
681 :
nobodyさん :2009/03/28(土) 12:52:45 ID:0oeFWAvW
マニュアルを見てもいまいちわからないのですが $a = 2; $b = $a * 2; echo $b; $a = 4; echo $b; 期待する結果は48ですが実際は44になります。($bには2行目の結果が入ったままってことでしょう) 2行目を$b = &$a * 2;のようにすると24になります。(*2は無視?) 期待する結果を表示するにはどのように記述すればいいのでしょうか。 PHP5.2.6
>>681 言いたい事は理解できた
$b は常に $aに入れた値を2倍にする変数にしたいという事だな
2行目の $b = $a * 2 は $bに$aの値を2倍した値を入れるという命令だ
だから2行目では$bで$a(2)*2で4が入って3行目で4が出力、
4行目で$aに4を代入しているが5行目では$bは変化無しの4が表示されるから44となる
そして $b =& $a * 2 は変数の参照という事になって $b に入れた値は $a にも反映されるという事だ
2行目で変数&bは$aを参照しているとしているから3行目で2が表示されて
4行目で$aに4を入れているが$aと$bは参照の関係にあるから$bは4となり24となる
変数でそんな事が出来るか記憶を辿ってみたが…出てこない
件を解決する簡単な方法は関数を作ることだと思うんだが?
>>681 掛け算の結果にまで参照変数を反映させるのは無理。もう一回掛け算するしかない
$a = 2;
$b = $a * 2;
echo $b;
$a = 4;
$b = $a * 2;
echo $b;
684 :
nobodyさん :2009/03/28(土) 14:30:41 ID:jCCBzDpK
pChartを使ってレーダーチャートを描いています。 デフォルトでは縦軸にラベル(目盛?10、20、30...など)が表示されるのですが、 これを表示しないようにするにはどうすればよいのでしょうか? 公式のドキュメントを読んだのですが、わかりませんでした。 どなたか分かる方がいましたら、よろしくお願いします。
685 :
681 :2009/03/28(土) 15:12:28 ID:0oeFWAvW
>>682-683 ありがとうございます。
変数のみでは求めることは無理なんですね。関数で処理することにします。
多分681がイメージしているような、「$aを2倍して返す処理」自体を$bに変数として格納するような仕組みはクロージャという。 関数をその場で組み立てるイメージだな。普通に関数を使う場合と違い、「2」の部分を$bの生成時に動的に組み込める。 JavaScriptやRubyでは可能、JavaやPHPでは不可能。PHPでは次のバージョンには盛り込まれる見込み。 これもまあ、関数を作っているわけだけど。 クラスを使ったりグローバル変数を使ったりしていいなら、今のPHPでも同じ処理は一応可能。
687 :
nobodyさん :2009/03/28(土) 16:48:33 ID:y1nm6eda
POSTされた各フォーム毎の項目チェックをする時に、 $_POSTを直接チェックするのは何か問題がありますか? 例 if(!isset($_POST["name"])){ echo "未記入です"; } それか全て一旦POSTを変数に代入してチェックした方がいいですかね?
まったく問題ない
689 :
687 :2009/03/28(土) 17:25:52 ID:???
>>688 返信ありがとうございます。
なんとなく自信がなく聞いてみたんですが安心しました。
ありがとうございました。
このスレを見ている人はこんなスレも見ています。(ver 0.20) 【ショタ】3次専ショタスレ 12【女装・美少年】 [Download] このスレに変態がいる!!
phpの関数名でググった時 公式のドキュメントじゃなくて phpspotのアフィドキュメントが上位に来るのがむかつくんだけど どうしたらいい? googleで除外urlを指定できたらいいんだけど
GOTO文wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
GOTOを否定する奴は例外も使うなよ
gotoよりはfinallyが欲しかったねぇ。 なんか都合があるんか知らんが。
gotoってどういうときにつかうの?
帰ってきてほしくない時
人生をやり直したいとき
701 :
nobodyさん :2009/03/29(日) 13:21:29 ID:EDw1f4T+
define("TEST",realpath(".")); という定数があったとして、TESTの中身が「/home/test/public_html」だとします。 通常は、定数指定して include_once(TEST.'/test.php'); としてディレクトリ指定代わりに出来ますが、 定数の中身で表示する事って出来ませんでしょうか?上の例で言うと include_once('/home/test/public_html」'.'/test.php'); と言うように書き出せればと思っています。
表示ってどこに?ソースコード中に?
703 :
701 :2009/03/29(日) 13:29:17 ID:???
>>702 fopenでファイル作成する時に、その出力側のファイル上に
include_once('/home/test/public_html'.'/test.php');
という形で記述されて欲しいのです。
意味が分からない fopenでtest.phpを作成するってこと?
fopenはファイル開くだけだろ。PHPとしては動かないよ PHPスクリプトをファイルとして開く理由がわからんが
706 :
nobodyさん :2009/03/29(日) 20:07:08 ID:g6t/L+Oe
707 :
nobodyさん :2009/03/29(日) 20:07:18 ID:A+4tAAtu
配列で存在しないキーにアクセスするとnoticeが出るはずですが、 以下のようにすると出ません。 これは何故ですか? error_reporting(E_ALL | E_STRICT); class Hoge { protected $_value = array(); public function & getEntity($key){ return $_value[$key]; } } $hoge = new Hoge(); var_dump($hoge->getEntity('no_key'));
return $this->_value[$key]; でした 結果は同じですが
参照だから。
リファレンス返してるからだろ
リファレンスだと何故noticeが出ないのですか?
リファレンスって何か知らんで使ってんの?
>>711 参照を張るとzvalが増えて変数を定義したのと同じことになるからな。
計算機の基礎だと思うが。
>>696 強盗みたいだから否定してるのであって例外は問題ない、というのが今の反GOTO派の主流
715 :
nobodyさん :2009/03/29(日) 23:05:06 ID:lmZMeLkn
【OS名】CentOS 5.1 【PHPのバージョン】php5.16 【連携ソフトウェア】mysql 【質問内容】 print'<tr>'; while ($row = mysql_fetch_object($res)){ print'<td>'."$row->NAME".'</td>'; } MySQL から 特定のフィールドを取得し,HTML のテーブルに5列ずつ表示しようとしております。 5列毎にprint'</tr>';を挿入して テーブルの行数をかえたいのですが,どのようにすればよろしいでしょうか? 【求める結果】MySQL テーブルのの行数が8行の場合 <tr> <td>NAME1</td> <td>NAME2</td> <td>NAME3</td> <td>NAME4</td> <td>NAME5</td> </tr><td> <td>NAME6</td> <td>NAME7</td> <td>NAME8</td> </tr> お手数ですがよろしくお願いします。
pager?
>>713 なるほど、参照を張ると変数定義と同じになるんですね。
雑だけど。 $i = 1; while ($row = mysql_fetch_object($res)){ print'<td>'."$row->NAME".'</td>'; if($i == 5){ print'</tr>'; $i = 1; }else{ ++$i; } }
>715 HTMLマークアップが不正な件。 8個の場合、2行目3列目までで終わるが、余った2セルはどう埋めるんだ? >718 <tr>がない。
720 :
715 :2009/03/29(日) 23:39:03 ID:lmZMeLkn
ご回答ありがとうございます。
>>718 を参考にして,
$i = 1;
while ($row = mysql_fetch_object($res )){
if($i == 1){
print'<tr>';
}
print'<td>'."$row->NAME".'</td>';
if($i == 5){
print'</tr>';
$i = 1;
}else{
++$i;
}
}
としてみました。
>>719 の件については,とりあえず暫定的に MySQL 内の行数を5の倍数にしておきます。
皆様ありがとうございました。
721 :
nobodyさん :2009/03/30(月) 05:37:45 ID:Sq1DK82P
DBなどすべてUTF-8で構築しております。 そのうえで、xmlWriter()をつかって「EUC-JP」で XMLを書き出したいのですがどうしたらよいのでしょうか? 単にstartDocumentでEUC-JPを指定するだけでエンコードを変更できるのでしょうか? Firefoxでは表示され、safariだとエラーになってしまいます。 $writer = new xmlWriter(); $writer->openMemory(); $writer->startDocument('1.0', 'EUC-JP'); $writer->startElement('root'); (略) $writer->endElement(); $writer->endDocument(); return simplexml_load_string($writer->outputMemory(TRUE)); ちなみに各Directiveの値もメモしておきます。 mbstring.http_input auto mbstring.http_output pass mbstring.internal_encoding UTF-8 mbstring.script_encoding no value ※もうひとつのスレッドでは答えがわからずじまいで、 どうしたらよいかヒントだけでもつかめたらと思います。 どうぞお願いいたします。
マルチ乙
723 :
nobodyさん :2009/03/30(月) 12:12:19 ID:ObvykTsh
スクリプトの仕組み解らなくてもOSのファイル検索くらいは使えるだろ
725 :
nobodyさん :2009/03/30(月) 12:28:05 ID:ObvykTsh
OSのファイル検索? 実際にサイトにアップして表示させてみました。 そしたらリサイズされた画像が表示されたんですが サイトのどこをみても画像が増えた形跡がありません。 リサイズした画像を別に保存するわけではないのですか?
いやだからファイル探したいならファイル検索すればいいじゃん
727 :
nobodyさん :2009/03/30(月) 12:49:44 ID:ObvykTsh
検索したくても、どんな形式でどんなファイル名で保存されてるかわからないので 画像のアドレスをみても show_image.php?filename=sample.jpg&width=250&height=250 と書いてあるだけなんです
別に保存されてないんじゃねーの?
これしてねーんだろ $thumb->save('path/to/file.jpg',80);
730 :
nobodyさん :2009/03/30(月) 13:13:48 ID:ObvykTsh
あ、それしてないですね それをしないとただ大きい画像を縮小してるだけで意味ないんでしょうか?
サムネで表示しただけで保存されるほうがうっとうしいわ
っということは、大きい画像を元に サイズも容量も小さくして表示ができるってことでいいのでしょうか。 サムネイル画像の保存をせずに
733 :
nobodyさん :2009/03/30(月) 14:28:36 ID:Nai97eUH
頭がこんがらがってしまったので質問させて下さい。 データベースを用いてアプリケーションを作る際 例えば該当するIDを選んでupdate、deleteする時に、 該当するIDがある時は正しく削除され、削除されました。 とメッセージを返すんですが何らかの形で該当しないIDが 投げ込まれた時は一般的にはどのような処理をされていますか? まず該当するIDがあるかselectで調べて、ある場合はupdateもしくは deleteで処理みたいな形ですかね? アドバイスよろしくお願いします。
それでいいよ
736 :
733 :2009/03/30(月) 15:12:04 ID:???
>>734-735 返信ありがとうございます。
これまでなんとなくしか理解できてなかったのですが
今スッキリしました。
本当にありがとうございました。
737 :
nobodyさん :2009/03/30(月) 18:45:52 ID:Gjy/ZAJ6
【OS名】Ubuntu 8.10 【PHPのバージョン】5.2.6-2ubuntu4.1 【連携ソフトウェア】Apache/2.2.9 【質問内容】 PHPをさわり初めて一日目の初心者です。 header ( "HTTP/1.0 404 Not Found" , true , 404 );で、.htaccessで指定した404エラーページを 表示させたいのですが、ブランクページになって表示されません。 確かに404エラーページはファイル自体が存在していない場合のみ表示されますので、Location:で 存在しないファイルにリダイレクトさせて見たところ、見事404エラーページが表示されました。 しかし、この方法はアドレスが変更されてしまうので、できればそのPHPのアドレスで、404エラー を表示させたいのですが、何か方法はございませんでしょうか。 よろしくお願いします。
クラスについて質問です。
ttp://www.m-fr.net/study/object/object04.html このサイトで、
>で、こうします。
>
>obj = new 三角クラス;
>適当な変数 = obj->get_1辺の長さ(); // データの取得
>obj->set_1辺の長さ(適当な値); // データの設定
とあるのですが、下の二行は順序が逆の方がよいのでは?と思いました。
setしてからそのsetした結果得られる値をgetする、みたいに。
その方がしっくりくるというか・・
もしかしたら、何か理由(もしくは自分の勘違い)があって、
getをまず書いておいて、そのsetする一行を書く、という形式にしてるのか
よくわからないので、教えていただけないでしょうか
よろしくお願いします。
2行目で得た値を3行目で使っているわけではないと思うぞ? getとsetの別々の事例かと あとスレタイ
741 :
nobodyさん :2009/03/31(火) 10:26:43 ID:MdY2FCLh
WindowsXP上で開発を行っているのですが、 Windowsの絶対パスでrequireで読み込むとエラーになります。 require_once("C:\htdocs\test.php"); ↓ failed to open stream: Invalid argument どうしたら読み込めるようになるのでしょうか?
echo "C:\htdocs\test.php"; やってみそ
>>683 今コード用意しますのでちょっと待っててくださいね
アンカ間違えましたね^^;
>>681 さんおすきなほうどうぞ
その1
function cale($a,$b) {echo "<p>" .($a * $b). "</p>";}
$a = 2;
$b = 2;
cale($a,$b);
$a = 4;
cale($a,$b);
その2
function cale($a,$b) {echo "<p>" .($a * $b). "</p>";
}
// $aと$bはそれぞれ別の値を持てる
$a = 2;
$b = 2;
$cale($a,$b);
// $aと$bは常に同じ値になる
$b = &$a;
$a = 100;
cale($a,$b);
$a = 5;
cale($a,$b);
>>737 あなたのやろうとしてることはおすすめできない
>>737 アパッチ「俺の仕事はもう終わってんだからバックパスすんな」
748 :
nobodyさん :2009/03/31(火) 15:08:08 ID:H7khy467
+食べ物 ++りんご ++バナナ ++ぶどう ↑の4行を↓のようにhtmlタグとして出力したいのですが wikiみたいなことがやりたいのですがどなたかヒント頂けないでしょうか? <ul> <li>食べ物</li> <ul> <li>りんご</li> <li>バナナ</li> <li>ぶどう</li> </ul> </ul>
wikiのソース見ればいいのでは?
>>749 HTMLソース見てもしょうがないだろw
>>749 そんなんで片付くならこのスレが82代まで行かないでしょw
答えてやればいいじゃんwww
752 :
nobodyさん :2009/03/31(火) 15:27:12 ID:qal8dqXu
>>738 ,745
ありがとうございます。
>>746-747 本当はファイルが存在しているのに無理矢理サーバーにファイルが存在していないことにして、エラーページを表示させるところが
でしょうか。それとも、「header ( "HTTP/1.0 404 Not Found" , true , 404 );」がおすすめできないのでしょうか。
もし、そうであれば、「header("HTTP/1.0 301 Moved Permanently") ;header("Location:
http://www.example.com/ ") ;」
などのリダイレクトであれば大丈夫ですか。
753 :
nobodyさん :2009/03/31(火) 15:27:13 ID:WkuOnscP
【OS名】TurboLinux
【PHPのバージョン】4.3.11
【連携ソフトウェア】Apache2
【質問内容】
auto_prepend_fileで指定したファイルが動いてくれません。
.htaccessで、「php_value auto_prepend_file "ap.php"」と記述しました。
ap.phpの中身は「<? echo("test"); ?>」です。
これで
http://hostname/index.phpを開くと 、
画面上部に「test」と表示されることを期待しているのですが、
TurboLinux + PHP4.3.11のサーバーでは実際は何も表示されませんでした。
もうひとつUbuntu + PHP5.2.4のサーバーがあるのですが、
そちらに同様のコードを設置したところ、意図したとおりに動きました。
何か設定の問題だとは思うのですが、何が問題なのか分からずに困っています。
ひとまず以下のことを試しました。
・phpinfoを確認 ⇒ auto_prepend_fileのLocal Valueは「ap.php」になっている
・auto_prepend_fileの設定をわざと"ap2.php"にした ⇒ ファイルが読み込めないエラー
・ap.phpの中身をわざと文法エラーにした ⇒ 何のエラーも出ない(display_errorsはon)
・ap.php、index.phpの両方でWarningが出るようにした ⇒ index.phpのWarningのみが表示される
・ap.phpの一行目(<?〜?>の外側)に「aaaaa」を追加 ⇒ 何も表示されない
どうもauto_prepend_fileでap.phpを読み込んではいるものの、
ap.phpのコードが実行されていないようです。
この現象について分かる人がいらっしゃいましたらご教示下さい。
>>753 >ap.phpの中身は「<? echo("test"); ?>」です。
<?使えるなら<?=使えよ
ていうか<?phpって書く方を推奨
>>748 質問に対する答じゃないけど、HTMLは
<ul>
<li>食べ物
<ul>
<li>りんご</li>
<li>バナナ</li>
<li>ぶどう</li>
</ul>
</li>
</ul>
こう書いた方がいいと思う。
そこまでして1行にして何のいいことがあるんだろう
余計な関数が増えることには何の抵抗もないのかw
一時変数が(複数の場所で)増える事と関数が増える事のトレードオフなら、俺なら関数を増やす。 このためだけにgetInstance()とかfactory()とか定義したら、関数増やすよりタチ悪いしな。 ただ、一般的な書き方じゃないので、ref()の定義を探さないと読めない=コードの可読性が落ちるのが難点。 JavaScript界の$()みたいに、一般的なハックになったらアリかな。
他言語でできるのにPHPでできないのがむかつくんだよな
オブジェクトの基底クラスにstaticなnewが実装できたら Hoge::new()->doSomething(); ってできるのにな
singletonでいいじゃん
一行にしたいって要求に対して、singleton提案するやつw
>>761 いっしょに仕事したくないタイプだわ。なんだよrefって
メソッドチェーンがやりたいだけだろ
誰が?
俺!
singletonはウンコすぎ。singleton依存症は治る病気だから通院したほうがいいぞ 1行で書きたいって理由だけでstaticなクラスメソッドを増やすのは流石にナシだろ だいたい1つや2つならともかく、そういう書き方がしたくなるようなJavaっぽい書き方をしてたら抽象データ型なんて死ぬほどできるわけで そういうクラス全部にstaticメソッド定義すんのかって話になる。継承も使えないし コンストラクタが引数を取るような場合さらに面倒くせえしな まあ、そもそもJavaっぽい書き方なんかするなよ、って言うのが多分正解だけどな $tmp = new Hoge(); $tmp->fuga();でいいだろ 使いもしない一時変数が増えるのがキモいって気持ちは分かるが
772 :
nobodyさん :2009/04/01(水) 07:15:56 ID:zGetu19r
ファイルをダウンロードできるWebアプリがあって、IE8で保存するフォルダをゆっくり選択してると サーバ側のPHP(5.2.6/Windows)がタイムアウトしちゃうんですが、そういうもんなんでしょうか。 タイムアウト伸ばすしかないのかなぁ。 ファイルが壊れるだけで、一見したところ気がつかないのが、またいやらしい。
てか、singletonは全く別次元の話だろ
>>771 ひとつひとつのクラスにstaticメソッドを実装するってことではなく
rubyみたいにすべてのオブジェクトの先祖になるクラスにstaticを実装するって意味。
今でもrunkit使えば可能なのか、どうか知れないが、
標準で出来たらいいなぁ
775 :
nobodyさん :2009/04/01(水) 08:25:46 ID:wwrEQ3GF
WindowsXPで開発しているのですが、 echo realpath("."); とすると、C:\Program Files\Apache Group\Apache2\htdocs のように\が付きます。これを/に置換すれば良いだけでしょうが、 最初から\ではなく/にして、ディレクトリ名を取得する方法はないでしょうか?
>>771 じゃsingletonじゃなくて普通にインスタンス返すメソッドでいいじゃん
レンたるサーバーなのでMysqlのmax_connectionを増やせまえん。 たまにMysqlへの接続数が多すぎてエラーになります。 そこで、 if(){ 通常通りMysqlへ接続} {接続エラー時の対処} こんな感じにしたいと思ってるんですが、いい関数ありますか?
>>771 でいいだろ。気持ち悪いコードやメソッド増やしたいやつ多すぎ
そもそも、newしてメソッドを一つだけ実行ってのは設計がダメだな。 staticで十分か、コンストラクタに仕事させすぎ。
>>777 こっちのほうおすすめ
function errorMysql() {
エラー処理
exit;
}
if (!接続) errorMysql
例外使えよ
最近書き込み減ったに 貴様らなにしてんのかね
もう一つの某巨大掲示板に移動したんじゃね?
>>785 PHPの仕事を他の人に任せてコーディングの仕事するようになった
>774
絶対言われると思った。俺もそれは考えたが、5.3.0より前のPHPでは無理。
親クラスで定義された静的メソッドで、子クラスのインスタンスは生成できない。つまり
class Parent{
static function getInstance(){
//do something
}
}
class Child extends Parent{}
とあった場合、Parent::getInstance()の実装がどんなだろうと、Child::getInstance()がChildのインスタンスを返すのは不可能。
Childというクラス名すら取得できない。
>780
{ new UrlString("
http://pc11.2ch.net/test/read.cgi/php/1236532468/ ") }->domain();
コンストラクタによる依存性注入をしてる場合も、newしてすぐメソッドを呼ぶだけでじゅうぶんな事がある。
引数なしのコンストラクタならばたいていの場合不要ってのは同意。
791 :
nobodyさん :2009/04/02(木) 09:51:30 ID:ij3728yl
ソース見りゃ分かんべ
793 :
nobodyさん :2009/04/02(木) 10:35:42 ID:ij3728yl
>>792 いやいや、、、
まだそこまでレベルいってないですよ
だからあなたが代わりに見て判断してください
じゃレベル上げろ
長い文と難しい単語(音節のたくさんある)の割合で計算してるみたいだから、 原理的には日本語でも計算は可能だろうけど、日本語ではMecabとかないと大変だし、 多分計算式に定義されてる係数は日本語の場合を考慮していないので、 信頼出来る結果のためには自分で文献にあたるとか実地調査して決定する必要があるべ。
796 :
nobodyさん :2009/04/02(木) 11:12:51 ID:CfxT7le3
【OS名】windows xp home edition 【PHPのバージョン】php5ぐらい 【連携ソフトウェア】mysql 【質問内容】 フォームのセレクト項目で悩んでいます。 form.phpを表示させるとき、セレクト項目を mysqlから取り出して表示させているのですが (idとその名前) セレクト項目が4つもあるので、何か一気に取り出す方法が あったりするのですか?それとも、一個一個4つのセレクト用に select genre_id,genre_name from genre; (genreはジャンル) というふうにするしかないですか?
797 :
nobodyさん :2009/04/02(木) 11:30:18 ID:4VqTVZ/0
mysqlの勉強をしてます 以下のようなデータをデータベースに登録してます id,name,age 1,田中,20 2,木村,31 3,坂下,43 このデータをテーブルに書きだしたいのですが pearなどのライブラリを使用しない場合、どのようなコードを書くのが効率いいでしょうか? mysql以外のデータベースは使用しないのでmysqlに特化した書き方をどなたかご教示お願いいたします
798 :
796 :2009/04/02(木) 11:40:45 ID:???
>>797 $link = mysql_connect('localhost','ユーザ名','パスワード名');
mysql_select_db('データベース名');
$sql = "select * from テーブル名";
$result = mysql_query ( $sql );
while ( $data = mysql_fetch_array ( $result ) ) {
$data['id'];
$data['name'];
$data['age'];
}
じゃないの?
799 :
nobodyさん :2009/04/02(木) 11:48:45 ID:e2MYzFKZ
すみません、僕もちょっと似たようなこと?で質問させてください
>>797 さんのデータで
id,name,age
1,田中,20
2,木村,31
3,坂下,43
とありますが、たとえばID2の木村さんの行だけを取得する場合、
while ( $data = mysql_fetch_array ( $result ) ) {
if (2==$data['id']) {
$id = $data['id'];
$name = $data['name'];
$age = $data['age'];
break;
}
}
とやってきたのですが、MYSQLではピンポイントで取得することができないってことでしょうか?
800 :
796 :2009/04/02(木) 11:59:21 ID:???
>>799 嘘だよね? select * from テーブル名 where id=2;
あるいは、 where name='木村';
>>796 mysql_fetch_arrayの結果を4回使いまわす
802 :
796 :2009/04/02(木) 12:09:54 ID:???
>>801 違うんです。4つそれぞれ別なんです。
テーブル結合でも想像できないのでやっぱり4回やらないとだめなのかな
XAMPPをインストールしました。 MySQLにパスワードを設定しようとphpmyAdminでuser テーブルを表示させましたが Hostが%のレコードがありません。localhost と127.0.0.1というのだけです。 パスワードを設定するのはlocalhost と127.0.0.1でいいのでしょうか?
804 :
796 :2009/04/02(木) 12:40:16 ID:???
$xxx[0] = "genre"; $xxx[1] = "property"; $xxx[2] = "actress"; $i=0; $g=0; while ( $i < count($xxx) ) { $sql = "select $xxx[$i]_id,$xxx[$i]_name from $xxx[$i]"; $result = mysql_query ( $sql ); while ( $data = mysql_fetch_array ( $result ) ) { $xxb[$g][$xxx[$i]]['id'] = $data[0]; $xxb[$g][$xxx[$i]]['name'] = $data[1]; $g++; } $i++; } これでいい?
気持ちの悪いメンテナンスしづらいコードですね
806 :
796 :2009/04/02(木) 12:58:10 ID:???
>>805 これでいけました
>>796 の質問者です。
一回のSQLで4つのテーブルのIDと名前をゲットできました
807 :
nobodyさん :2009/04/02(木) 13:01:43 ID:vfSwYPOW
【OS名】centos
【PHPのバージョン】php5.26
smarty使用
【連携ソフトウェア】mysql
【質問内容】
初めての質問です。
よろしくお願いします。
登録フォームが都合上ページの下部にあるのですが
PHPで入力エラーを同じページの同じ登録フォームのある部分に表示しております。
ページ上部に登録フォームのアンカーへ移動するリンクはありますが
PHPではいたエラー文言付画面の表示時に下部のアンカーへ移動して表示するには
javascript以外に方法はないでしょうか?
要は
http://www.etc.com/touroku.php#a みたいにやるにはどうすればいいのか、よろしくお願いいたします。
808 :
796 :2009/04/02(木) 13:05:48 ID:???
正確に書けば、$xxb[$xxx[$i]][$g]['id'] = $data[0]; かな for($i=0;$i<count($xxb['genre']); $i++) で各セレクト分でしよう
809 :
796 :2009/04/02(木) 13:26:45 ID:???
>>804 途中で$g=0;を入れるのを忘れました。
$i++の後
796さん、あなたを下スレ公認回答者に認定いたします
>>807 actionかlocationでの遷移先をそれに設定すればいいのでは?
812 :
nobodyさん :2009/04/02(木) 19:09:54 ID:vfSwYPOW
813 :
nobodyさん :2009/04/02(木) 21:54:38 ID:SbciSXr8
すません pukiwikiとかの既存ソースを使ってるのですが PHPがサバの設定でポート指定されていて 既存ソースだと、リンク先がPHPの場合、ポート指定が外されてしまうのです TOPページが :7070 で実行してたら 遷移先が :7070 が外れてしまうという状態です 解決方法とかご教授願えますか。 質問場所が悪ければ、聴ける場所なども教えていただけると助かります
pukiwikiの設定でサイトURL入れるとこあるんじゃ?
815 :
nobodyさん :2009/04/02(木) 22:33:32 ID:SbciSXr8
なるほど… ちょっと探してみます。 ただ、pukiwikiに限らず、他のPHPでも 同じ状況になってしまうので根本解決するための方法など ご存知でしたらお願いします。
絶対リンクをやめる
スクリプトの先頭でob_start()。 コールバック関数を指定して出力内容を全部受け取り、URLを全部置換する。
819 :
nobodyさん :2009/04/03(金) 01:14:27 ID:QmVSt/Vd
【OS名】win xp sp3 【PHPのバージョン】php5.29 【連携ソフトウェア】mysql 【質問内容】 $val = NULL; $query = "insert into test (id, comment) value ($val, 'test')"; 上記のSQLをダンプしてみると NULLを代入した変数$valがNULLとして展開されていません。 もぬけの殻となってしまっています。 ※ダンプしたクエリ insert into test (id, comment) value (, 'test') なのでクエリーを投げるとエラーとなってしまいます。 NULLをinsertしたい場合は変数にいれず、 直接クエリの文に記述しないといけないのでしょうか?
>819 現代人ならプリペアドステートメントを使え。プレースホルダ使える状況でクエリを直接組み立てる奴は原始人。 PDOStatement::bindValue()の第3引数にPDO::PARAM_NULLを指定すれば、NULLをDBに入力できる。 つうか、何もinsertしなければ、デフォルト値であるNULLが入るけどな。 (カラムにnullが許可されており、他のデフォルト値を指定していない場合に限る)
DB上のnullじゃなくて言語上でnullだから無くて当たり前
単にこうするんじゃないか? $val = 'NULL';
$val = 'NULL'; でNULLをDBに入力できる
824 :
819 :2009/04/03(金) 01:37:29 ID:???
>>820 >プリペアドステートメント
はじめて聞きました。
>何もinsertしなければ、デフォルト値であるNULLが入る
これは理解していたのですが、インサート項目が非常に多く、
そのほとんどが必須ではないので、クエリを組み立てるのがめんどくさく
値がわたってこようがこなかろうがすべての項目をインサートさせてしまう感じで作ってしまいました。
プリペアドステートメント勉強します。
ありがとうございました。
825 :
819 :2009/04/03(金) 01:39:55 ID:???
>>822 >>823 それだと文字列のNULLが入ってしまいました。
間違えてるかもしれないのでまた確認してみます。
ありがとうございます。
されないだろ insert into test (id, comment) value (NULL, 'test')
827 :
nobodyさん :2009/04/03(金) 02:04:33 ID:7RHF46qi
申し込みフォームの作成について form1.phpにて記述されたformの内容をPOSTで form2.phpという確認画面で受け取るような プログラムを作ってるんですが、 確認画面にて前に戻るボタンと送信ボタン2つを作りたい場合は それぞれに同じ内容のhiddenを設定するしか方法はないんですかね? もしスマートな方法がありましたらアドバイスよろしくお願いします。
セッション使えば?
829 :
827 :2009/04/03(金) 02:11:24 ID:???
>>828 返信ありがとうございます。
やっぱりsessionがいいですよね。
もしPOSTでスマートに出来るならと思い聞いてみました。
hiddenとか過去の産物だろ。更新ボタンとか戻るボタンとかでgdgdになるのが目に見えてる
>>830 戻るでグダグダになるのはセッションじゃないかい?
とりあえずhiddenを批判するやつはどこにでもいる
入力、確認を違うファイルにするとエラー処理がめんどい
php5.3rc1使ってる人に質問です。 php.iniに書いたmb_string系の設定って反映されてますか? あと何故かapcも動かない、、、 いくら設定を見直してもなにが悪いのかわかりません。 解決策をご存知の方いましたら、教えてください。
836 :
835 :2009/04/03(金) 06:55:01 ID:???
解決しましたすみません;ケアレスミスでした・・・
>>783 ありがとうございます。それでいってみたいと思います。
838 :
nobodyさん :2009/04/03(金) 07:28:49 ID:b3GlDVd8
クエリの時のプリペアドステートメントって、どういう効果があるんですか? 一応本では読んだんですがいまいちよくわかりません 簡単に説明お願いします
>>838 繰り返し使われる場合はパフォーマンスが上がることもあるみたいだけど、一番大きいのは
SQLインジェクションみたいな攻撃を受けにくくなることじゃないの。
そんなのクオートすりゃ済む話だろ
>>819 もうプリペアでやってるかもしれないけど
$a = "";
$var = "'".$a."'";
$query = "insert into test (id, comment) value ($val, 'test')";
NULLと空文字は違うだろw
昔Oracleしか知らなくてnullとブランク何が違うか客先で質問して大恥かいたことあるぜ
俺も思う サンプルコードにこれ見よがしにつっこむ奴なんなの ある側面から切り取ってるんだから瑕疵がないほうがおかしいだろ
高木先生大の批判は辞めて下さい
848 :
827 :2009/04/03(金) 15:07:28 ID:???
返事が遅くなりすいません。 フォームの件ですが色々試しましてSESSIONでいくようにしました。 色々とアドバイス本当にありがとうございます。 それでもう一つ質問なんですが、 フォームのチェックボックスの内容をhtmlに直に書かず、 config.phpなどに$val=array("aaa","bbb","ccc"); みたいな感じで記述しhtmlでforeachを使い 全て書き出すみたいな事をしたいんですが、参考書などを確認したら 配列で記述するのではなくfunctionで function val(){ $val = array("aaa","bbb","ccc"); return $val; } という書かれ方がされてました。 関数にせず配列だけが記述すると何かマズイんですか? 質問が少しわかりにくいですがもしよければ アドバイスよろしくお願いします。
>>848 $valの中身を将来的にコードからいじる可能性があるならfunction、
可能性がないなら定数のままでいい
最近、他人のブログを批判しながら2ちゃんで宣伝してアクセス数稼ぐのが流行ってるのか?
851 :
827 :2009/04/03(金) 15:41:11 ID:???
>>849 返信ありがとうございます。
例えばこれから先チェックボックスの値dddが増えた場合、
$val=array("aaa","bbb","ccc","ddd");
でも
function val(){
$val = array("aaa","bbb","ccc","ddd");
return $val;
}
でも変わらない気がするんですが・・・
素人質問本当にすいません。
今から考えてみます。
>>851 いい例が思いつかないのだけどこんな感じ。条件によって変わる場合だな
function val(){
$val = array("aaa","bbb","ccc","ddd");
// 天気が雪の場合のみ配列にeeeを追加する
if( $this->weather == "snow" ){
array_push( $val, "eee" );
}
return $val;
}
854 :
827 :2009/04/03(金) 16:12:12 ID:???
>>852 >>853 返信ありがとうございます。
今後、配列を元に何か条件をつけるなどの機会がある場合は
関数にしておく方が好ましいという事ですね。
例文まで書いていただき本当にありがとうございました!
855 :
nobodyさん :2009/04/03(金) 18:24:43 ID:ZpjcrZDP
文字列のシングルクォーテーションのみを エンティティに変換したいのですが、どうすればいいのでしょうか? htmlspecialcharsはダブルクォーテーションも変換しますし・・。
vs php(VS2005評価版)でデバッグ実行しようとすると 次のエラーが出てしまいます。 何が原因なのでしょうか? Fatal error: Unknown: Failed opening required 'C:/Documents and Settings/繧イ繧ケ繝育畑縺ョ繝ヲ繝シ繧カ/My Documents/Visual Studio 2005/Projects/PHP_TEST/PHP_TEST/index.php' (include_path='.;C:\php5\pear') in Unknown on line 0 文字化けしちゃってますが C:\Documents and Settings\ゲスト用のユーザ\My Documents\Visual Studio 2005\Projects\PHP_TEST\PHP_TEST\index.php のところで何かエラーが発生している様です。 ※phpのコード <?php /* TODO: Add code here */ print("テスト"); ?>
858 :
nobodyさん :2009/04/03(金) 19:44:58 ID:2mI6CRy6
【OS名】debian linux 【PHPのバージョン】5.2.0 参照渡しで変数を送り 変数が未定義なら空の文字列を返し 変数が定義済みならそのまま返す関数を考えました。 $test = hoge_variable($v); function hoge_variable(&$v) { if(! isset($v) ) { return ''; } return $v; } テストに入る内容は望みのものですが、 変数$vが未定義だった場合、定義されて(?)NULLが入るようです。 この挙動について、どういった理由でそうなるのか、 また$vを未定義のままにする方法はあるのかご教示いただけませんでしょうか。
>>858 &$vのとき、参照を張るには、参照される側のアドレスが必要だから、そこで定義される。値はNULL
&$vにしなければよい。
return ''; を return $v=''; でよくね? 定義されてないからNULLだぜ?
861 :
nobodyさん :2009/04/03(金) 20:15:15 ID:2mI6CRy6
>>859 やはりそんな感じだったんですね。
関数はエラーレベルによっては出るNotice: Undefined variable
の対策だったんですけど、&$vでなく$vにするとそこでUndefined variable
がでてしまう感じで…。
定義されたくない時は直接issetをしていくしかないということですかね。
というかそもそもUndefined variable回避に対するアプローチが違っているでしょうか…?
宣言すりゃいいじゃん
863 :
nobodyさん :2009/04/03(金) 20:35:14 ID:2mI6CRy6
状況的には例えばこういう未定義かもしれない所からひっばってくる時で、 $flag = $_POST['flag']; そういう意味で先の $flag = hoge_variable($_POST['flag']); だったんですけど、 例えNULLでも配列に定義されてしまうと、 foreachとかする時に邪魔になったりとかそういう感じのことでした。 やはり基本的には $flag = ''; if (isset($_POST['flag'])) { $flag = $_POST['flag']; } みたいなことで行くのがいいのですかね。
フレームワークには用意されてたりするけどね
>>856 文字コードがUTF-8でBOMが入っているとか?
UTF-8Nにしてみたら?
>>863 > $flag = '';
> if (isset($_POST['flag'])) {
> $flag = $_POST['flag'];
> }
自分はそうしてる
変数が増えてくるとコードがのびがちなので
三項演算子使って
$flag = isset($_POST['flag'])?$_POST['flag']:null;
といった感じにしてる
>838-840 クォートで処理していると、インジェクションが無いか処理を注視しないといけない。 プリペアドステートメントは、インジェクションが無い事が一目で分かる。 SQLの構文と変数が分離されるので見やすくなるって利点もある。 >863 functon getPostedVariable($key){ return isset($_POST[$key])?$_POST[$key]:null; } とかやると楽なのでオススメ。 プログラムの開始時に$_GETと$_POSTとかを丸ごとメンバに持つクラスのインスタンスを生成して、そいつにこの関数を定義する手もある。 メリットが思いつかないレベルならとりあえず忘れておいてもいいけどな。テストが非常にしやすくなる。 $request = new Request($_POST, $_GET); echo $request->post('flag');
Zend_Request使えよ
宗教上の理由によりお断りします
PHPを勉強し始めたのですがphpではクラスを宣言する場合に、 public private とかって宣言する事は出来ないのでしょうか? public class Test { public function TestMessage() { print("あいうえお"); } }
>>870 classはできない。functionや変数は可能。
>>870 他言語の素養があるおまいさんはまずマニュアルを読みなはれ。
privateなclassってどんなん?
874 :
870 :2009/04/04(土) 02:00:58 ID:???
>>871 サンクス
>>872 .Net(C# / VB.net) & C++とかでこれまで開発をして来ましたが何かばれちゃいましたか。
マニュアルをちょっと読む事にします。
というより一つ疑問なんですけどC#とかC++とかだと次のパターンAでみんな記述しているのに
PHPとかだとパターンAの書き方をする人が多いのはなぜでしょうか?
C#だと今まで私が関わって来たプロジェクトは100%パターンAで記述されています。
【パターン@】
if( 1 == 1)
{
}
【パターンA】
if(1 == 1{
}
まちがえた 両方ともパターン2かよ
VisualStudioのコード補完のデフォルトがそうなってるだけだろ JavaやPHP使いはMSみたいに無駄に行数消費するのを嫌うよ
@とAに見える俺は目がおかしい・・・? てかA括弧閉じてないけど、スペースのことを言ってるのか・・・?
879 :
874 :2009/04/04(土) 02:11:43 ID:???
ああすまん俺の頭が混乱してた
>>874 がどちらのこと言ってるのか良く分からないけど
俺は@はメソッドの時に使う。
一応Zendのコーディング規約に則ってやってるけど
個人の作業なら別にそんなの君の価値観でやればいいだろ
880 :
878 :2009/04/04(土) 02:13:15 ID:???
あああ俺は874じゃなくて878
>874 PHPの「標準」なコーディング規約には2つの流儀がある。ひとつはZend、ひとつはPEAR。 で、どっちも1番の括弧スタイルを採用してるんだ。 C++で言えば、MSDNの規約とGNUの標準スタイルが一致しているような状況をイメージすればいいかな。そりゃ合わせるだろ? PHPが初めての言語です、って奴が多いのも影響していると思う。 勿論、PHP以前に他の言語を学んでいた奴の中には別のスタイルで書く奴もいる。 俺も2番のK&Rスタイルで書くしな。
>882 悪い、寝ぼけてた。 関数定義とクラス定義の箇所を読んでたわ。 PEARもifはそのスタイルだな。 if ((condition1) || (condition2)) { action1; } elseif ((condition3) && (condition4)) { action2; } else { defaultaction; }
MS厨はfunction名を大文字で始めとけ
classの修飾子にはpublic、final、abstractが使えるよ
886 :
870 :2009/04/04(土) 02:37:49 ID:???
>>878 >> 879 >> 880
【パターン@】
if( 1 == 1)
{
}
【パターンA】
if(1 == 1){
0}
の間違いです。括弧が抜けてましたね。
>>877 そう言われれば確かに勝手に整形されちゃいますね。
>>881 なる程2通りの書き方があったんですね。
いずれにせよ@番で統一されているみたいなのでちょっと安心しました。
今後も@で書いて行こうと思います。
(C#)と同じなのでこちらの方が気分的に見やすいです。
PHPでの実務経験が無いので実際の開発現場ではどちらが主に使われているのでしょうか?
887 :
870 :2009/04/04(土) 02:39:20 ID:???
うーん、どう考えても↓の方が見易いのですが、、、、
皆さんも↓の方が見やすくないですか?
>>883 if ((condition1) || (condition2))
{
action1;
}
elseif
((condition3) && (condition4))
{
action2;
}
else
{
defaultaction;
}
書き込むボタン押す前に見直ししろ
俺だったらこれだな。極めて合理的だ if ( (condition1) || (condition2) ) { action1; } elseif ( (condition3) && (condition4) ) { action2; } else { defaultaction; }
>887 そのスタイルはないな。見づらい。 インデントスタイルでガタガタ抜かすお前にはPythonが合っていると思う。 Pythonにはどのインデントスタイルが見やすいとかいう議論が一切存在しないぞ。
>>892 >>893 本気で言ってますか?
コードを詰めまくって書くよりゆとりを持たせたコードの方が見易いし、
メンテナンス性もあがる気がするのですが。
それはひらがなだけで書かれた文章の方が読みやすいってのと同じレベルの主張だと思う。 まぁコーディングスタイルは宗教論争なんで、不毛なダケなんだけどさ。
ZendとかPEARとか使ってるなら、逆効果だろ 統一させた方が見やすい
見やすいのはいいけどスクロールしないと下のほうが見えなくなるのが無理
>>887 そんなとこより括弧と条件式の間のスペースを空けろってな
オレ竜で書くのがいちばんさ
>>887 EclipseでJavaとPHPをやってる俺からいうと
if (condition) {
}
のほうが見やすい
他の人も同じようなこといってるが
最初に使い慣れたIDEの標準の補完機能によって
どちらが使いやすいか分かれるんだろう
あとはコーディング規約の問題
901 :
nobodyさん :2009/04/04(土) 07:35:04 ID:+rg3YxkW
fopenってロックの引数がないんですが ちゃんとロックされるんですか? 同時書き込みでファイル壊れたりしませんか?
fopenはリソースを指定してるだけ 書き込みを行う関数はfwrite
マニュアルのちょっと上にflockってあるだろ
ロックは別にするんですね ありがとうございました。
905 :
nobodyさん :2009/04/04(土) 11:05:08 ID:UT159Z4L
winでは動かない関数があるのでこのさい仮想マシン上にlinuxを入れることにしました ノートPCなので容量を抑えたいのですが、linuxしてる方でおすすめのものがございましたら教えて下さい
俺、クラスや関数は
>>874 でいう@、条件文なんかはAで書いてる・・・・
@の書き方って、昔ならではのC言語の関数書くときの引数の型宣言の名残なのかね
現在Apache+PHP5+MySQL5を使用してWEBサイトを作る練習をしているのですが、
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\
hogehoge.html
tomato.php
に各WEBページ(phpファイル)を置いて
http://localhost/ でアクセスしているのですが、これを
C:\Work
hogehoge.html
tomato.php
でアクセス出来る様にするにはどうすれば良いでしょうか・
※デフォルトのパスをC:\Workにしたいと思っています。
php関係ない
apacheのdocument root
あと
>>1
910 :
908 :2009/04/04(土) 13:04:00 ID:???
>>909 ありがとうございます。
document root を
【httpd.conf】
DocumentRoot "C:/htdocs"
に変更しApacheを再起動したのですが
Web サイトによってこのページの表示を拒否されました
というエラーが出て一向にページを見る事が出来ません。
なぜでしょうか?
ファイルをC:/Workにおいてるのになんでhttpd.confのほうは「C:/htdocs」にしたん?
ていうかPHP関係ないって言ってんだろカス
DocumentRoot を C:/Work にすればいいんじゃねーの。 あとID出せよ
documentrootだけ変えても意味ないよ documentrootのディレクトリ設定のパスも書き変えないと意味ないよ
916 :
908 :2009/04/04(土) 15:19:05 ID:???
>>911 ファイルは、C:/htdocsに配置しました。
>>914 IDを出す、 というのは所謂 fusianasan ですか?
>>915 ありがとうございました。
設定ファイル系を色々といじってみたところ無事動作する様になりました。
ありがとうございました。
ルールも守れないような奴は二度と来んな
918 :
858 :2009/04/04(土) 15:39:59 ID:Q5CHJrya
遅レスすみません。
>>866 氏
>>867 氏他皆様ありがとうございます。
いろいろ試してみたいと思います。
慇懃無礼なやつだなw
◆質問用テンプレ 【OS名】WindowsXP 【PHPのバージョン】php5.26 【連携ソフトウェア】mysql5 【質問内容】 セッションが破棄されるタイミングがいまいち分かりません。 セッションファイルの数を数える事により、現在サイトにアクセスしている人の 大まかな数を数えているのですが、ブラウザを終了してもセッションファイルは残ったままです。 理想を言えば、ユーザにログインボタンを押してもらい session_destroy を呼ぶ 事によりセッションファイルを削除するのが良いとは思いますが、 如何せんブラウザなのでログアウトボタンが必ず押される保障はありません。 ブラウザが閉じられてから5分したらセッションファイルを削除する、といった事は可能なのでしょうか? 通常セッションは一定時間経てば破棄されるらしいのですが、phpの場合はどこで設定すれば良いのでしょうか?
>>920 頑張ってfusianasanしたのはいいんだが君が表示してるのはIPだ
IDを出してくれたまえ
ID出てないが一応マジレスするとブラウザが閉じられたという情報は送られません
ttp://jp2.php.net/manual/ja/session.configuration.php いつ消えるかはsession.gc_maxlifetimeで決まる。
集計は、閉じられた情報は取得できないので、セッション変数に「最終利用日時」を記録しておく。
画面を表示するたびにこれを更新して、集計時はその数字を見て判別する、という手がある。
例えば、5分以内にサイトにアクセスした人の人数を「現在サイトにいる人数」と見なすとかな。
ファイルだと大変なので、DBなどの集計しやすい場所にセッション情報を格納するとやりやすい。
俺はセッション使わないでアクセスログでオンラインカウンターをやってる
>>922 これの事だったんですねw
勘違いしてました。
>>923 そうですよね。
>>924 ちょっと色々といじってみます。
>>925 別に荒らしてはいない気がしますが・・・
>>926 DBにアクセス情報を記録させてそこで判定した方が確実で簡単かもしれませんね。
死ねカス
春だなw
>>927 まじれすすると、それはトリップ
ID表示はメール欄を空白にするかageと書く
てst
さくらインターネットでサーバ借りてるんだけど function ExecuteSanitizing(&$strSanitizing) { $strSanitizing = htmlentities($strSanitizing, ENT_QUOTES, mb_internal_encoding()); } $str = "<b>あいうえお</b>"; $str = instance->ExecuteSanitizing($str); echo $str; として出力するとローカルでは文字化けしないのにさくらインターネットだと文字化けしちゃいます。 なぜでしょうか?
エスパーさん出番ですよ
934 :
p7033-ipbfp405osakakita.osaka.ocn.ne.jp :2009/04/04(土) 23:30:26 ID:UHDnoHcu
私を笑いものにするがいい
俺はfusianasanを制御できるから書きこんでもIP表示されないんだけどさ
>>937 いや、おれ2ちゃんのボランティアやってるからこのぐらいの特権は持ってるよ
f&lrm;usianasan なにがボランティアだつまらん
釣れたw
テスト
てす
>>932 ローカルとさくらのphp.iniのmbstringの設定が違う
>>901 fopenはファイルのポインタを獲得するだけ。
ロックはその後で、別の関数で行う。
http://ameblo.jp/tondemonight/entry-10178347889.html クラスメソッドをabstractにしようと思いまして、abstractをつけて関数定義したところ、以下のようなエラー。
Class SampleClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods
エラーの原因がわからず、30分も調べてしまいました。
原因はclassの定義で本来なら「abstract class SampleClass」 としなくてはいけないところを
「class SampleClass」と定義していたことでした。
エラーメッセージからでは気づきにくいことでした・・・
だとさ
ポインタって言うな
SampleClassには1つのabscractメソッドが含まれます。 だからこのクラスはabstractとして宣言されるか、残りのメソッドを実装しなければいけません。 このメッセージで分かりづらいってなら、どう出せばいいんだろう。
MSもSUNもやってるんだから ZendJapanもエラーメッセージを日本語化すべきだな
日本語化したら分かるんかい?
>>944 ありがとうございます。ローカルのphp.iniと設定をあわせたところ
正常に表示される様になりました。
ちょっとphp.iniについて質問があるのですが
ローカルだと
C:\WINDOWS\php.ini
という具合にphp.iniファイルを配置しているのですが
レンタルサーバ(さくらインターネット)の場合には
/home/street-fighter/www/php.ini
という具合にphp.iniを自前で用意するのが普通なのでしょうか?
※今後、さくらインターネット以外のサーバを借りるかもしれないのですが、
さくらインターネット以外の場合にも、*/www/直下にphp.iniファイルは保存
するのでしょうか?
/home/street-fighter/www/php.ini
>>951 自分が借りているレンタルサーバーの場合、
(1)そもそもユーザーがphp.iniを編集できない
(2)php.iniがpublic_htmlの外に置いてあった
この2パターンがありました。
ブラクラ注意
>>954 がもしブラクラなら運営板で報告してもらえる
957 :
nobodyさん :2009/04/05(日) 11:30:01 ID:rlL9K/DC
変数内の特定の文字列を取得しようと、以下のようにしました。 //$text ----- あいうえお ----- //取得する為の正規表現 preg_match_all("/-----¥n(.*)¥n-----¥n/is",$text,$array) しかし、「-----」の間を上手く取得できません。 どういった正規表現のコードを書けば良いか教えて下さい。
そりゃs修飾子付けたら¥nと.の区別が無くなるがな
せめてこう書けよ ----- ↓ -{5}
-{5}\n(.*)-{5}\n
どうでもいいが改行は必ず\nなのか? \rとか\r\nは含まないんだな?
Linuxサーバでそんなファイル作ったら行末に変な文字出ちゃうぜ 環境によって必要ならそういう対応すればいいだけ
変な文字っていっても^Mに見えるCR(Carriage return)でしょ ウニックス系で\nと書くとLF(0x0a)を表し、 ウィンドズ系で\nと書くとCR+LF(0x0d 0x0a)を表すのが基本でしょ
964 :
957 :2009/04/05(日) 13:26:52 ID:???
皆さん、レスありがとうございます。 ただ、以下のようにしましたが、やっぱり取得できません。 $text = trim(" ----- あいうえお ----- "); preg_match_all("/-{5}\n(.*)-{5}\n/",$text,$array);
lol trim trim trim trim trim trim trim trim trim trim
>>964 >1
スレのルールも守れない奴に正規表現が守れるものか
$str = " ----- あいうえお ----- "; preg_match_all("/-{5}\n(.*)-{5}\n/s",$str,$m);
968 :
957 :2009/04/05(日) 14:00:27 ID:rlL9K/DC
2回目以降もID出すんですね。sage無ければいけないと思っていました。
それで、
>>967 のコードをそのままコピーして
print_rで出力してみたのですが、やはり文字の「あいうえお」が取得できません。
テスト環境がWindowsXPのファイルがUTF-8ですが、それが関係するのでしょうか?
ただ、他の文字コードにしてもやっぱり取得できません。。
うにコードならU修飾子ぐらい付けろや
俺の環境では取得できるんだがな・・・
環境によるのかな
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無題ドキュメント</title>
</head>
<body>
<?php
$str = "
-----
あいうえお
-----
";
preg_match_all("/-{5}\n(.*)-{5}\n/s",$str,$m);
print_r($m);
?>
</body>
</html>
結果
Array ( [0] => Array ( [0] => ----- あいうえお ----- ) [1] => Array ( [0] => あいうえお ) )
972 :
957 :2009/04/05(日) 14:11:33 ID:rlL9K/DC
>>970-971 そうですか・・。
テストしているローカル環境のPHPが5.2.5で
試しにさくらのレンタルサーバ(5.2.8)にもアップして試してみたのですが、
971さんのような結果になりません・・。
俺はこれでおkだった <?php $text = trim(" ----- あいうえお -----"); preg_match_all("/-{5}\n(.*)\n-{5}/",$text,$array); var_dump($array); ?>
まさかと思うけどさー 改行コードがCR+LFだからとかいうオチじゃないよね? もしこれで通ったらぶっ飛ばすぜ <?php $text = trim(" ----- あいうえお -----"); preg_match_all("/-{5}[\n|\r]+(.*)[\n|\r]+-{5}/",$text,$array); var_dump($array); ?>
別に員だけどさ お尻の改行だけを取るならrtrim("\n",変数)の方が誰が見ても分かりやすくていいと思うんだ
[\n|\r] こういう書き方するなら正規表現もっと勉強したほうがいい
979 :
957 :2009/04/05(日) 14:47:03 ID:rlL9K/DC
>>973-978 全く反応無しです・・。
array(2) { [0]=> array(0) { } [1]=> array(0) { } }
という結果にしかなりません・・。
作成手順は、これまでDreamweaverを使っていたのですが、terapadに変更しました。
そしてこれまで挙がっているソースをコピーして保存して実行したのですが、
それでも上記のような結果になります。
文字コードをEUCにしてもSJISにしても結果は同じです・・。
やっぱりPHPのバージョンの問題ですかね・・・
pearの勉強をしよと思ってるんですけど オススメの入門サイトはありますか? できればpearを使った場合のメリットとかも十分に解説されているサイトを希望します。
terapadとかナメてんのかよ サクラエディタとか秀丸とかEmEditor使えよ
釣りだろ
最近よくいる低レベル回答者を叩くのが楽しみでここ見てます
叩いてないじゃん
985 :
nobodyさん :2009/04/05(日) 22:31:43 ID:QUmCZ8RS
配列にひらがなのみの文字列を不定数で格納します この配列をあいうえお順でソートしたいと思います 標準関数ではあいうえお順でソートする関数がないので、自分でユーザー定義関数にしようと思います あいうえお順にするためにどのようなアルゴリズムを用いればいいのかどなたかヒントだけでもお願いいたします 【サンプルの配列】 $hiragana = array( "かいわれ", "れたす", "あめ", "さらだ" ); ↑をソートして、結果が↓ $hiragana = array( "あめ", "かいわれ", "さらだ", "れたす" );
sort($hiragana);
>>986 じゃないが、とりあえず utf-8なら問題なくできたみたいだけど、なんか違うのけ?
バイナリ単位での比較だからひらがなだろうができる
990 :
nobodyさん :2009/04/06(月) 00:09:45 ID:CWy5GQCe
質問 CGIゲームを設置したんだけど サイトによっては自動的に更新されてるんですよ ページを定期的に読み込むにはどうしたらいいのか教えてください
cron
meta refresh
ume
ume
1000ならCGIはPHP一色になる
(´Д`)うめ〜
オチたのんだぜ
100ゲット
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。