トップページphp
985コメント248KB

【PHP】下らねぇ質問はID出さずに書き込みやがれ 1

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/11/07(日) 17:11:24ID:???
どうぞ
0482nobodyさん2011/03/16(水) 23:42:52.52ID:???
>>481
ちゃんとできるようになりました、ありがとうございます!
0483nobodyさん2011/03/17(木) 08:29:52.77ID:???
いいってことよ
04844752011/03/17(木) 15:57:22.92ID:???
アドバイスありがとうございます。

テキストリンクの広告を扱っています。
SEO目的なのでできれば静的に処理されるPHPで
処理を行いたかったのですが、無理そうですので
アドバイスに従い iframe を使ってみようと思います。

jsonp のクロスドメインについても、勉強しながら後々には使えるようになりたいです。
ありがとうございました。
0485nobodyさん2011/03/18(金) 18:37:32.02ID:???
ほんっとお前らくだらねーなぁ




0486nobodyさん2011/03/18(金) 20:56:20.79ID:???
>>484
商用は企業に依頼しろ
0487nobodyさん2011/03/18(金) 21:12:42.56ID:???
笑用
0488nobodyさん2011/04/13(水) 01:23:37.18ID:3ZKLqUAh
どなたかご存知の方いらっしゃいましたらお願い致します。

hoge1.phpは以下のようにしてhoge2.phpを呼び出すものとします。
header(location=”hoge2.php”);

この場合、WEBサーバーではhoge1.phpへのアクセス(プロセス?)は無く
なった物と認識して、hoge2.phpへ移るものと考えて良いのでしょうか?
それともhoge2.phpが表示されている最中もhoge1.phpにアクセスが
残っていると認識されるのでしょうか?
0489nobodyさん2011/04/13(水) 01:34:51.75ID:???
↑すいません。スレの趣旨無視してしまいました。
0490nobodyさん2011/04/13(水) 09:37:32.13ID:???
このスレはどっちでもOK
アクセスログも残るし処理も続いたような気が・・・
ただ画面遷移はされてるので処理してるかどうかとかはわからないはず
0491nobodyさん2011/04/15(金) 23:38:33.44ID:???
最近どーしても作りたいシステムがあって、自作しようと決めた初心者です。
今の所プログラムの基本的な流れや仕組みは理解。
1から書けと言われれば本を見ながら。
特別な処理になるとちょっとお手上げというレベルですが…

こんなのを作りたいので以下。

1.ある2人が別々のフォームから6つの言葉を入力する。
2.お互いが何を入力したか相手(や第三者)には分からない。途中で書き直しもできる
3."開封日"を設定する(これはお互いが一緒でないといけない もしくは片方が決める)
4.開封日になると6つのボタンが表示される
5.1つめのボタンを押せば、2人が入力した1つめの言葉が公開される
6.そんな感じでボタンを押して開封していく

そんなシステムを作りたいんですが、これってかなり複雑ですか?
作りたいものが見えていると頑張れる気はします
0492nobodyさん2011/04/16(土) 00:24:55.57ID:???
複雑じゃないけど、少し考えるところはでてくると思う。
勉強にもなるところがありそうだし、いいんでない?

ファイル入出力、ユーザ識別あたりが考えどころになるかな。
0493nobodyさん2011/04/16(土) 10:29:29.46ID:???
プログラムはそれほど複雑ではないけど、データベースを多少勉強する必要がある。
それと、「ある2人」が自分と友人とか決まった人同士なら楽だけど、
公開ウェブサービスのように不特定多数のユーザーから「ある2人」を選ぶならかなり難しいと思う。
0494nobodyさん2011/04/16(土) 14:35:53.07ID:???
>>492-493
ありがとうございます やはりデータベースは触ることになりそうですね…
MySLQ?でしたっけ、こちらも勉強していこうと思います。

ある2人については、不特定多数のユーザーですねorz
ただ、2人に予めパスワードなど決めてもらって
同じパス同士でやらないと作動しないという風には考えてあります。
余計ややこしくなるかな
0495nobodyさん2011/04/17(日) 19:29:11.00ID:???
MySQLはオワコン
これからはPostgreSQL
0496nobodyさん2011/04/18(月) 18:21:10.28ID:???
>>495
マジで? どう違うか教えてくれ
0497 忍法帖【Lv=3,xxxP】 2011/04/18(月) 19:08:03.37ID:???
0498nobodyさん2011/04/18(月) 20:51:30.94ID:???
どちからと言えばPostgreSQLのほうが・・・
それにPostgreSQLってまともに使われてたの日本ぐらいじゃないか・・・
0499nobodyさん2011/04/19(火) 12:44:28.65ID:???
でもPostgreSQLだとおもうがね。
0500nobodyさん2011/04/23(土) 14:29:20.27ID:???
外部サーバーにあるファイルのタイムスタンプを取得する関数ってありますか?
filetime的な

PHP5
0501nobodyさん2011/04/23(土) 14:30:17.07ID:???
>>500
>>1
0502nobodyさん2011/04/23(土) 15:57:27.70ID:???
マルチ乙
0503nobodyさん2011/04/28(木) 19:38:37.99ID:???
php初心者です。
最終的には2chの掲示板のようなのをつくりたいんですが、知識ゼロです。
ネットにも適当なサイトがなくて、本で勉強したいんですが、たくさんあってよく分かりません。
どういった本を読んでいけばいいんでしょうか。
お勧めの本とかあれば教えてください。
0504nobodyさん2011/04/28(木) 20:07:39.10ID:???
適当にググった初心者本読めばいいだろ
入門者なんてどれも似たり寄ったりだ
0505nobodyさん2011/04/28(木) 20:36:35.26ID:???
絵本から読んでけ
0506nobodyさん2011/04/28(木) 20:38:59.67ID:???
2ch風掲示板なら「基礎からのMySQL」がオススメ
0507nobodyさん2011/04/28(木) 21:19:15.48ID:???
>>503
逆算して自分が覚えるべきことをリストにまとめろ

例えば
2ちゃんのような掲示板を作る

スレッド式掲示板を作る

記事とコメントフォームだけのシンプルな掲示板を作る

コメントフォームをデザインする

ファイルに文字列を書き込む&ファイルの内容を読み込むコードを書く

http://localhost/にアクセスしてHello worldを表示させる
0508nobodyさん2011/04/28(木) 23:16:15.39ID:P8KNi+qP
function 関数($arg){
return $arg;
}

これを一行で書きたいんだけどなにかあったら
教えてください
0509nobodyさん2011/04/28(木) 23:17:17.28ID:???
function a($arg){
return $arg;
}

$b = a("aaaaaaa");
0510nobodyさん2011/04/28(木) 23:39:24.90ID:???
どういうことなの
0511nobodyさん2011/04/28(木) 23:40:49.93ID:???
$b = a("aaaaaaa");で一行
0512nobodyさん2011/04/28(木) 23:52:31.78ID:???
クソスレageるなsageろ
0513nobodyさん2011/04/28(木) 23:59:31.65ID:???
create_functionでラムダでかいけつしました。
05145032011/04/29(金) 13:13:09.43ID:???
レス感謝です。

phpの勉強する前に、htmlがほとんど分からないんですが、掲示板を作るにあたってhtmlから勉強したほうがいいんでしょうか。

それともphpの本を読んでいくと自然に掲示板を作るかぎりでのhtmlの使い方が分かるようになりますか。

教えて君ですみませんが、ウェブアプリを作るのははじめてでどうhtmlの知識が入ってくるのか想像ができないレベルです・・・。

一応学習計画としては、
よくわかるPHPの教科書→絵本→基礎からのMySQL→PHPによるWebアプリケーションスーパーサンプルを考えてますが、html部分もこれらで解説されているのでしょうか?
0515nobodyさん2011/04/29(金) 13:57:22.06ID:???
HTMLからやれ
0516nobodyさん2011/04/29(金) 14:00:34.46ID:???
http関係読んで、まずはどういう流れでブラウザに表示されるのか?を理解するといいかも。
次に、「どのように出力するとどのようにブラウザに表示されるか?」を理解する意味でhtmlかな。
<ここはオプション>
見栄えを気にするならCSS
更に、クリックしたときに画像のアップを見せたい、とかいう感じの動的なページを望むならJavascript
</ここはオプション>
で、PHPかね

どこを重視するかによって、オプションは抜かしていくのがいいと思うが・・・
使い勝手を気にするならオプションは無視できんかな
0517nobodyさん2011/04/29(金) 17:02:27.17ID:???
良スレ上げ
0518nobodyさん2011/04/29(金) 17:05:20.85ID:???
>>508
はい一行。
function 関数($arg){return $arg;}
0519nobodyさん2011/04/29(金) 17:12:10.18ID:???
■過去ログ
【PHP】下らねぇ質問はID出して書き込みやがれ 104
http://hibari.2ch.net/test/read.cgi/php/1297669559/
【PHP】下らねぇ質問はID出して書き込みやがれ 103
http://hibari.2ch.net/test/read.cgi/php/1295956018/
【PHP】下らねぇ質問はID出して書き込みやがれ 102
http://hibari.2ch.net/test/read.cgi/php/1292670453/
【PHP】下らねぇ質問はID出して書き込みやがれ 101
http://hibari.2ch.net/test/read.cgi/php/1289793607/
【PHP】下らねぇ試ソ問はID出して緒曹ォ込みやがれ 100
http://hibari.2ch.net/test/read.cgi/php/1288168893/
【PHP】下らねぇ質問はID出して書き込みやがれ 99
http://hibari.2ch.net/test/read.cgi/php/1286938893/
【PHP】下らねぇ質問はID出して書き込みやがれ 98
http://hibari.2ch.net/test/read.cgi/php/1284805237/
【PHP】下らねぇ質問はID出して書き込みやがれ 97
http://hibari.2ch.net/test/read.cgi/php/1279833891/
【PHP】下らねぇ質問はID出して書き込みやがれ 96
http://pc11.2ch.net/test/read.cgi/php/1275032024/
【PHP】下らねぇ質問はID出して書き込みやがれ 95
http://pc11.2ch.net/test/read.cgi/php/1271636105/
0520nobodyさん2011/04/29(金) 17:12:33.60ID:???
アラヤダ誤爆
0521nobodyさん2011/04/29(金) 19:48:26.54ID:???
>>514
PHPの前にHTMLとCSSは必須。
半月からひと月くらいはHTML/CSSに時間を割いた方が良い。
PHPの読む本は挙げたのでok。
オススメの順番は、
PHPの絵本→基礎からのMySQL→よくわかるPHPの教科書→PHPによるWebアプリケーションスーパーサンプル
(理由:負担が軽い順だとこうなる)
05225032011/04/30(土) 10:51:16.37ID:???
ありがとうございます。

htmlとcssは本当によくわかってないんで、2ch風な掲示板を作るにはどうやって勉強したらいいかわからないです。

最終的には、スレッド式掲示板を作るにもphpだけではなくhtmlとcssが必要だと思いますが、ネットや本を読んでも文法の説明がほとんどで、どうやれば掲示板のhtmlが書けるのかわかりません。

学習計画としたら、どんな本(あるいはネット)を読めばいいでしょうか。
0523nobodyさん2011/04/30(土) 10:59:38.68ID:???
PHPと関係ないのでこっち池
http://hibari.2ch.net/test/read.cgi/hp/1301891537/
0524nobodyさん2011/04/30(土) 12:26:35.27ID:???
なにかするときはあれしてこれしてでもあれだったらこれして
って考えるだろう。それをコードにすれば掲示板が出来あがる。
0525nobodyさん2011/05/01(日) 16:53:28.14ID:???
PHPにpreg_・・・ってあるから聞いてみる
/(\s|^)(I|you)(\s|$|\.)/という正規表現があるとして
「(I|you)」の部分だけキャプチャするのは正規表現だけで書けますか?
0526nobodyさん2011/05/01(日) 17:00:36.21ID:???
>>525
?:について調べればいいんだけど、名前忘れた
/(?:\s|^)(I|you)(?:〜〜
としてみて
0527nobodyさん2011/05/01(日) 18:56:18.17ID:???
PHP・アパッチ入ってるサーバーみたいにしてるPCになぜか他PCからブラウザでは見れなくて、
直接そのPCからブラウザで開いてみたりしたら遅くなりました^^;
別PCでもエクスプローラからはそのPC見れるんだけどなにが起きているのだろう・・・

ともかくやってみました。
preg_match("/(?:\s|^)(I|you)(?:\s|$|\.)/"," you ",$a);var_dump($a);
出力:array(2) { [0]=> string(5) " you " [1]=> string(3) "you" }

下記を見て「(?:〜)」もキャプチャされる気がするのですがやり方あるのでしょうか?
http://www.php.net/manual/ja/regexp.reference.subpatterns.php
0528nobodyさん2011/05/01(日) 18:59:46.39ID:???
ねえよ
05295252011/05/01(日) 19:07:51.11ID:???
やはり正規表現では[0]=> string(5) " you "は削れないですかね?

ちなみに別PCから見れなかったのはセキュリティソフト設定が戻ってたのが原因でした。
冷静なればなんでもなかった。
それとID・番号なかった・・・527も525です。
0530nobodyさん2011/05/01(日) 19:15:39.73ID:???
無駄なものはキャプチャしたくないって考えてると思うが諦めろ
05315252011/05/01(日) 19:23:25.42ID:???
そうですか・・・実はサクラエディタの正規表現キーワードで英文の単語を色分けしたい
というのが狙いで正規表現はPHP・JavaScriptでしかまともに使ったことがなかったので
ここで質問したのですが別の方法検討してみます。。
0532nobodyさん2011/05/01(日) 21:20:32.58ID:???
>>527
> preg_match("/(?:\s|^)(I|you)(?:\s|$|\.)/"," you ",$a);var_dump($a);
> 出力:array(2) { [0]=> string(5) " you " [1]=> string(3) "you" }
>
> 下記を見て「(?:〜)」もキャプチャされる気がするのですがやり方あるのでしょうか?
> http://www.php.net/manual/ja/regexp.reference.subpatterns.php
キャプチャされてない結果にしか見えない。

"you"だけが欲しいなら"you"だけにマッチする正規表現にすればいいだけ。
言明の項も読むといいよ。
05335252011/05/01(日) 23:28:06.45ID:???
これはもう無理と思ったのですが!>>532さん言明のアドバイスありがとうございます。参考になりました。

まだ言明の所を読んでいる途中ですが他にやっておくこともあるので時間切れです^^;
一応試した所まで書いときます。明日夜にまた試してみる予定です。
preg_match("/(?<=\s|^)(I|you)(?=(\s|$|\.))/"," you layout I ",$a);var_dump($a);
出力:array(3) { [0]=> string(3) "you" [1]=> string(3) "you" [2]=> string(1) " " } ?

> にしか見えない。
それとここが少し気になります。1つ目の要素は「((?:〜)」の部分に記述した内容にもマッチしてると
思うのですが、2つ目だけ見ればという意味なのでしょうか。
05345252011/05/01(日) 23:30:35.42ID:???
あちなみに出力で「you」と「I」だけ出そうとしてます。
0535nobodyさん2011/05/01(日) 23:54:31.53ID:???
だからできないって無理
0536nobodyさん2011/05/01(日) 23:56:22.83ID:???
全体にマッチしたのと別にキャプチャしたものが別に代入されるから諦めろ
そんな気にするほどの最適化にもなんないから無駄
0537nobodyさん2011/05/02(月) 08:18:13.13ID:???
>>533
>>532の前段
1番目の要素にはマッチした全体が格納され、2番目以降にはキャプチャされた内容が格納される仕様
キャプチャして欲しくないものには?:をつける
なので、正しく除外された結果になっている

>>532の後段
マッチした全体として "you" が欲しいなら言明の項を参照して、先(後)読み肯定(否定)を学んで
マッチした全体が "you" となる正規表現に書き換えればいい
その際に何もキャプチャして欲しくないのなら出現するグループすべてに?:をつければいい
0538nobodyさん2011/05/02(月) 08:27:49.05ID:???
てかほとんどできてるんだから、例を書けばいいか。

preg_match("/(?<=\s|^)(?:I|you)(?=(?:\s|$|\.))/"," you layout I ",$a);var_dump($a);
preg_match("/(?<!\w)(?:I|you)(?!\w)/"," you layout I ",$a);var_dump($a);

結果の1番目と2番目以降の意味が違うことには気をつけて。
05395252011/05/02(月) 10:08:48.30ID:???
1番目の要素にはマッチした全体が格納・・・そんな仕様ありました。その仕様忘れていましたが
?:の使い方で見れば除外されているという意味だったのですかね。
なるほど「(?=と(?:の組み合わせ」と「\wを前後に持ってきて先・後読み否定」という考えでしょうか。

ではまた夜に。
0540nobodyさん2011/05/02(月) 17:00:08.39ID:???
PHPのセッション情報はデフォルトでファイルに書き込まれますが、
1ディレクトリにたくさんのファイルが作成されると、ファイルシステムの性能が低下するという話をききました。
そしてPHPではそのための対策もされているそうで。すばらしい。
それで質問なんですが、1ディレクトリあたりどのくらいのセッションファイルが置かれると
性能が低下しますか。もちろんファイルシステムごとに違うと思いますので、
このファイルシステムなら1000個ぐらいから性能が低下したとか、
このファイルシステムでは10000ぐらい作ってもまったく問題ないとか、
教えてください。
0541nobodyさん2011/05/02(月) 17:40:15.11ID:???
>>540
>そしてPHPではそのための対策もされているそうで

うそだ
どこでそんな情報垂れ流してんだよ
0542nobodyさん2011/05/02(月) 17:41:43.71ID:???
>>540
cpuが化石でメモリがクソ小さい低スペ鯖と100万つぎ込まれて作られた鯖もあるのにどうやって答えろと
0543nobodyさん2011/05/02(月) 19:59:15.88ID:???
>>541
PHPでは、たとえばセッションIDが abc123 だとすると、先頭の何文字かを
使ってディレクトリをたどり、
a/b/sess_abc123
という名前のセッションファイルを作成することで、1ディレクトリ内での
ファイル数を抑える機能が標準であります。
これを知ったときはPHPすごいと思いました。
それで、具体的に1ディレクトリあたりどのくらいのファイル数だと
パフォーマンスが落ちるのかを知りたいと思いました。

>>542
はい、ですからスペック情報もこみで、こんなスペックだったらこのくらいの
パフォーマンスだったよというのを教えてください。
0544nobodyさん2011/05/02(月) 20:25:37.32ID:???
ext3だと上限32000ぐらいだっけ?今どうなってるかは知らんが
まぁ処理だけならext3で1万ぐらいは平気だと思うよ
0545nobodyさん2011/05/02(月) 21:04:30.74ID:???
>>543
ファイルシステムとPCスペックは同語かよしね
05465252011/05/02(月) 21:21:58.17ID:???
レスをくれた皆さんありがとうございました。できないとも言われたので
半信半疑ですが一応できたっぽいです。まだ言明最後までちゃんとは読んでなかったですが^^;
英文の単語の色分け表示をする為サクラエディタの正規表現キーワードに使うつもりですが、
他にもこうした方がいいとかあればよろしくお願いします。
preg_match_all("/(?<!\w)(?:I|you)(?!\w)/","you layout I.",$a);var_dump($a);
出力:array(1) { [0]=> array(2) { [0]=> string(3) "you" [1]=> string(1) "I" } } ?
そういえば複数マッチはall付でした。\wを使った方が短くなるのでこれを使おうと思います。
0547nobodyさん2011/05/02(月) 21:25:36.03ID:???
>>544
ありがとうございます。今はまだext3がいちばんよく使われてるみたいですね。
ReiserFSやXFSだとディレクトリあたりのファイル数が増えても性能劣化がほとんどないらしいですが
ext3でも1万くらいは平気なら、そう気にすることではないですね。
参考になりました。ext4ならどうなんだろう。

>>545
なにを怒ってるの?カルシウム足りてないんじゃ?
0548>>526=532=537=5382011/05/02(月) 23:05:31.84ID:???
>>546
できる方法を提示すればそれで良いかと思い、できないっていうレスはずっとスルーしてた。
サクラエディタのことは詳しくないが、キーワードリスト作る程度でハイライトしてくれても
よさそうに思うので、サクラエディタスレで聞いてみたらどうだろ。

>>544,547
ext3で6万ファイルぐらい入ってるのはみたことあるよ。
ファイル名を指定してアクセスする分には特に重くもなかった。
けど、ls -lなんかをやると非常に遅かったと思う。
0549nobodyさん2011/05/02(月) 23:22:55.10ID:???
ext3の上限32000はディレクトリ数だった・・・
まぁこれもカーネル弄ればどーとでもなる話だけど・・・
0550>>526=532=537=5382011/05/02(月) 23:53:52.60ID:???
ファイル数は制限ないの?
0551nobodyさん2011/05/02(月) 23:54:49.72ID:???
名前記憶されててびっくりしたw
0552nobodyさん2011/05/03(火) 01:02:38.42ID:???
INTの値だったかなんだったか忘れたが・・・
まぁここらの話はスレチすぎると思うw
05535252011/05/03(火) 06:20:46.53ID:???
>>526=532=537=538さんいつもレスありがとうございます。
少しググってみると.khp.kwdファイルを使ってもいける?みたいですね。
これも便利そうなので自分できなかったりしたらサクラエディタのスレでまた聞いてみます。
0554nobodyさん2011/05/03(火) 09:44:03.93ID:???
自演か
0555nobodyさん2011/05/05(木) 22:36:12.53ID:xGGX9oCi
### 011_counter.php ###
<?php
$fp=fopen("012_count.txt","r+");// 読み書きモードでオープン
$n=fgets($fp); // 文字列の読み取り
$n++; // カウントアップ
echo $n,"人目"; // 表示
rewind($fp); // 読み書き位置を先頭に戻す
fputs($fp,$n); // 書き込み
fclose($fp); // ファイルを閉じる
?>

### 012_count.txt ###
0

…これでhttp://localhost/php/011_counter.phpにアクセスすると
0 人目
が表示されます。
ただ、F5を押しても、他のサイトを見てまたアクセスしても加算されません。
012_count.txtの内容を3にすると、3 人目になりますが加算はされません。
テキストには「0の後に改行を入れると加算されない」とあるので、特に注意して改行を入れないようにしています。

どこがおかしいのでしょうか?
上のを普通に実行させるとどうなりますか?
0556nobodyさん2011/05/05(木) 22:45:23.58ID:???
>>555
アクセスした時点でプラス1足して表示されるようにコード書いたんだから0人目って表示されるのはおかしいでしょ
05575552011/05/05(木) 22:57:59.84ID:xGGX9oCi
>>556
レスありがとうございます!
ですよね?
大変申し訳ないんですが上のコードちょっと実行してくださいませんか?
というか、どこがおかしいか何か調べるデバッグの方法はないですかね?
05585552011/05/05(木) 23:03:45.73ID:xGGX9oCi
速報です。
たった今、$n++を$n=$n+1に変えたら加算されました。
これって$n++は何がしかの理由で動いていない、ということでしょうけど、
この原因に心当たりはありませんか?
0559nobodyさん2011/05/05(木) 23:08:28.59ID:???
改めて再現させることができるかどうかわからないけど、
$n++;
は本当に $n だったかどうか
05605552011/05/05(木) 23:15:08.05ID:xGGX9oCi
げげ!続報です。
先ほどの$n++を$n=$n+1の変更を011_counter_kai.phpという名前で保存して実行したのが>>558ですが、
元の011_counter.phpに戻しても加算されます!
いや、でも「間違いなく」改行コードは付けていませんでした。

と思ってもう一度実験してみました。
012_count.txtが28まで加算されてたんですけど、
消してまた"0"とだけ打って保存しました。
そうすると、また動かなくなりました。
それで011_counter_kai.phpを実行すると
また加算され始めます。

手打ちの"0"って改行コードか何か付いてしまうもんなんですか???
使ってるエディターはvimです。
気持ち悪いので説明をお願いします。
05615552011/05/05(木) 23:20:32.34ID:xGGX9oCi
>>559
では改めてコピペしてみます:

$n++; // カウントアップ

投稿前からまったくいじっていません。
こんなので躓いていたらこの先思いやられますね…。
ちなみに環境からなんからほぼすべての情報は
http://okwave.jp/qa/q6715796.html
に書きました('A`)<誰も答えてくれねぇ…
0562>>526=532=537=5382011/05/05(木) 23:23:37.44ID:???
>>560
改行コードつくよ。それがテキストファイルだから。
それより、それが問題で動かなくなるもんなの?
fputs($fp, "$n");
とかするとどうなるの
0563nobodyさん2011/05/05(木) 23:24:12.54ID:???
名前欄ハズカシイ。無視してくださいな
0564nobodyさん2011/05/05(木) 23:29:36.04ID:???
改行が問題だった。
$n=(int)fgets($fp); // 文字列の読み取り
ってやるといいのかな。
0565nobodyさん2011/05/05(木) 23:34:15.66ID:???
http://jp.php.net/manual/ja/language.operators.increment.php
この辺の影響かと
05665552011/05/05(木) 23:55:00.97ID:xGGX9oCi
>>564
あ、それなら動きますね!
一つ不思議なことに
011_counter.phpだと

0 人目

と、0と人の間にスペースが一つ空くんですが、
011_counter_kai.phpや>>564さんのを参照して作った011_counter_kei.phpは

1人目

のように0と人の間にスペース空きません。

>>565
この辺ですか?
Note that the ++ and -- don't convert a boolean to an int. The following code will loop forever.

function a($start_index) {
for($i = $start_index; $i < 10; $i++) echo "\$i = $i\n";
}

a(false);

This behavior is, of course, very different from that in C. Had me pulling out my hair for a while.

なるほど、これが宣言無しで動いてしまうPHPの盲点なんですね(ただ、Perlでは今のところこんなのに出会ったことはないですね…)。
元々はC言語書きなんで宣言無いのは違和感あります。

確かに自分のコード(テキストの載っているそのままですが)を見ると、文字列で取得してそのままインクリメントしてますね。
「基礎から学べるPHP標準コースウェア」河西朝雄 記述評論者、って本です(晒し上げ)。
勉強になりました。これからも勉強し続けます。ありがとうございました!
0567nobodyさん2011/05/06(金) 00:26:22.98ID:???
> PHP は、算術演算子で文字変数を扱った場合に C ではなく Perl の慣習に 従います。例えば、perl では 'Z'+1 は 'AA' を返しますが
> C では 'Z'+1 は '[' ( ord('Z') == 90, ord('[') == 91 ) を返します。
> 文字変数はインクリメントされることは可能ですがデクリメントは不可能であるということ、
> またプレーンな ASCII 文字 (a-z および A-Z) のみがサポートされるということに注意しましょう。

多分で申し訳ないんだけど、改行が含まれる文字列の場合、数値以外のものが含まれているため、
数値としてインクリメントは不可、また、文字列としてのインクリメントに関しては、[a-zA-Z0-9]以外の
文字が含まれているため不可、ということなんじゃないかなと。
> またプレーンな ASCII 文字 (a-z および A-Z) のみ
こう書いてるけど、Perlと同様、a-z および A-Z および 0-9 と思う。
05685552011/05/08(日) 02:20:11.69ID:???
>>567
ありがとうございます。
なるほど、そっちの方でしたか。
こういう問題があるならやっぱり宣言を必須にしてほしいですね。
0569nobodyさん2011/05/08(日) 02:29:31.79ID:???
続いてですが、同じ本がまたやってくれました。
連想配列の宣言が必要そうなんですが、どこにどう入れていいのか思い付きません。文章を引用します:

連想配列を利用して、ファイル056_word.txtの単語の頻度を配列に取得する例を示します。
strtokは文字列をトークンに分ける関数です。Windowsファイルの改行は\n\rなので、
\rも区切りに含めないと\rが単語として配列にカウントされてしまいます。

### 055_hash3.php ###
<pre>
<?php
$word=file_get_contents("056_word.txt");
$tok=strtok($word,".\n\r ");
while ($tok!=false){
$tokcount[$tok]++;
$tok=strtok(".\n\r ");
}
print_r($tokcount);
?>
</pre>

実行結果
Array
(
[This] => 1
[is] => 2
[a] => 2
[pen] => 1
[That] => 1
[book] => 1
)

続きます。↓
0570nobodyさん2011/05/08(日) 02:42:45.94ID:???
056_word.txtの内容は本には載っていないのですが、改行区切りと実行結果を考慮しますと、
### 056_word.txt ###
This
is
a
pen
That
is
a
book
…なのでしょう。それをそのまま実行すると、以下のメッセージと共に予想された実行結果が出ます:
Notice: Undefined index: This in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Notice: Undefined index: is in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Notice: Undefined index: a in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Notice: Undefined index: pen in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Notice: Undefined index: That in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Notice: Undefined index: book in /UNIONFS/opt/lampp/htdocs/php/055_hash3.php on line 7
Array
(
[This] => 1
[is] => 2
[a] => 2
[pen] => 1
[That] => 1
[book] => 1
)
…上のメッセージが出ないようにするにはどうすればよいのでしょうか?
あっ!今、気付いたんですが、インデックスが未定義と言っているんですね…。
そりゃ、今ファイルから切り取ってきたばかりの単語たちですから、定義されてたら逆におかしいですよね…?
しかも検索したら出てきました、エラーレベルを落とせばいいんですね。お騒がせしました。(^^ゞ
0571nobodyさん2011/05/08(日) 03:17:31.53ID:???
すごく斬新な質問だ
0572nobodyさん2011/05/08(日) 05:05:26.21ID:???
1行1単語である必要はないよ。トークン区切り文字列に半角空白入ってるでしょ。
それに、>>568のような気持ちがあるなら警告レベルを落とすなんて雑なことをせず、
コードを直すほうがいい。

それはそれとして、問題がいくつかあるので指摘。
・Windowsの改行コードはCRLF(\r\n)
・どこかに0という単語が含まれてるとそこで終わる
・古いPHPだともっといろんなところで終わる
これらの問題は while ($tok !== false) とすれば解決するけれど、
なぜそうなるのかはマニュアルでも見て。

てか、その本ダメだと思うなら捨てちゃえばいいと思うよ。
著者サイトで正誤表が公開されてないかの確認はしてる?

# 昔は出版社に誤植の指摘すると図書券くれたりしたもんだけど今はないのかな。
0573nobodyさん2011/05/09(月) 20:22:58.78ID:???
>>572
ありがとうございます。
直せるんですか?
直せるなら直したいです。

今、正誤表あるのか調べてみましたけど、無いみたいですね。
でも、サンプルがダウンロードできました!
055_hash3.php、仰るとおり while ($tok !== false) に訂正されてましたよ。w
056_word.txtも二行で書かれてました。
!=と!==の違いはこの本で説明されてました。

でも、実行するとやっぱり同じメッセージが。
どうやってこれを直すのですか?
0574nobodyさん2011/05/09(月) 20:36:04.22ID:???
定義されているか判別して、されていなかったら初期化する
0575nobodyさん2011/05/11(水) 01:50:04.62ID:???
>>574
ありがとうございます。
死ぬほど忙しいので、もうしばらくお待ちください。m(__)m
0576nobodyさん2011/05/11(水) 02:04:30.40ID:???
別に待ってないけど、、、死ぬほど忙しいってすごいね。
そんなに忙しくなったことないのは幸せなことだなぁ
0577nobodyさん2011/05/11(水) 07:11:21.64ID:???
お前574じゃねーだろ
0578nobodyさん2011/05/11(水) 09:11:54.11ID:???
>>573
http://gihyo.jp/book/2009/978-4-7741-3800-8/support
酷すぎて修正するだけ時間の無駄というか、別の本で勉強し直したら?
少なくとも仕事のために覚えたい人は読んじゃいけないコードばかり
0579nobodyさん2011/05/11(水) 13:36:35.29ID:???
>>577
ばれたか。でも>>572だよ。
0580nobodyさん2011/05/14(土) 15:23:36.30ID:???
超ヘボ質問なんですけど
if文の条件式に「もし改行があれば」ってどういう風に書けばいいでしょうか

今やりたいことは
あるテキスト(A.txt)を一行ずつ取得して
空行ならcontinue;みたいなことができれば最高です。

【ソース】
$text = fopen("C:/A.txt","r");
$i = 0;
while(($line = fgets($text))){
//もし改行のみならば飛ばして次の行に進むみたいなの作りたいけどwhile進まんお……^ω^;
if($line == \n){ //←これが不正
continue;
}else{
$i++;
file_put_contents("C:/".$i.".txt",$line);
}
}
0581nobodyさん2011/05/14(土) 15:32:47.25ID:???
if($line == "\n"){
■ このスレッドは過去ログ倉庫に格納されています