くだすれPHP(超初心者用)5

このエントリーをはてなブックマークに追加
1nobodyさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
2nobodyさん:2008/11/22(土) 08:10:59 ID:NVQ67oh4
いいの?いいの?
2GET
3nobodyさん:2008/11/22(土) 12:53:51 ID:???
$me = $_GET[3];
4nobodyさん:2008/11/22(土) 12:55:45 ID:???
3番目は[2]だろー
5nobodyさん:2008/11/22(土) 16:02:02 ID:???
プププ
6nobodyさん:2008/11/23(日) 02:46:28 ID:KQeB2dd8
1608年11月23日に3なのに『2get』と書いてしまい、

『500年ROMってろ!!』
と言われた者です。
あれから500年、ひたすらROMに徹してきました。
来る日も、来る日も。

そして今、
やっと2をget出来るだなんて………
感動で……胸が一杯です。
人間、辛抱すれば良いことって有るんですね!

こんな私ですが、
僭越ながらとらせて貰います…!
念願の2ゲットはもちろんこの書き込みです。
では・・


「6get!!!!」
7nobodyさん:2008/11/23(日) 02:49:23 ID:/R5EIGze
全スレでセッションデータの保存にDB使うのがいいのかどうかとか聞いてた者です。
お礼書く前にスレ落ちてしまったので。とても参考になりました。ありがとうございましたm(_ _)m
8nobodyさん:2008/11/23(日) 08:57:21 ID:???
ファイルを開かずにサーバー側からファイルを読み込むにはどうすればいいのでしょうか
日付が変わる前に毎日ログをとりたいんですが どのようにすればいいでしょうか
9nobodyさん:2008/11/23(日) 11:44:09 ID:???
>>1
10nobodyさん:2008/11/23(日) 12:15:51 ID:???
ファイルを読み込むってことはファイルを開いてるってことなんだよ
11nobodyさん:2008/11/23(日) 13:10:19 ID:???
>>6
100年はえーよ
12nobodyさん:2008/11/23(日) 14:46:21 ID:???
>>8
1行目は意味不明。2行目についてはログ取るなら
fopen($path, 'a');
あたりか。

$pathとしてファイル名に日付でユニークな名前付ければ良い。(例:yyyy_mm_dd.csv)
$pathのあるディレクトリのパーミッションにさえ気をつけておけば、
あとは日付が変わるたびに新しいファイルが出来てそこに追記処理が行われる。
13nobodyさん:2008/11/23(日) 16:19:53 ID:/R5EIGze
C++をちょっとやった者なんですが、PHPにはインライン関数みたいなのってないのでしょうか??
14nobodyさん:2008/11/23(日) 18:06:49 ID:???
>>13
関数呼び出しのコストを気にする必要がある状況でPHPを使うことが想定できない。
15nobodyさん:2008/11/23(日) 19:17:52 ID:???
>>8
俺も1行目の意味がよくわからないけど、
たぶんヒントとして「cron」で検索したら思ってる情報が出るんじゃないかな?
16nobodyさん:2008/11/24(月) 00:29:44 ID:???
てtest
17nobodyさん:2008/11/24(月) 11:38:04 ID:???
IFを使って、A=0 かつ 文字数が8文字 かつ 文字の種類が半角英数字のみなら実行
それ以外はエラー、という条件を作りたいのですが、どうすればいいでしょうか、教えてください。
18nobodyさん:2008/11/24(月) 11:50:36 ID:???
>>17
Aとはなんぞ?意味分からんがこういう事かな?

$A = 0;
$fuge = 'xyz12345';

if ($A === 0 && preg_match('/[0-9a-zA-Z]{8}/D', $fuge)) {
 // 実行処理
} else {
 // エラー処理
}
1918:2008/11/24(月) 11:51:43 ID:???
>>18
×preg_match('/[0-9a-zA-Z]{8}/D', $fuge)
○preg_match('/^[0-9a-zA-Z]{8}$/D', $fuge)
20nobodyさん:2008/11/24(月) 14:21:44 ID:???
俺なら

$A = 0;
$fuge = 'xyz12345';

if ($A !== 0) {
 // エラー処理
}
if (!preg_match('/^[0-9a-zA-Z]{8}$/D', $fuge)) {
 // エラー処理
}
//処理続行

にする。
じゃないと条件が増えたり実行処理の中でインデントがたくさん出てきたら読みにくくなる。
どっちの条件にマッチしなかったのかも判定しやすいし。
21nobodyさん:2008/11/24(月) 14:38:36 ID:???
読みやすさをとるかCPUの負荷軽減をとるか
22nobodyさん:2008/11/24(月) 14:42:35 ID:???
どうせ弱小サイトのくせにスケーラビリティなんて気にすんな。最適化は自分の頭に実行しろ
23nobodyさん:2008/11/24(月) 14:44:07 ID:???
こういうゆとりが増えて困ってます。
24nobodyさん:2008/11/24(月) 14:49:07 ID:iKPzd1uP
クラス内の変数を同クラス内の関数で参照する場合って
$this->xxx
のように参照しなければいけませんよね。
しかし、関数内で変数を参照したりいじったりする機会が多いせいで
this->の部分が非常に邪魔なのですが、
この部分を略して記述する方法ってありませんか?
25nobodyさん:2008/11/24(月) 14:52:52 ID:???
ない。そんなとこで楽する他にお前のプログラミングにはやるべきことがあるだろ。
26nobodyさん:2008/11/24(月) 14:58:21 ID:???
あるだろw
$fuge =& $this->var;
27nobodyさん:2008/11/24(月) 15:07:27 ID:iKPzd1uP
>>26
ありがとうございます。
28nobodyさん:2008/11/24(月) 15:51:52 ID:???
>>25はおそらくループの中なんかでも平気で
$this->hoge[] = 何かしら;
とかやってるんだろうなw
29nobodyさん:2008/11/24(月) 15:54:29 ID:???
それすると何か違いあんの?
30nobodyさん:2008/11/24(月) 15:58:45 ID:???
>>29
場合によっては見通しが悪くなる。
つか普通に考えてメンバ変数をループとかやらんだろw
31nobodyさん:2008/11/24(月) 16:22:57 ID:???
例えば
$this->users[] = new User(ほげほげ)
とかやらね?

見通しについては、いちいちローカル変数に代入するほうが悪くなると思うが
3213:2008/11/24(月) 16:42:34 ID:E3B5gNBM
>>14
ありがとうございます。
すいませんもうちょっと分かりやすく教えて頂けると・・
とりあえずインライン関数っていう概念はないってことででしょうか?
33nobodyさん:2008/11/24(月) 16:55:12 ID:???
>>32
ぐぐれよ
34nobodyさん:2008/11/24(月) 17:45:35 ID:???
>>32
インライン関数がどういう概念なのかを教えてくれれば答える
PHPを知らないあなたと、C++を知らない僕とで対等ではないか。
35nobodyさん:2008/11/24(月) 17:54:32 ID:???
俺もC++知らないから調べてみたんだが
コンパイラがないPHPには関係ない話じゃないの?
3613:2008/11/24(月) 21:35:01 ID:???
>>35
>>コンパイラがないPHPには関係ない話じゃないの?
そーか汗
ありがとうございましたm(_ _)m
37nobodyさん:2008/11/24(月) 22:52:12 ID:???
http://d.hatena.ne.jp/ockeghem/20081101/p1
このページに

$threat "'OR '='";
$threat = mysql_real_escape_string($treat);
SELECT account_number, name, address FROM account_data WHERE account_number = $threat

は、mysql_real_escape_string で、$threatが
''or''=''
とエスケープされるので、SQLインジェクションになるというように書いてあるのですが、
自分の環境
Windows XP
PHP 5.2.0
MySQL 5.0.27
では、mysql_real_escape_string($treat) は
\'OR \'=\' 
とエスケープされ、SQLインジェクションになりませんでした。
この記事は合っているのでしょうか??
どなたか教えてくださいm(_ _)m
38nobodyさん:2008/11/24(月) 23:27:44 ID:???
その人のは他のも動かないのあるね。

その上、○○の本のインジェクションが動かないとか
攻撃して書いちゃってるのがかなり痛い人だな。
39nobodyさん:2008/11/25(火) 03:38:24 ID:???
2chのdatファイルをPHPを使ってダウンロードしたいのですが、
どうしたらよいですか?
ブラウザを使ってアクセスするとできるのですが、PHPだとできません。
40nobodyさん:2008/11/25(火) 04:01:15 ID:???
レスポンス見ろ
41nobodyさん:2008/11/25(火) 19:28:56 ID:???
>>39
馬鹿発見
42nobodyさん:2008/11/25(火) 21:18:12 ID:qzrO9YC/
googleみたいに、特定のサイトを自動でインデックス化して検索できるようにするスクリプトってありますか?
phpで書かれたサーバ設置型を探しています。
43nobodyさん:2008/11/25(火) 21:24:20 ID:???
ありますか?ってなんだよ
そりゃ誰かが作りゃあるだろバカか?
44nobodyさん:2008/11/25(火) 22:14:09 ID:???
>>42
普通そういう事はPHP単体ではやらないかな…。
Namazuなんかはperl版はあった気がするが。
要望そのものには応えられないが「Namazu PHP」でググるといい。

>>39
具体的にコード載せては?
PHP5でphp.iniでallow_url_fopenがONになっていたら、
取ってくるだけならfile_get_contents()1行で終わりだけどね。

まぁ実際は2chの鯖と行儀よくおしゃべりしないと駄目なので
ttp://age.s22.xrea.com/talk2ch/
ttp://www.monazilla.org/
辺り読んで理解できないなら、もう少し勉強してからにした方がいい。

既に既存のスクリプトもあるみたいなので「PHP 2ch Viewer」とかでググルといい。

>>37
そもそも、Prepared Statement使ったほうがいいと思う。
PHPならPDO使えば簡単楽ちん。
45nobodyさん:2008/11/25(火) 22:20:24 ID:???
>>44
thx
46nobodyさん:2008/11/26(水) 17:34:56 ID:???
更新ボタンを押すとおk、キャンセルの確認画面を表示させる程度のものを作りたいのですが
phpのなかでjavascript使いたいんですが書き方がわからないです・・・
どなたか教えてください
47nobodyさん:2008/11/26(水) 17:37:01 ID:???
echoで出力する
<?php
echo "<script type=\"text/javascript\" src=\"hoge.js\"></script>\n";
?>

あるいは一回PHPモードから抜ける
<?php
//php script
?>
<script type="text/javascript" src="hoge.js"></script>
<?php
//php script
?>
4837:2008/11/26(水) 18:03:51 ID:???
>>38
>その人のは他のも動かないのあるね。
む、そうなんですか。

>>44
pdo->prepare 既に使ってたんですが、プリペアードステートメントってこれのことだったんですね。
名前だけ知ってたんですが、何のことかよく分かっていませんでした汗
ありがとうございましたm(_ _)m
4946:2008/11/26(水) 18:41:54 ID:???
>>47
早いレスありがとうございます。

print("<table border=\"1\">");
print("<tr><td>ISBNコード</td><td>題名</td><td>著者</td><td>出版社</td><td>出版年</td><td>更新</td><td>削除</td></tr>");
while($row=mysql_fetch_array($res)){
print("<tr>");
print("<td>".$row["bisbn"]."</td>");
print("<td>".$row["btitle"]."</td>");
print("<td>".$row["bauth"]."</td>");
print("<td>".$row["bpub"]."</td>");
print("<td>".$row["bpubyear"]."</td>");
print("<td><a href=\"update_form.php?bid=".$row["bid"]."\">更新</a></td>");
print("<td><a href=\"library_delete.php?bid=".$row[bid]."\">削除</a></td>");
print("</tr>");
}

さっきボタンと書きましたが実際ボタンじゃなかったです。すいません。
MySQLに接続した図書検索のページなんですが、更新をクリックしたときに確認画面を出したいです。
出力するのとPHPモードから抜けるの試したのですが、
前者は"更新"が表示されなくなってしまいました。
後者はページ自体表示できなくなってしまいました。。
50nobodyさん:2008/11/26(水) 19:06:12 ID:???
件数0なんでは?
51nobodyさん:2008/11/26(水) 19:12:23 ID:???
>>50
いえ、入れてあります。
52nobodyさん:2008/11/26(水) 19:14:40 ID:???
じゃ出るはず
53nobodyさん:2008/11/26(水) 19:16:47 ID:???
print("<td><a href=\"update_form.php?bid=".$row["bid"]."\"><script type=\"text/javascript\" src=\"hoge.js\">更新</script></a></td>");
だとまずいんでしょうか。。
54初心者です:2008/11/26(水) 19:52:25 ID:51PdxGfY
PHPのフォームからカタカナを検索すると?????になってしまうんですが
どうしたらいいのでしょうか?
データベースはMySQLで、文字コードはUTF−8に揃えてるはずなんですが^^;
いきずまってます。色々なサイト見てますが、出来ません><
55nobodyさん:2008/11/26(水) 19:53:27 ID:???
html的におかしいでしょ
更新ボタンをjavascriptで制御したいなら
<input type="button" onclick="javascript:event" value="更新">
onclickあたりでイベント発生させないと
ボタンじゃなくてアンカーだとしても同じこと
<a onclick="javascript:event">更新</a>
56nobodyさん:2008/11/26(水) 20:10:53 ID:???
>>54
×揃えてるはず
○揃ってない
57nobodyさん:2008/11/26(水) 21:00:48 ID:???
>>53
49のコードは嘘なん?
58nobodyさん:2008/11/26(水) 21:31:17 ID:???
>>57
32行しか書き込めないようなのでテーブルのとこだけ抜き出してみました
>53のはこうしてみたけどできませんでした、みたいな感じです

>55の方が指摘してくれてるonclickというのを調べて見ていますが
htmlもjavascriptも全然なもので・・・
59nobodyさん:2008/11/26(水) 21:35:46 ID:???
まずは、PHPとJSの特性を知ることからじゃないの?
どうちがうかってちゃんと把握できてるの?
60nobodyさん:2008/11/26(水) 22:12:18 ID:???
<a href="update.php" onClick="return confirm('更新するぞゴルァ!');">更新</a>

PHPまったく関係ないけどこういうことがやりたいとか?
61nobodyさん:2008/11/26(水) 23:53:42 ID:???
>>60
何・・・だと・・・?
phpもjavascriptもなくできるんですね・・・or2
ありがとうございます、ありがとうございます(´;ω;`)
62nobodyさん:2008/11/27(木) 00:05:14 ID:???
.jsファイルを読み込むのがJavaScriptだと思ってるのか
63nobodyさん:2008/11/27(木) 00:13:42 ID:???
>>60
これってjavascriptって書いてないけど、
javascriptで動いてるんだよね?
64nobodyさん:2008/11/27(木) 00:25:36 ID:???
手抜きせずに基礎からちゃんと学ぼうよ
65nobodyさん:2008/11/27(木) 15:04:23 ID:???
ttp://act.st/php/doc/lapis/のアクセス解析を
ttp://www.php-labo.net/download/blog/のブログにincludeを使った形で組み込みたくて
ブログのindex.phpに書いてみたんですが画面が白くなったり機能しなかったりします。

なんとか正常にinclude出来ないでしょうか。
66nobodyさん:2008/11/27(木) 15:11:21 ID:???
67nobodyさん:2008/11/27(木) 15:26:09 ID:???
改造とかそんなたいそうなものじゃなくてなんとか
include_once('lapis/write.php');の一行を正常に稼動させたかっただ・・・
68nobodyさん:2008/11/27(木) 15:32:35 ID:???
display_errors = On
69nobodyさん:2008/11/27(木) 17:16:11 ID:???
>>68
iniでやったけどやっぱり真っ白でした

最初の行に入れると真っ白だけどアクセス解析は機能しているようです。
70初心者です。助けてください:2008/11/27(木) 21:17:24 ID:7UVbMsyC
>>56
PHPinfo()でdefault_charsetってとこを見たらnovalueとかなってたんだけど
そこもUTF-8とかにしないといけないのかな?
MySQLの方もUTF-8にしてるんですが…
それとも、SQL文を送信するとこで何か他の方法があるんですか?
文字コードで気をつけないといけないところは他にもあるんですか?
漢字とアルファベットは検索出来ます。
71nobodyさん:2008/11/27(木) 21:22:32 ID:???
mbstringの設定しろよ
72nobodyさん:2008/11/28(金) 02:13:04 ID:6eZt1xO+
ttp://www.s-memo.net/blog/2006/12/pear.php
を参考にしてPEARを導入しようと思ってたのですが
go-pear.batをダブルクリックしても何もでません
よろしくおねがいします
73nobodyさん:2008/11/28(金) 10:03:58 ID:???
74nobodyさん:2008/12/02(火) 21:02:45 ID:ZnEnsvHS
誰かお願いします。

内容
フォームからPOSTのメソッドを利用して「ユーザーID」と「パスワード」送信する。
受信したファイルでは「ユーザーID」と「パスワード」の妥協性を判断して出力する。

条件
データ送信用ファイル:input.html
データ受信用ファイル:check.php

input.htmlには2種類のテキストボックスを配置させる(txtId と txtPass)
check.phpでは以下の4種類のメッセージを出力させること

・ユーザーIDとパスワードの組み合わせが正しい場合
「認証成功!」
・ユーザーIDが存在しない場合
「ユーザーIDが存在しません」
・ユーザーIDは存在するがパスワードが誤っている場合
「パスワードが違います」
・ユーザーID、またはパスワードのいずれかが空白の場合
「ユ−ザーIDまたはパスワードが未入力です」

check.phpにおけるユーザーIDとパスワードの組み合わせ(3ユーザー分)
ユーザーID:guest admin test
パスワード:goma adm test

スクリプト以下の配列に格納し、プログラムによって判断を行う。
ユーザーID:$arrUser $arrUser = array(・・・・);
パスワード:$arrPass &arrPass = array(・・・・);

課題で出たのですが、受信側の処理がわからないです。
誰かお願いします。
75nobodyさん:2008/12/02(火) 21:09:11 ID:???
ID無し質問スレで書いた者だけど
マルチは最悪だな
76nobodyさん:2008/12/02(火) 21:54:03 ID:???
マルチとかはどうでもいいが
コピペで我が物顔で提出されるかと思うと、教える気失せるな。
せめて、ここまでやってみましたけどうまくできなせん、とか
努力を見せてほしいね。
講義をちゃんと聴いてない74が悪い
77nobodyさん:2008/12/02(火) 21:55:58 ID:ZnEnsvHS
ユーザーIDとパスワードのとこの配列の使い方が分からないです
78nobodyさん:2008/12/02(火) 22:40:15 ID:???
「ここから先ぜんぶわからないんだけど〜」
79nobodyさん:2008/12/03(水) 06:17:09 ID:???
>>74
PHP Tutorial #2 - Login form
http://jp.youtube.com/watch?v=7JmSf9JfQjY
80nobodyさん:2008/12/03(水) 20:41:42 ID:SBXcaNw7
fputcsvを使って入力データの保存を行おうと思ったのですが、
こういうのってトランザクションはどうするべきなのでしょうか?
81nobodyさん:2008/12/03(水) 20:43:40 ID:???
ロックかければ?
82nobodyさん:2008/12/04(木) 01:40:03 ID:???
ロック
ロック
ここでロック
あなたから
ロック
手を伸ばして
受け取ってよ
83nobodyさん:2008/12/04(木) 02:49:51 ID:6sD/pbke
pecl4winが落ちてるからimagick.dllがダウンロードできないんだけどどっかにないかな?
84nobodyさん:2008/12/04(木) 10:12:39 ID:???
自分でビルドすれば?
85nobodyさん:2008/12/04(木) 14:10:31 ID:???
$arr=array(15,34,10)
配列の要素の和を求める関数ありますか?
echo 59 の様な感じです。
86nobodyさん:2008/12/04(木) 14:19:24 ID:???
>>85
array_sum
87nobodyさん:2008/12/04(木) 14:21:17 ID:???
>>86
ありがとうございます。
88nobodyさん:2008/12/04(木) 18:07:23 ID:???
PHPは本当にどんな関数でもあるな
perlだったら、いちいち自分で書かないといけない。
89nobodyさん:2008/12/04(木) 18:20:27 ID:???
>>88
世の中はPHPとPerlだけではないのだよ?
90nobodyさん:2008/12/04(木) 18:24:46 ID:???
PHPはウェブありきで設計された言語だからな
つーか関数多過ぎ
91nobodyさん:2008/12/04(木) 18:26:39 ID:???
いやいや少ないだろ・・・
92nobodyさん:2008/12/04(木) 22:46:59 ID:???
多いから何なんだろう
学習コストが高い?
優秀な言語?
93nobodyさん:2008/12/04(木) 23:39:39 ID:ge2NtuW2
formタグを使って配列を受け渡したいのですが、そういうのってどうしたら良いのでしょうか?
94nobodyさん:2008/12/05(金) 01:26:39 ID:zoYImp6K
配列で0〜99まで格納ってわざわざ全部array(で打ち込んでいくしかないですか!?
95nobodyさん:2008/12/05(金) 01:33:39 ID:jMVHCYUr
>>94
意図がわからんが、rangeとか?
96nobodyさん:2008/12/05(金) 01:37:35 ID:???
日本語でOK
どういう値を渡したいのだ?
97nobodyさん:2008/12/05(金) 04:44:41 ID:???
$a=(0-99);

とかでしょ?
98nobodyさん:2008/12/05(金) 09:25:55 ID:???
rangeだろ
99nobodyさん:2008/12/05(金) 16:28:02 ID:fefynmKZ
csvファイルの15行目から25行目を読み込むみたいな処理をしたいんですが、
こういうファイルの途中から途中までの読み込みって出来ますか?
あるいは、やっぱり一行目から読んでいって、
目的のデータにくるまでは捨てていくしかないでしょうか?
100nobodyさん:2008/12/05(金) 16:31:02 ID:???
捨てていくっていう表現はおかしいな
例えばfileで配列に読み込んで
[14]〜[24]までを取り出せばいい
ファイルの中身が膨大でメモリの負担を考えるなら
また別の方法を考えるべきだが
101nobodyさん:2008/12/05(金) 17:33:46 ID:???
読み込み位置を変えるseekというものはあるが、
テキストファイルのように1行の長さが不定なものには使えない。
102nobodyさん:2008/12/05(金) 18:34:07 ID:???
Googleのように、ログインした後はブラウザを一回閉じても
再度開いたらログイン済になっているような機能を実装したいんですが、
参考になるサイトなど教えて貰えませんでしょうか?

クッキーを使うのかと思ったらGoogleはクッキーオフでも上記動作をしているようです。

こういう機能をなんと呼ぶのかも判らないので名前を教えて貰えるだけでも結構です。

よろしくお願いします。
103nobodyさん:2008/12/05(金) 19:22:16 ID:???
>>102
うそつけw
Cookieオンにしろといわれたぞ
IPやホスト名を鯖側で記録しておいて
変化するまで有効にする手なんてのも考えられるが
一般的じゃないしセキュリティ的にも危険
104101:2008/12/05(金) 19:38:49 ID:???
>>103
すいません、Firefoxでやったらエラーでました。

IEでクッキーを受信するときにダイアログを表示するように設定して、
僕のサイトで警告が出るのを確認してからGoogleにログオンしたんですけど
何故かオンになってたみたいです。

クッキー使うって事はユーザー名とか暗号化して記録すれば良いんですね。
ありがとうございました。
105nobodyさん:2008/12/05(金) 19:53:32 ID:???
Cookieを使ったセッションだと思うぞ。
106nobodyさん:2008/12/05(金) 20:20:33 ID:???
セッションでブラウザ閉じた後情報が保持されるかアフォ
107nobodyさん:2008/12/05(金) 21:13:25 ID:???
Cookieの中身を見てみりゃいいのに…
108nobodyさん:2008/12/05(金) 21:45:22 ID:jMVHCYUr
>>106
セッションID持たせて有効期限。
109nobodyさん:2008/12/05(金) 22:26:45 ID:???
実験してみればわかると思うけど、
クッキーを手動で削除すれば
強制ログアウトさせられるよ
110nobodyさん:2008/12/06(土) 09:19:14 ID:figaW1Vu
質問です

携帯サイトのトップページで
ttp://hoge.com/

リンク@←(id=1)
リンクA←(id=2)
リンクB←(id=3)
リンクC←(id=4)
リンクD←(id=5)

と表示し、ttp://hoge.com/?id=1とパラメータをつけて飛んで来た場合

リンクA
リンクB
リンクC
リンクD
リンク@

と、そのidのリンクを一番下へ自動で並び替えるにはどう書いたら良いでしょうか?
よろしくお願いします。
111nobodyさん:2008/12/06(土) 09:45:43 ID:???
$url= array("リンク1", "リンク2", ""
$count= count($url);
for ($id=$_GET['id']; $id<$count; $id++){
if ($id >= $count) $id= 1;
$link.= $url[$id];
}

こんなイメージでできそう
112nobodyさん:2008/12/06(土) 10:09:00 ID:???
$url = array(1 => "リンク1", 2 => "リンク2", ....
uksort($url, "cmp");
print_r($url);
function cmp ($a, $b)
{
switch ($_GET['id']) {
case $a:
return 1;
case $b:
return -1;
default:
return $a - $b;
}
}
113110:2008/12/06(土) 10:23:36 ID:???
ありがとうございます!!
今から出勤なので帰ってからやってみます。楽しみです
マジ感謝です。
114nobodyさん:2008/12/06(土) 19:41:46 ID:uHkDvuuY
onclickのようなイベントハンドラに対してphpのコードを実行させたいのですが、
こういうのってphpではできない感じでしょうか?

具体的にやりたいことは、
ボタンが押される
→Javascriptの関数を呼び出し入力項目をチェック
→良ければ、次のページに渡すphpの変数をセット
→次のページに遷移
って感じです。
115nobodyさん:2008/12/06(土) 19:44:30 ID:yGRUMO6W
できる。
116nobodyさん:2008/12/06(土) 19:48:48 ID:???
>>115
あれ?
サーバサイドのphpではクライアントサイドのJavascriptみたいにonclickでの
関数呼び出しは出来ないってのは良いですよね?
Javascriptの関数の中でphpを記述するってことですか??
117nobodyさん:2008/12/06(土) 20:44:44 ID:???
うん。
ちなみに
>具体的にやりたいことは、
>ボタンが押される
→Javascriptの関数を呼び出し入力項目をチェック
>→良ければ、次のページに渡すphpの変数をセット
>→次のページに遷移
これ読む限りではphpいらないと思うが?
118nobodyさん:2008/12/06(土) 21:05:23 ID:???
>>117
なんか自分でもそうやったら出来ないだろうかとやってみたんですが、
エラーコンソールに invalid flag after regular expressionと出てうまくいかないんです。
具体的には以下のように書いていて、
チェックフラグがtrueならそのページで使ったデータを二次元配列から取り除いて、
残りを次のページに渡すデータとするみたいな感じです。

<script type="text/javascript">
function isAllChecked(){
//省略
if(!flag)return false;
<?
global $num,$data;
for($i=0;$i<$num;$i++)array_shift($data);
?>
return true;
}
</script>
//省略
<input type="submit" value="次へ" onclick="return isAllChecked()" />
119nobodyさん:2008/12/06(土) 21:06:41 ID:???
javascriptの中にphpコード書いてどうすんの?
120nobodyさん:2008/12/06(土) 21:08:28 ID:???
>>114
書かれてるのは、onclickで変数をエンコードしてページを呼び出すだけだよな

もし、onclickでphpのコードを実行した結果をページに反映させたいなら
ajaxの仕組みを利用する。
xajaxってライブラリが実現してるのがその仕組みに近い。
シームレスに関数を呼び出す感じになるよ
121110:2008/12/06(土) 22:06:53 ID:???
何度もすみません
>>111 >>112試してみたのですがうまくできませんでした。
$url = array(
1 => "<a href=\"test1\">test1</a>",
2 => "<a href=\"test2\">test2</a>",
3 => "<a href=\"test3\">test3</a>",
4 => "<a href=\"test4\">test4</a>",
5 => "<a href=\"test5\">test5</a>",
);

if ($_GET['id'] == test1) {
$url1=$url[2];
$url2=$url[3];
$url3=$url[4];
$url4=$url[5];
$url5=$url[1];
} elseif ($_GET['id'] == test2) {
$url1=$url[1];
$url2=$url[3];
$url3=$url[4];
$url4=$url[5];
$url5=$url[2];
〜〜
以下elseifが数個ってな感じでやったのですがもうちょっとシンプルと言うか効率の良いやり方無いでしょうか?
122nobodyさん:2008/12/06(土) 22:28:18 ID:???
>>118
それじゃPHPの実行結果がjavascriptの一部と解釈されるだけだ・・・
123nobodyさん:2008/12/06(土) 22:38:00 ID:???
>>121
なんというO(n^2)
124nobodyさん:2008/12/06(土) 23:31:00 ID:???
>>121
おいおい、意味わかってれば、>>112は動くぜ?
a href= test1ならそれなりに工夫しろよw
125110:2008/12/07(日) 02:06:11 ID:???
>>112が何でこんな動きになるのか理解できませんが思い通りにいけました!
ありがとうございます
お世話になりました〜!!
126nobodyさん:2008/12/07(日) 22:04:39 ID:???
PHPの関数の数って全部でいくつあるの?
127nobodyさん:2008/12/08(月) 00:43:56 ID:???
約142,000くらい
128nobodyさん:2008/12/08(月) 01:06:08 ID:???
マニュアルの関数一覧は5900個
日々拡張されたり廃止されてるから増減するし
マニュアルにのってないのもあるのでなんともいえないな
PEARは各種FWのを含めるとさらに増える
ユーザー定義関数も含めると天文学的な数値になる
(9割型コードがかぶってたりコードは違うが動作が同じのも含む)

実際によく使うのは100個もないので数なんてどうでもいいやね
129nobodyさん:2008/12/08(月) 01:10:38 ID:???
6,000もあるのか
全部おぼえようとしていたが、
やる前に質問してよかった。
130nobodyさん:2008/12/08(月) 01:11:12 ID:???
それで、
「よく使う100個」の
リストは、どこかにある?

それから優先的に学習していきたい。
131nobodyさん:2008/12/08(月) 01:13:49 ID:???
アマゾンでPHPで一番売れている本を買おうと思ったんだけど、
なんでPHPってカテゴリはないの?
132nobodyさん:2008/12/08(月) 01:14:33 ID:???
確かに関数多過ぎてうんざりするからよく使うものとうんこ臭いのに分けてほしい
133nobodyさん:2008/12/08(月) 02:58:26 ID:???
ソース見りゃいいじゃん
134nobodyさん:2008/12/08(月) 03:07:52 ID:???
>>130
やっているうちに覚えていくから心配しなくていいよ
とにかく本でもマニュアルでもいいから順序通りにやっていってみ
135nobodyさん:2008/12/08(月) 03:13:30 ID:???
>>134
その作業が死ぬほどつまらんから
聞いているのです

「試験に出る英単語」って本知ってる?

あれは出現頻度順に並べたものなんです
136nobodyさん:2008/12/08(月) 03:29:01 ID:???
お前にゃ向いてないから諦めれ
137nobodyさん:2008/12/08(月) 04:24:39 ID:???
口よりも手が動かないと・・・
138nobodyさん:2008/12/08(月) 04:41:01 ID:???
>>135
似たようなリスト(別スレで見かけたのでコピペ)
ttp://www.1x1.jp/blog/2008/06/php_framework_function_count.html

しかし、英単語だって実用的に使って覚える方が楽だぞ
実用を伴わないで関数を勉強する方が余程ストイックな作業だと思うが
139nobodyさん:2008/12/08(月) 08:32:40 ID:???
>>138
>>135じゃないけど
俺は暗記得意だから先に仕様書とかリファレンスに一通り目を通してから実戦のほうが合ってる
結局人それぞれじゃね?
140nobodyさん:2008/12/08(月) 09:49:20 ID:???
>「試験に出る英単語」って本知ってる?
あれは出現頻度順に並べたものなんです

試験対策ってことは、当然一通り順序どおりに英文法をマスターしたうえで読む本だよな。
英単語だけ覚えても文章の1つも作れないだろ。
プログラミングだって順序立てて学習するのを避けて関数を覚えようとしても意味がない。
141nobodyさん:2008/12/08(月) 20:33:26 ID:???
死ぬほどつまらんならやらなければいいのにね
142nobodyさん:2008/12/08(月) 20:43:10 ID:???
しかし、ある程度勉強しないと
何も作れないじゃん
143nobodyさん:2008/12/08(月) 20:50:23 ID:???
じゃ勉強すればいいじゃん
144nobodyさん:2008/12/08(月) 21:11:07 ID:???
だがプログラミングの勉強はつまらんのだよ。
こういう風に教えてくれよ

http://jp.youtube.com/watch?v=kzmHmYHy-P8
145nobodyさん:2008/12/08(月) 21:14:57 ID:???
じゃやらなきゃいいじゃん
146nobodyさん:2008/12/08(月) 21:18:11 ID:???
相手にするだけ時間の無駄だぞ
放置してやれ
147nobodyさん:2008/12/09(火) 02:09:02 ID:???
どもども。

<タグ>あうあう</タグ><タグ>あうあう</タグ>ゲロゲロ<タグ>あうあう</タグ>

みたいな文字列からタグの中身をタグも含めて配列に格納していきたいのですが、どうやったらいいのでしょうか。
148nobodyさん:2008/12/09(火) 02:16:12 ID:???
XML DOMをつかいましょう!
149nobodyさん:2008/12/09(火) 02:20:39 ID:???
150nobodyさん:2008/12/09(火) 02:42:47 ID:???
xmlに正規表現てw
151nobodyさん:2008/12/09(火) 02:50:19 ID:???
なんでxmlって決め付けてるんだよ
152nobodyさん:2008/12/09(火) 03:19:03 ID:???
>>149
できました!

>>148
こんど勉強してみます。
153nobodyさん:2008/12/09(火) 04:53:11 ID:???
トップページに検索フォームを用意しておいて
トップページと検索結果ページのレイアウトを全くの別物にしたい場合
GETに中身がなかったらトップページへ
中身があったら検索結果ページへとか言う風にif文でhtmlを丸ごと括って分岐させる感じでいいの?
なんかスマートじゃない気がするんだけど
154nobodyさん:2008/12/09(火) 05:12:49 ID:???
検索アクションがあったら中身が空であっても検索結果を出すべきだろ
検索単語を入れるように検索結果のページで促したり
単純にヒットしなかったと検索結果を出すのが普通
155nobodyさん:2008/12/09(火) 13:03:23 ID:???
いいことを教えてやろう。

<form action="search.php">
156nobodyさん:2008/12/09(火) 14:41:55 ID:???
入力エラーだからlocationヘッダでトップページに返せばいいんじゃない?
できればエラーメッセージつけてかえすと親切だな。
157nobodyさん:2008/12/09(火) 20:34:24 ID:???
トップページと同一のファイルで検索結果を表示しようとしてるの?
普通に検索用のスクリプト作ればいいじゃない。
158nobodyさん:2008/12/09(火) 22:03:51 ID:???
symfonyで作ったスクリプトって、単体じゃー動かないの?
symfony本体無いと動かない?

上の質問が正解だとすると、レンタルサーバではほぼ使えないですよね?
symfony使えるサーバじゃないと。
159nobodyさん:2008/12/09(火) 22:10:06 ID:???
>>158
フレームワークなんだからそれ通さないと動かないに決まってるだろ
PHPのフレームワークなんだからPHPで書かれてるだろ
PHPさえ使えればどの鯖でもつかえるんじゃね?
160nobodyさん:2008/12/09(火) 22:56:48 ID:???
よろしければご質問いたします

データベースに内に用事のある日付と人のIDを入れておくテーブルが有ったとします
(DATE, ID)
(11/29, K)
(12/5, F)
(12/7, F …みたいな感じ)

そこからSQL文で月を指定してまとめてデータを抜き出しておいて
画面テーブルのトップに日付と曜日の一覧を表示させておいて
人別に用事のある日付に×を書き込みたいのですけど
(5日と7日に用事があればF, , , , ,×, ,×, …みたいな感じ)

SQL文で範囲選択して取得したデータを保持しておいて
その中に条件にあったデータが有るかをチェックする事って出来ますか?

for文で画面テーブルを作成しながら$iの値を日付に合わせて増やしていき
SQL文で一度取得したデータの中に$i(日付)と同じものが有れば
×を記入さていこうかなと考えています

お分かりになるかた、もっといい方法を思いつく方
ご教授を願えたら有り難く思います
161nobodyさん:2008/12/09(火) 23:00:33 ID:???
> ご教授を願えたら有り難く思います

「ご教授願えますか」なら兎も角、不思議な日本語。
162160:2008/12/09(火) 23:09:26 ID:???
>>161
早速ご指摘を頂き有り難う御座います

追加ですが配列を使用せずに記述をしたいと考えております

お分かりになる方、もっといい方法を思いつく方
ご教授願えますか
163nobodyさん:2008/12/09(火) 23:15:35 ID:???
このスレを教授が見てる確率は限りなく低いので
無理でないかと思います
大学で聞くのが一番早いと思うのでそちらをお勧めします
164160:2008/12/09(火) 23:21:52 ID:???
>>163
度々のご指摘ありがとう御座います

正しくは教示の様ですね

>>160>>162に関しまして
お分かりになる方、もっといい方法を思いつく方
ご教示願えますか
165nobodyさん:2008/12/10(水) 00:15:00 ID:???
>>164
SQLのクイズ出してるつもりならスレチだよ。
MySQLならgroup_concat(DATE) と group by IDを使って行を取得というのが楽
標準SQLで組もうとすると、ちょっとパズルチックになるからね。
他人が書いた答えは知ってるけど、オリジナルじゃないからググってみることをお勧めする。

個人的にはfor文で処理するより、rangeと配列、array_mapでサクッとテーブル書く方が好きだな。
ループはダサい。

でもあえて配列を使わないんなら、ORDER BY ID, DATEでクエリの結果セットを
ループしながらifとswitchでテーブル組めば普通にできる。
166160:2008/12/10(水) 07:53:28 ID:???
>>165
ご返答有り難う御座います

現在インターン中なのですが
そこで課題として従業員のシフト表を作成しています

従業員テーブルから情報を引き出して
それを元に休日テーブルから情報を引き出して表を作成しようと考えています

当初は一度配列に入れてから配列一つひとつをfor文とif文で参照しようと考えていましたが
担当の方にそのアイデアを話してみた所
配列に入れなくても出来ると一蹴されて困っていました。

一度>>165様に頂いたワードを調べて参考にしたいと思います

また別の方法が有りましたら教えていただけると
有り難く思います
167nobodyさん:2008/12/10(水) 07:54:29 ID:???
2chでアルゴリズム聞いて実装するとか嫌なインターンだなw
168nobodyさん:2008/12/10(水) 08:13:18 ID:???
いや、話を聞いてみるとよくある話。
ちゃんと説明しない嫌な担当だな。

ところで、面白い方法(拡張しないなら冗長だけど)あるよ。
配列もforループも使わない。たぶんifも最小限になる。
RecursiveIteratorIteratorっていうのがあるから、
個人イテレーターを親に日付イテレーターを子に持つようなイテレーターを
定義して、PDOをマップする。日付イテレーターのnext()は次にSQLデータの
有無にかかわらず日付をインクリメントする。
フィルターイテレーターも同時に実装して月別フィルターとか年別フィルター
とか週別フィルターとかも実装する。
テーブルソースの作成部分はデコレーターでデータをラップして文字列化
するようなものにする。
すると、
$obj = new shiftTable(array('scope'=>'month', 'target' => 12));
echo $obj;
で表が自動出力されるようなものが作れる。
169160:2008/12/10(水) 08:34:45 ID:???
>>167
グループ課題の担当している部分なのでグループ全体に
影響が出ないよう早く見当を付けたいと思い質問させていただきました

>>168
私の知識では拡張という言葉がどれ程の物をあらわしているのか分かりませんが
>>160は若干端折って記入しており、実際には×では無く
休日テーブルを書き換える為のチェックボタンが付いており
従業員が現在休みになっている日は初期画面で黒くチェックが入って表示され
画面テーブルの外部にsubmitボタンが付いています

担当の人の話では
休日テーブルから5と7という値を取得すれば配列に入れなくても
画面テーブルの5番目に表示させてから7まで空のセルをつくり
7番目でまた表示させることが出来ると言われました

それを解決しようと思い>>160の質問に至ったわけです

>>168様の方法も調べて参考にさせて頂きたいと思います
ご返答ありがとうございました
170nobodyさん:2008/12/10(水) 08:48:49 ID:???
> 休日テーブルから5と7という値を取得すれば配列に入れなくても
> 画面テーブルの5番目に表示させてから7まで空のセルをつくり
> 7番目でまた表示させることが出来ると言われました

なんというトーニャハーディング、できりゃいいんかい!って感じの考えだな。
SELECTで前回表示のレコードを取得しとくのか、forループで前回データを保存するのか
いずれにしても、表示ロジックをデータ処理に放りこむのか・・・すごいな。
そういうところでは、はいはいって言うこと聞いて逆らわない方がよさそうw

もし、フォーム要素なんかが絡むんなら>>168の方法で基本ロジックを作成して
デコレーターでラップするといいんだけど、習得には多少なりとも時間が
かかるかもしれないのでお勧めはしない。
171nobodyさん:2008/12/10(水) 10:52:26 ID:???
fromのポストでsubmitのnameの値を取得する方法を教えてください。

<input type=”submit” name="取得する値” value=”送信” />

172nobodyさん:2008/12/10(水) 11:00:06 ID:???
$_POST['取得する値']
173nobodyさん:2008/12/10(水) 11:01:37 ID:???
もしくは"送信"が限定されてるなら、array_search("送信", $_POST);
174nobodyさん:2008/12/10(水) 11:07:56 ID:???
>>173
誤解していました。
ありがとうございます。
array_search覚えました。
175nobodyさん:2008/12/10(水) 11:29:34 ID:???
少しおしえてください。
PDOでInsertをプリペアドステートメントで行うとき、値が空っぽの時、
NULLを挿入したいのですが、NULLじゃなく、''の空が挿入されます。

これってPDOのオプションで自動で''の時は、NULLを挿入することは出来ないのですか?
176nobodyさん:2008/12/10(水) 11:34:32 ID:???
どんなソースで実装したの?
177nobodyさん:2008/12/10(水) 12:04:52 ID:???
>>176

例えばこんな感じ

$id = 1;
$name = 'abc';
$tel = '03-3333-3333';
$email = '';

$sth = $dbm->prepare("INSERT INTO `test` (id, name, tel, email) VALUES (?, ?, ?, ?);");
$sth->execute(array($id, $name, $tel, $email));

この場合、$email が空になってるので、''でInsertされたと同じになって、
NULLが入りませんので、これをPDOのオプションでNULLに出来たらなと・・

178nobodyさん:2008/12/10(水) 12:13:26 ID:???
$emailをNULLにすればよろしい
179nobodyさん:2008/12/10(水) 12:33:55 ID:???
$sth->execute(array($id, $name, $tel, null));
にすれば、NULLが入るのは分かってるのですが、、それはめんどくさいですよね。。
180nobodyさん:2008/12/10(水) 12:47:47 ID:???
空文字入れたいのか、null入れたいのかの区別がつかないじゃないか。
もし空文字のときは必ずnullでいいならば、間に関数1つかませばいいべ。
181nobodyさん:2008/12/10(水) 12:57:22 ID:???
>>179
バインドメソッドで明示的に指定すれば?
182nobodyさん:2008/12/10(水) 12:57:33 ID:???
そうですよね。
かますことにします。

ありがとうございます。
183nobodyさん:2008/12/10(水) 13:03:54 ID:???

もう一つ聞いてもいいですか?
PDOとMySQL5です。

PDOを使ってSELECTをした場合、クエリーキャッシュは使われてるのでしょうか?

(PDO::MYSQL_ATTR_USE_BUFFERED_QUERYは無効にしてあります)
184nobodyさん:2008/12/10(水) 13:13:49 ID:???
MySQLのクエリーキャッシュのことを言ってるなら、MySQLの設定次第
185nobodyさん:2008/12/10(水) 13:18:14 ID:???
書き忘れましたが、PHP5.2.0です。

>>184
PHPのネイティブ関数であれば、クエリーキャッシュは効いてるですが、PDOを使うとだめぽっい。。


PHP5.2.1にアップするしかないのかなぁ・・。
186nobodyさん:2008/12/10(水) 14:41:30 ID:???
動画データFLVの1コマ目だけをjpegにして、サムネイル化して表示
をしたいのですが、どうすれば出来るでしょうか?


PHP5.2を使ってます。詳しい方いらっしゃったらおしえてください。
187nobodyさん:2008/12/10(水) 14:48:09 ID:???
>>185
PHP5.2.0ってだめなの?5.1.17ぐらいから使えるはずだけど。
まぁ、書いてるんだしそうなのかな・・・
188nobodyさん:2008/12/10(水) 15:00:33 ID:???
>>187

PHP5.2.0のPDOだとクエリキャッシュが効いてないみたいですね。

PDO::MYSQL_ATTR_USE_BUFFERED_QUERYを有効にすると効きますが、副作用があって。。
189nobodyさん:2008/12/10(水) 18:06:24 ID:???
どんな?
190nobodyさん:2008/12/10(水) 18:38:54 ID:???
LIMIT ?,? とかやるとエラーになります。
なので、LIMIT 0,10 とか LIMIT {$offset}, {$limit}とやれば良いんですけど・・。 
191nobodyさん:2008/12/10(水) 19:00:30 ID:???
まだ勉強中なんですが、phpで実現可能かどうか質問させて下さい

メールを受信した後、それをHTMLとして表示させたいんです。
エンコード状態のマルチパートなメール(ソース?)があるとして、
それをHTMLとして出力するライブラリみたいなのとかありますか?
問題は画像の部分だと思っています。(どう実現するかイメージも沸きません)

具体的な使い方は調べますので、あるかどうかと、
名前とかヒント教えてもらえるとありがたいです。

ちなみに、レンタルサーバ借りて(Web/Mail/php/DB)
iPhoneから使えるWEBメールシステムを自分の為に作ってます
192nobodyさん:2008/12/10(水) 19:05:12 ID:???
PEAR Mailに受信したメールを読ませれば添付ファイルまで抽出できる。
メールサーバが立ってるなら、.forward等でphpプログラムに渡すと簡単。
他所のメールサーバーでも、POPやIMAP用の関数でアクセスすることも可能。
解釈部分はPEARが実績があると思う。
193nobodyさん:2008/12/11(木) 01:53:18 ID:???
>>191 レンタルサーバだと難しいと思うよ
194nobodyさん:2008/12/11(木) 12:19:57 ID:???
>>191
iPhoneならGmail使えば良いのに・・・
195nobodyさん:2008/12/11(木) 12:31:14 ID:???
191です
ありがとうございます

>>192
PEAR MailのPOP3でメールとってますが
画像部分を一旦保存しなきゃダメですかね〜
極端な話、メールのテキストと埋め込み画像をまとめて
1つの画像に落としてくれる関数があればいいんですけど都合よすぎですね><
>>193
ネックは画像を抽出する部分とかでしょうか?
>>194
Gmailはメール入力が難ありで・・・
Yahoo!JメールはiPhone用のメール作成画面ないし・・
それと、
あるAさん宛てのメールとAさんから来たメールを抽出して
一覧で見せるようなのをイメージしてます
196nobodyさん:2008/12/11(木) 15:16:35 ID:???
>>195 画像抽出は簡単だけど、
送信されてきたメールをプログラムに渡すにはサーバの設定が必要で、
POPから取得するとCRONの設定が必要。
メール送信して、スクリプトにアクセスするならいいけど。
197nobodyさん:2008/12/11(木) 15:47:11 ID:???
特定URLに定期的にアクセスしてくれる、CRONサービスがあるから、
それを利用すればOK
198nobodyさん:2008/12/11(木) 15:48:27 ID:???
WebMailに使うならアクセス時に全部取りに行けばいいので、
cronはいらないんじゃね?
199196:2008/12/11(木) 17:30:03 ID:???
ごめん勘違いしてた。じやあIMAP関数使えば楽勝。
200nobodyさん:2008/12/11(木) 22:26:19 ID:nahQekTa
//↑DB接続からSELECT文実行まで↑
$perPage=10;
$index=0;
for($i = $index; $i < $index + $perPage ; $i++){
$row = $res->fetchRow(DB_FETCHMODE_OBJECT,$i);
echo $row->id;
//↓$row->***を使用した処理
}
クエリ結果$resから順次行を取り出し$row->***で取得されるデータを使って処理をしたいのですが、echo $row->idを実行してもなにも表示されません(ソース上も)。

$row = $res->fetchRow(DB_FETCHMODE_OBJECT,$i);
↑この部分がおかしいんだとは思うんですが・・・
201nobodyさん:2008/12/11(木) 22:51:56 ID:???
fetchRowで$iやめてみたら?
そのままだと$rowでbreakする必要があるかもしれないけど。
202nobodyさん:2008/12/11(木) 22:54:53 ID:nahQekTa
>>201
レスありがとう

本当は$indexに現在のページ数が入って$indexの時は1〜10行目まで、$index=2のときは11〜20行目までという風に処理をさせたいのでfetchrowに$iを使わずwhileなどで処理できないんですorz
203nobodyさん:2008/12/11(木) 23:04:10 ID:???
>>202
それ、結果セット時点でseekしといた方がいいんじゃないの?
全結果セットから、毎回行指定じゃ重いでしょ。

とはいえ、やりたいことができない理由は他にあるだろうね。
クエリが間違ってるとかない?
204nobodyさん:2008/12/11(木) 23:12:27 ID:???
>>203
レスどうもです。
まだ勉強中なのでseekっていうのが・・・・
結果セットから配列なりに格納して結果セットを開放しておくということでしょうか?

クエリのコードは
sql = "select * from table ORDER BY id DESC ";
$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}
で、他のwhileで全行取り出しした場合には上手くうごいてくれているのでクエリは大丈夫かと思うのですが・・・
205nobodyさん:2008/12/11(木) 23:46:54 ID:???
あぁ、ごめん、seekって勢いでミスったw

ところで、クエリにLIMITを含めておくわけにいかないの?

あと、fetchRowの行指定は1回だけ発動して、あとはループでいいと
思うんだけど。

あと、単にフィールド名が違うとかじゃないよね?
var_dumpとかしてます?
206nobodyさん:2008/12/12(金) 01:30:02 ID:???
普通limitだわな
207nobodyさん:2008/12/12(金) 11:46:01 ID:MaDVXqed
if (!is_dir($dir)) {
$rc = mkdir($dir, 0755);
でディレクトリーを作ったら所有者がwwwになります
これをuserにして作ることはできないのでしょうか?
よろしくお願いします
208nobodyさん:2008/12/12(金) 12:32:00 ID:???
そんなことができたらセキュリティホールになるでしょう。

しかし、対応としては
Webサーバーの実行ユーザーを変えるか
root権限wで実行してchownもしくは、mkdirのオプションを買うか
CGIモード+suexecで起動するか、
setuidした別のラッパーをかますか、

ま、そんなとこだろう。
209nobodyさん:2008/12/12(金) 12:51:31 ID:???
パーミッション777にしとけば困ることないお^^
210nobodyさん:2008/12/13(土) 14:37:33 ID:???
そんなことをしたらセキュリティホールになるでしょう。
211nobodyさん:2008/12/13(土) 15:33:14 ID:???
>>210
使い方次第でしょ
212nobodyさん:2008/12/13(土) 22:52:57 ID:6AnKxTPA
move_uploaded_fileでアップロードされたファイル保存するときに別ドライブを指定するパスの書き方がわからんorz
213nobodyさん:2008/12/13(土) 23:02:04 ID:???
そうか
214nobodyさん:2008/12/14(日) 00:20:22 ID:???
現在、Windows(XP)で自宅サーバを構築し簡単なphpを使ったサイト(システム)を運営しています。
ところが諸事情の為にレンタルサーバを借りて、自宅サーバで運営していいる物とは異なる
別のphpサイトを構築しようと思っているのですが、現在は自宅サーバで運営しているサイトは、

C:\Program Files\Apache Software Foundation\Apache2.2\htdocs

の直下に配置されたphpのみが起動する作りになっておりますが、
ASP.netの様にプロジェクトごとにディレクトリを分ける事は、出来ないでしょうか?

例)
 @C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\自宅サーバ\index.html
 AC:\Program Files\Apache Software Foundation\Apache2.2\htdocs\レンタルサーバ\index.html

要するに開発しているサイトによってディレクトリを分けたいです。




215nobodyさん:2008/12/14(日) 00:21:45 ID:???
rewrite使えば?
216214:2008/12/14(日) 00:38:16 ID:???
ぐぐってみたところ

動的ページを静的ページにする (mod_rewrite)


というページがトップに表示されたのですが、いまいち私のやりたい事は実現出来なさそうです。
私の認識が誤っているだけかもしれませんが、その「rewrite」というのは
一体何なのでしょうか?

もし参考になうサイトをご存知でしたらお教え願います。
217214:2008/12/14(日) 00:52:09 ID:???
自己解決しました。
mod_rwrite
という方法を使わなくてもディレクトリをもう一つ用意するだけで事足りました。
218212:2008/12/14(日) 01:50:36 ID:???
>>213
もし知ってたら教えてくだされorz
219nobodyさん:2008/12/14(日) 01:51:30 ID:???
いいよorz
220212:2008/12/14(日) 03:24:13 ID:???
>>219
かたじけないorz
221212:2008/12/14(日) 12:58:16 ID:vrT8sAoj
(´・ω・`)
222nobodyさん:2008/12/14(日) 13:21:34 ID:???
教えてあげようか?
223212:2008/12/14(日) 13:23:01 ID:???
>>222
(*´д`;)はいっ
224nobodyさん:2008/12/14(日) 15:06:54 ID:???
D:/
とかじゃだめなん?Windowsでやった事ないから勘だけど
225nobodyさん:2008/12/14(日) 15:11:30 ID:???
で、でぃーどらいう゛っ?
226nobodyさん:2008/12/14(日) 16:29:22 ID:???
>>224
ちょと試してみます
227nobodyさん:2008/12/14(日) 16:32:11 ID:???
>>224
これでいけました!!
盲点だったorz
228nobodyさん:2008/12/14(日) 17:42:47 ID:???
ほうほう,それで?
229nobodyさん:2008/12/15(月) 06:26:47 ID:???
file_put_contents -- 文字列をファイルに書き込む

連続して fopen() , fwrite() , fclose() をコールすることと等価です。

この関数ってどうなの?
230nobodyさん:2008/12/15(月) 06:49:26 ID:???
は?
231nobodyさん:2008/12/15(月) 06:52:34 ID:???
短く書けるから便利といえば便利だがPHP4では使えない
PHP5なら好きなほう使えばいい
232nobodyさん:2008/12/15(月) 12:09:28 ID:???
PHP5つかってます。
youtubeみたいな動画共有サイトを作りたいのですが、動画のアップロードは出来るのですが、
アップロードされた動画をサムネイルで表示する方法がわかりません。どなたか詳しい方いらっしゃったら
教えてください。
233nobodyさん:2008/12/15(月) 12:27:15 ID:???
>>232
それよりも作るのはかまわないけど公開するならインフラ周りのこと考えろよ?
まわりに迷惑かけるのだけはやめてくれな
234nobodyさん:2008/12/15(月) 22:35:55 ID:???
>>233
インフラを考えずに作ったって糞遅くなるのは目に見えてるよw
しかも維持費にどれだけ金が掛かると思ってるんだろうね。

一流のエンジニアが集まって作られているYouTubeですらあれだけ
重いのに。
235nobodyさん:2008/12/15(月) 22:42:38 ID:???
>>234
> インフラを考えずに作ったって

それを言うなら、考えて、では。
236nobodyさん:2008/12/15(月) 23:16:47 ID:???
インフラはAmazon EC2、S3とかがオススメだな
回線速度の面で微妙かもしれんが
237SF4マニア:2008/12/16(火) 01:03:15 ID:???
本職ではクラサバをメインに開発しているPGですが、
趣味で2年程前からphpでWEBシステムを作っています。

私は、実務でphpを使ったWEBシステムの構築は行った事がないのですが、
実務ではどういった開発環境でphpを使ったWEBシステムの構築を行っているのでしょうか?

因みに、自分はsakuraエディタだけです。
正直、画面のレイアウト等プログラミング以外の部分で時間を取られており、
ASP.net(VS)での開発と比べて無駄に工数が掛かってしまう感が否めません。

皆さんは、どういった環境でphpWEBシステム(サイト)を構築しているのでしょうか?
開発工数を大幅に削減出来るお勧めソフトがあればぜひお教え願います。

238nobodyさん:2008/12/16(火) 01:10:54 ID:???
>>237
普通はデザイナーを使うと思うが・・・
239nobodyさん:2008/12/16(火) 01:19:53 ID:???
テキストエディタからレベルアップしてけ
240nobodyさん:2008/12/16(火) 01:22:14 ID:???
>>238
という事は、画面の作成はデザイナに任せてシステム部分だけをphp(マ)が開発していいるのですか?


>>239
オススメのソフトはありますか?
VSのデザイナ画面は個人的に非常に使い易いです。
241nobodyさん:2008/12/16(火) 01:22:54 ID:???
All-in-OneのPDTいれたらhtmlもデザイナでいじれるから楽チンや
242nobodyさん:2008/12/16(火) 01:23:38 ID:???
>>240
EmEditorいいよ
243nobodyさん:2008/12/16(火) 01:41:30 ID:???
>>241 >>242
参考にさせて頂きます。
244nobodyさん:2008/12/16(火) 01:51:06 ID:???
デザイナーというのは、人のこと?
それとも、デザイナーという、ソフトのこと?
245nobodyさん:2008/12/16(火) 02:13:10 ID:???
人名
246nobodyさん:2008/12/16(火) 02:20:37 ID:???
>>244の意訳

ボタン配置とかして直感的にデザインしたものをコード変換する機能のことか、
職業としてのデザイナーのことかどっちなの?
247nobodyさん:2008/12/16(火) 03:06:22 ID:???
>>244
238は職、241は機能
248nobodyさん:2008/12/16(火) 20:12:46 ID:XMobQjfA
>>110で質問した者ですが
>>112さんの教えてくださった

$url = array(1 => "リンク1", 2 => "リンク2", ....
uksort($url, "cmp");
print_r($url);

のとこを、

$url = array(apple => "リンク1", banana => "リンク2", ....
uksort($url, "cmp");
print_r($url);

みたいにidを数字ではなく文字にしたい場合どう書けば同じように動作するか教えてほしいです
宜しくお願いします。
249nobodyさん:2008/12/16(火) 20:19:24 ID:???
応用能力皆無なのな
250nobodyさん:2008/12/16(火) 20:46:30 ID:???
>>248
function中の$a - $bのところ、strcmp($a, $b)に変える
251nobodyさん:2008/12/16(火) 21:20:01 ID:???
>>250
ありがとうございます
説明不足ですみません。やってみましたがこれはアルファベット順で並ぶのでしょうか?
キー順でソートしたいのです。
一応自分なりに調べてはいるのですが
foreach ($url as $key => $value)
なんて文をどこかへ追加って感じで方向は合っているでしょうか?
252nobodyさん:2008/12/16(火) 21:22:18 ID:???
応用能力皆無なのな
253nobodyさん:2008/12/16(火) 21:25:19 ID:???
>>251
ちなみに並ぶけどさ、やってみたんなら並ぶかどうか確認できるでしょ?
配列の並べ替えが終わったら、foreachでもeachでも好きなループ組めば?
254nobadyさん:2008/12/17(水) 17:32:12 ID:???
質問があります。PHP5でflvファイルの最初のコマを取得して、画像としてサムネイル化
する事って出来るのでしょうか?レベルが高いかも知れませんが、詳しい方がいらっしゃったら
教えてください。
255nobodyさん:2008/12/17(水) 17:42:39 ID:???
なんかこないだからその質問を何回も見るんだけど。
256nobodyさん:2008/12/17(水) 17:52:54 ID:???
とりあえず環境書いてないから適当に答えるけど
ffmpegインストールしてphpから呼び出して使えば出来ると思う。
257nobodyさん:2008/12/17(水) 18:01:15 ID:???
ググれば簡単に出てくるのに
258nobodyさん:2008/12/18(木) 05:46:38 ID:???
教えてください。

PDOでPostgreSQLにアクセスしています。
ところが、全部PDOメソッドだけで実現できないことがあり、
PDOとpg_*関数を混在使用するハメになりました。

そこで質問ですが、
PDOオブジェクトで、pg_*を使うためのデータベースハンドル
を得ることはできるのでしょうか?
できないのなら、PDOでのDB接続とは別に、pg_connectで
DB接続する必要があるということでしょうか?
259nobodyさん:2008/12/18(木) 07:10:30 ID:???
実現できないことって何?
260nobodyさん:2008/12/18(木) 09:11:27 ID:???
>>259
PDOで、PostgreSQLのbytea型に格納してあるバイナリデータを
読み出そうとすると、不具合があるようなのです。
(公式情報ではないので自分の勘違いかもしれませんけど)

そこでほとんどの処理はPDOで行い、bytea型のR/Wのみ
pg_*関数を使いたいと思っています。
(pg_escape_bytea()とか)
261nobodyさん:2008/12/18(木) 09:45:27 ID:???
「PDO」つったら、普通はPECL::PDOの意味?
262nobodyさん:2008/12/18(木) 13:15:36 ID:???
標準クラスのだろ
263nobodyさん:2008/12/18(木) 17:34:01 ID:???
URLの最後が文字列にするにはどうしたらいいですか?
具体的には
http://test/user/favorite
のようなものを作るにはどうしたらよいですか?
264nobodyさん:2008/12/18(木) 18:26:00 ID:???
>>263
mod_rewrite
265nobodyさん:2008/12/18(木) 19:28:42 ID:???
>>264
ありがとうございました。
266nobodyさん:2008/12/20(土) 19:15:51 ID:???
テキストボックスでセッションに入れた後、確認画面で表示させてみると
「ソ」と「\」を入力した場合には「\」がどんどん追加増加されるのですが
原因がわかりません。

以上の問題の解決の仕方や、検索でSQL文やPHP言語やHTMLを入力された場合の
表示にバグを発生させない方法をご存知の方、どうか教えて頂けないでしょうか
267nobodyさん:2008/12/20(土) 19:18:52 ID:???
>>266
magic_quote_gpc
268nobodyさん:2008/12/20(土) 22:06:37 ID:maii3k3G
pagerで
1 2 3 4 5
ではなく
0 1 2 3 4
とゼロから始めるにはどうすれば良いでしょうか?
269nobodyさん:2008/12/20(土) 22:21:47 ID:???
>>267
ありがとうございました
270nobodyさん:2008/12/20(土) 23:15:27 ID:???
>>268
何のpagerだよ
質問の仕方にも程があるぞw
271nobodyさん:2008/12/20(土) 23:16:59 ID:???
PEARじゃね
俺なら迷ってる時間があったら丸ごと全部再実装する
272nobodyさん:2008/12/20(土) 23:18:25 ID:???
全部再実装とか、よっぽど暇なのか。
273nobodyさん:2008/12/20(土) 23:18:35 ID:???
結果を-1するかソースで-1すればいいじゃん
274269:2008/12/21(日) 01:06:19 ID:???
すみませんでした PEARのPagerです。
>>273さんのやり方で例えば
ttp://www.phpbook.jp/pear/pear_pager/index4.html
このページではどこで-1すれば良いでしょうか?
275nobodyさん:2008/12/21(日) 01:23:54 ID:???
$naviの中かgetLinksメソッドの中
276269:2008/12/21(日) 01:37:38 ID:???
>>275
ありがとうございます。やってみます!
277nobodyさん:2008/12/21(日) 12:44:01 ID:???
PEAR::Pagerの出力はHTMLタグだからいじりづらいんだよ。
入力はこっちでいじればいいが、出力はgetLinks()の結果を正規表現とかで置換するしかない。
どっちかっつーといじりたいのは変数の方じゃなくて画面表示の方だろうしな。
インターフェイスはおおむね決まってる(パクる)から、残りの作業は実装だけだしな。
278nobodyさん:2008/12/21(日) 12:51:30 ID:???
別にソースいじればいいじゃん
279nobodyさん:2008/12/21(日) 18:50:29 ID:???
HTMLからURLで変数をもらいその変数でrequireするtxtファイルを変え
ページの管理を楽にしようと思っているのですが
馴れていない人がやると、まずいことはありますでしょうか
280nobodyさん:2008/12/21(日) 18:58:59 ID:???
ぐぐれ
281nobodyさん:2008/12/21(日) 19:06:00 ID:???
>279
txtをrequireする、の意味がまったく分からん。

ファイル名に「../../../」とか指定されると、ヤバいファイルを開かれる危険がある(ディレクトリ・トラバーサル脆弱性)。
総じて、予期しないファイルを開かれないような対策が必要になる。

数種類しかないなら、決まった文字列以外は許可しないようにする。
たくさんあってそうするのが面倒なら、「/」を入力されたらエラーにする。
hoge.txtを開きたいなら「hoge」の部分だけ入力させる、などの対策が必要。
ファイル名は自分で決められるんだし、[0-9a-Z-_]あたり以外の文字列が来たら問答無用でエラーになるようにするのが無難だな。
282nobodyさん:2008/12/21(日) 19:34:34 ID:???
>>281
ありがとうございます

HTMLで記述したファイルの拡張子をPHPに変え、
任意の部分にrequireでtxtファイルを読み込むと
メニューなどの管理が楽になると某サイトで読みました
それをメニューではなく内容に変えれば、
外観や増えていくページの管理が楽になるのかなってことで
初心者ながら、勉強もかねて質問をさせていただきました


自分の決めた文字列だけを対象にするということで

switch ((string)$page):
case 'log1':
case 'log2':



break;
default:
echo "ファイルが見つかりません";
endswitch;

こういった記述でよろしいのでしょうか
283nobodyさん:2008/12/21(日) 19:45:19 ID:???
勉強なら自分で調べろやボケ
284nobodyさん:2008/12/21(日) 20:02:13 ID:???
>>283
勉強は兼ねてるだけだろ?よく読めよ
285nobodyさん:2008/12/21(日) 20:04:15 ID:???
>>283
頼むからコテつけてくれ
286nobodyさん:2008/12/21(日) 20:04:16 ID:???
caseを使えば、たぶん安全。
コードがないとなんとも言えんわな。
やってみて、動くコードができてから来たほうがいい。
何もやらずにいきなり聞く姿勢は歓迎されんし。
287nobodyさん:2008/12/21(日) 20:09:44 ID:???
これでいいんでしょうか
どう書けばいいんでしょうか
じゃ勉強の糞の足しにもなりゃしねぇよカス
288nobodyさん:2008/12/21(日) 20:12:29 ID:???
>>287
おまえなんでこのスレにいんの?
いやむしろ何のために生きてんの?w
289nobodyさん:2008/12/21(日) 20:27:01 ID:???
>>287
スレの趣旨すら分からないなら口出すな
290nobodyさん:2008/12/21(日) 20:38:48 ID:???
>>283
努力します

>>286
中途半端でした、すみません

一応、問題なく動いたので評価をお願いしたいです

log001.txt
<b>表示されました</b>

index.html
<A Href="pagelog.php?log=log001">log1へ</A>

pagelog.php(head略)
<body>
<?php
$_GET['log'];

switch ((string)$log):
case 'log001':
case 'log002':
require($log.".txt");
break;

default:
echo "ファイルが見つかりません";
endswitch;
?>
</body>
291286:2008/12/21(日) 21:01:57 ID:???
>290
それが動く事に少なからず衝撃を受けた。

requireやincludeは、基本的にPHPプログラムを読み込むためのもの。
それだとたぶん、txtの中にPHPプログラムとして解釈可能な文字列があると、実行されてしまう。
単純にテキストファイルの中身を読み込む場合、file_get_contents()を使ったほうがいい。
動くなら問題ないっちゃあないんだが…
292nobodyさん:2008/12/21(日) 21:07:15 ID:???
って、ああそうか、よく考えたら動いて当たり前か。

「評価されると危ないので避けたほうがいい」という意見は変わんないけどな。
txtは自分が編集するから、安全といえば安全なのだが、無駄な危険の芽は摘んだほうがいい。
いつの日かうっかりtxtにexit();とか書き込んだらエラーになるし。
293nobodyさん:2008/12/21(日) 21:39:17 ID:???
>>292
うっかりが起きないとも限らないので
file_get_contents()について調べてみます。
勉強になりました。
ありがとうございました。
294nobodyさん:2008/12/21(日) 21:45:08 ID:???
>>290
まぁ、動いているので問題ないけど、
コーディングのマナーとしてはよろしくないかもね
・require等の中に変数は入れない方がいい
・比較するときにキャストして使う時にキャストしないというのは問題になることがある。

前者は設定によってはリモートでのコード実行につながるから
後者は比較が通っても、問題のある変数で実行する可能性があるから
295nobodyさん:2008/12/21(日) 21:53:40 ID:???
>>292
なんねーよ
echoと同じだ
296nobodyさん:2008/12/21(日) 22:28:16 ID:???
>>294
参考になります

まだまだ馴れてない部分が多いので基礎から覚えるために
やはり、書籍を一つ買おうと思います
297nobodyさん:2008/12/21(日) 22:58:47 ID:???
うむもう二度と来ないでくれ
298nobodyさん:2008/12/21(日) 23:00:10 ID:???
>>297
来なければ、いいだけじゃね。
299nobodyさん:2008/12/22(月) 18:00:09 ID:???
プログラミング初心者だけどPHP難しすぎて投げそう(';ω;`)
2週間位で基礎を学ぶには何したら良いんですか(';ω;`)ウォウォ…
300nobodyさん:2008/12/22(月) 18:02:13 ID:???
教えてくれそうな男に体でも売ればいいんじゃね
301nobodyさん:2008/12/22(月) 18:06:33 ID:???
もうウンコして寝込むしかねぇ・・・
302nobodyさん:2008/12/22(月) 18:21:33 ID:???
マニュアル嫁
303nobodyさん:2008/12/22(月) 18:26:34 ID:???
どっかから小さめなスクリプト落してきて、
「なんで?なんで?なんでこうなるの?」と思いながら丁寧に読んだり、
チョっとした機能を追加してみたりして、
いろいろもがくといいんじゃないだろうか。
304nobodyさん:2008/12/22(月) 20:08:10 ID:???
初心者が読めるようなちょっとしたスクリプトは大抵がPHP4時代の糞CGIで変な癖がついたりする罠。
グローバル空間にexplodeしてたりするスクリプトが多すぎる。
305nobodyさん:2008/12/22(月) 20:09:08 ID:???
explode→extract
306nobodyさん:2008/12/22(月) 20:09:52 ID:???
>>304
それがどうしたの。
307nobodyさん:2008/12/22(月) 20:18:07 ID:???
んなの読まなきゃいいだろ
308nobodyさん:2008/12/22(月) 22:15:31 ID:???
>>299
初めてのプログラミングがPHPで、配列/連想配列でこけたけど、しばらくしてからやってみたらすぐ理解できた。
あんまり根詰めないで気楽にまったりやるといいよ。
読むだけじゃなくて手も動かすといい。
サンプル丸写しして、いろいろ自分で弄ってみるんだ。
エラー出ればメッセージ出て何が原因かすぐわかるしね。
309299:2008/12/22(月) 22:16:58 ID:W3OrxKsT
>>303
どっかから?
どっかから?そのどっかから?はどっかから?
つまり僕が言いたいのはどっかから?なんです。お願いします。

310299:2008/12/22(月) 22:39:19 ID:W3OrxKsT
>>308
( ´_ゝ`)フーン
「どうもありがとう」って言っといてだってお兄ちゃんが
妹より
311nobodyさん:2008/12/22(月) 22:51:01 ID:???
で、どう書いたら>>304さんに変な癖がついてると言われない書き方なのよん
正しい書き方教えてくりっ
312nobodyさん:2008/12/22(月) 22:59:57 ID:???
PHPの公式マニュアルで「非推奨です」「危険です」と書かれている書き方を全て避ける。
313nobodyさん:2008/12/22(月) 23:00:21 ID:???
変な癖が付いてると言われなければいいのか
314nobodyさん:2008/12/22(月) 23:04:23 ID:???
>>304 みたいな奴には何を見せても重箱の隅つつかれるよね。
スルーでいいとおもう。
315nobodyさん:2008/12/22(月) 23:15:14 ID:zcPu3Ss9
PHP4用の開発ノウハウってのがあって、これは今となってはバッドノウハウ。
PHP5のみサポートの有名なFWで開発してみて、動いたらソースを読むのが吉
316nobodyさん:2008/12/23(火) 00:46:09 ID:???
ノウハウ以前のレベルだろうに
317nobodyさん:2008/12/23(火) 02:41:59 ID:???
いまだに共用鯖じゃPHP4主流だもんなあ。
318nobodyさん:2008/12/23(火) 03:56:34 ID:207JnJAg
JavaScriptの"for〜in"構文をPHPで書くとどうなるのでしょうか
PHPはあまり分らないもので
319nobodyさん:2008/12/23(火) 04:00:08 ID:???
>>299
漏れは先にperlを2ヶ月やってから
PHPに移動した。
320nobodyさん:2008/12/23(火) 04:13:36 ID:???
>>318
マニュアル
321nobodyさん:2008/12/23(火) 13:04:10 ID:???
>>318
$array=array('name'=>'aki','age'=>23,'karesi'=>'futsu');
foreach($array in $key=>$item) {
echo "$key $item\n";
}
322nobodyさん:2008/12/23(火) 13:54:23 ID:???
単にforeach文て言えば済むじゃねぇかw
323299:2008/12/23(火) 17:39:32 ID:???
>>319
何でですの?教えてごらんなさい
324nobodyさん:2008/12/23(火) 17:43:37 ID:???
ご先祖様だから
325nobodyさん:2008/12/23(火) 18:14:25 ID:???
ご先祖様はCだろw
326nobodyさん:2008/12/23(火) 18:37:45 ID:???
そこまで戻る必要は無い

ってか、Cは却って難しい
327nobodyさん:2008/12/23(火) 20:41:02 ID:???
SQLite3ってPDOってやつを使ってアクセスするんですよね
マニュアルにあるSQLite3ってやつとは何が違うんでしょうか
328nobodyさん:2008/12/23(火) 20:45:19 ID:???
別にPDOじゃなくてもアクセスできるけど
329nobodyさん:2008/12/23(火) 21:06:01 ID:???
なるほど
ググってもPDOのことしか見当たらずそこからマニュアルに流れ着いて
SQLite3文?って物があるのを知ったのでどういった違いがあるのかなと思ったのですが
どっちを使っても構わないってことでしょうか
330nobodyさん:2008/12/23(火) 21:06:50 ID:???
うん
331nobodyさん:2008/12/23(火) 21:19:15 ID:???
わかりました
どちらがいいのかはわかりませんが、せっかくなのでSQLite3も使ってみます
332nobodyさん:2008/12/23(火) 21:44:59 ID:???
DBっていうのは、MySQLとかSQLiteとかPostgreSQLとかOracleとか、似たようなのがたくさんある。
元々はそのそれぞれに対して、よく似てるけどちょっとずつ形の違う関数がいっぱいあった。
で、それが不便だからって事で、「同じ書き方でどれにでもアクセスできるような仕組みを作ろう!」となった。
それがPDO。

PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、PDOクラスをnewしてるところだけ書き換えれば普通に動く。
また、PDOひとう覚えれば、どのDBでも使えるようになる、というメリットもある。
333nobodyさん:2008/12/23(火) 21:50:29 ID:???
普通DSNを書き換えるんだろ
334nobodyさん:2008/12/23(火) 21:50:51 ID:???
じゃあ自由度は下がるってことでFA?
335nobodyさん:2008/12/23(火) 21:57:29 ID:???
ひとう → ひとつ

これだけだとバランス取れないので、一応デメリットも。
全DBでなるべく共通の操作を提供する、という仕組みのため、一部のDBに固有の機能が使えなかったりする事がある。
よくある話だと、MySQLの持続的接続が使えなかったりな。あと、パフォーマンスでもPDOは若干劣る。

個人で使う最大のメリットは、プリペアドステートメントのサポートだと個人的に思う。
SQLインジェクションの危険性をほぼゼロにできる上に、プログラムの可読性も上がる。
336nobodyさん:2008/12/23(火) 21:58:54 ID:???
> よくある話だと、MySQLの持続的接続が使えなかったりな。

それってパフォーマンスに影響するんだっけ?ベンチとった?
337nobodyさん:2008/12/23(火) 22:14:41 ID:???
PDOは文字コード変更用の関数がないからなー……。
SET NAMES 危ないって聞くし。
338335:2008/12/23(火) 22:49:27 ID:???
>334
んな事いったら、sqlite関数やmysql関数を使ってしまえば、将来のDB変更の自由度が失われるわけだが。
俺は自由度や性能云々以前に、DB依存のコードがそこら中にあるのを気持ち悪いと感じる。そんなものはどっかで隠蔽されるべきだ。
(実際問題、DBを置き換えるなんて事態は普通ないだろうけどな)
339nobodyさん:2008/12/23(火) 22:58:50 ID:???
>>338
あたまでっかちおっさんどっかいけよ
340nobodyさん:2008/12/25(木) 05:23:16 ID:???
>>339
335, 338の発言を理解できないなら発言するな。
339的な発言は、このスレの害虫。
341nobodyさん:2008/12/25(木) 05:57:49 ID:???
>>PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、
>>PDOクラスをnewしてるところだけ書き換えれば普通に動く

SQL文自体がDB固有になるだろうから、現実的にそれはあり得ないんじゃないか?
(標準SQLだけで書かないでしょふつう)

俺的なPDOのメリットは、DB関連関数をどのDBにも共通で使えるため開発の学習量を
減らせること。これはソースコードの可読性の向上、メンテ性の向上にもなる。
342nobodyさん:2008/12/25(木) 18:01:58 ID:???
標準SQLだけで書かないのが普通という前提なら、共通で使える部分の学習量なんてほとんど0じゃないか?

343nobodyさん:2008/12/25(木) 20:20:04 ID:???
DBを変更する予定があるとき、
単純にPDOだけで実現できるわけじゃぁないが、
PDOで標準SQLだけを使うか、
PDOよりも抽象化したFWを使うわけで、
素の関数を使うよりは汎用性が高い。

どっちの言うことも大きく間違っちゃいないわな
344nobodyさん:2008/12/29(月) 23:28:23 ID:hqhRjo69
オブジェクトのメソッド名とプロパティ名の一覧ってどうやって取得したらいいんでしょうか?
345nobodyさん:2008/12/29(月) 23:37:49 ID:???
リフレクション
346344:2008/12/30(火) 12:21:58 ID:???
>>345
有り難うございます
おかげで3週間越しの問題が解決しました
本当に有り難うございます
347nobodyさん:2008/12/31(水) 11:35:34 ID:???
phpの質問かJavaScriptの質問か迷ったのですが、ボタン(button)がクリックされた時に
確認用のダイアログを出すにはどうすれば良いでしょうか?


実行しますか?
【OK】 【キャンセル】

※ダイアログを表示し【OK】が押された場合のみ
submit処理を行ういたいです。
348nobodyさん:2008/12/31(水) 11:47:59 ID:???
>>347
超JavaScript
ググれば死ぬ程出てくる
一番最初に引っかかったページ http://promptbox.jp/blog/memo/index.php?itemid=785

お年玉くれw
349nobodyさん:2008/12/31(水) 12:38:49 ID:???
>>348
ありがとうございます。
でもお金ないです。。。
350nobodyさん:2008/12/31(水) 12:39:59 ID:???
つI
351nobodyさん:2008/12/31(水) 13:25:47 ID:???
つD 御縁がありますように。
352nobodyさん:2008/12/31(水) 13:30:12 ID:???
っH
353nobodyさん:2008/12/31(水) 16:42:47 ID:???
htmlかphpかわからないのでこちらで質問です。
formのプルダウンメニューの値を送信ボタンで渡すのはわかるのですが
プルダウンで選択しておいてリンクをクリックしたときにその値を一緒に
送るような使い方はできるのでしょうか。
ようはメニューでレイアウトの種類を選択して、リンク先をそのレイアウトで
表示させるといったことをしたいのですが。
354nobodyさん:2008/12/31(水) 17:24:24 ID:???
php関係無し
355nobodyさん:2008/12/31(水) 18:25:42 ID:???
そうですか、phpで操作できたらよかったんですが。
その後ググってるとJavaScriptでメニューの値が取得できるようですので
これとonClickだかでどうにかできるのかなってことでJSはわからないんですが
少し勉強してみようとおもいます
スレ違い失礼しました。
356nobodyさん:2008/12/31(水) 18:29:31 ID:???
JavaScriptのほうが最適ではあるだろうけど
工数増えるけどPHPでできないこともない
まぁガンガレ
357nobodyさん:2008/12/31(水) 18:57:38 ID:???
素直にやるならJavaScriptだろうな。
プルダウンを変更した時点でリンク先を書き換えるか、クリック時にフォームのsubmitイベントを呼び出すか。
358nobodyさん:2008/12/31(水) 18:59:09 ID:???
>>353
リンクにonclickといれてsubmitさせてやればいい
359nobodyさん:2008/12/31(水) 19:01:23 ID:???
俺ならselectが変更された時点でJavaScript経由でcookieに表示設定を放り込む。
一度選択したら2回目以降は覚えていて欲しいだろうからな。
360nobodyさん:2008/12/31(水) 19:49:56 ID:???
URLに数字等を入れる事により1つのphpページ画面をそのパラメータによりページの内容を
変えたいと思います。

どうすれば同一phpページをパラメータURLを指定する事により表示内容を変更する事が出来ますか?

http://www.test.php=1234
http://www.test.php=1235


361nobodyさん:2008/12/31(水) 19:52:15 ID:???
httpのクエリストリングから調べろ
362nobodyさん:2008/12/31(水) 20:01:42 ID:???
>>360
http://www.example.com/?page=1234
こういう形なら$_GET['page']で1234が取得できるから
これを使って切り替えれば良い
ただしpage=1234の1234は誰でも値を入れる事ができるから
チェック等は必ずするように
363360:2008/12/31(水) 20:14:49 ID:???
>>361
ヒントをありがとうございます。

>>362
詳しくご解説頂きありがとうございました。
早速「ガキ使い」を見ながらプログラミングしてみようと思います。
364nobodyさん:2009/01/03(土) 12:58:05 ID:???
phpでシステム開発をする場合には通常次の階層の直下に*.phpファイルを置いて
動作確認を行いますよね?
  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs

しかし、1つのPCで複数サイトの開発を行う場合には、次の用にフォルダを切った上で
開発を行っているのですが、この方法は正しいですか?

  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\site1
  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\site2

※要するに動作確認をする場合には次の用にしなくてはならないので。(まっ、これしか方法は無いかな?)

  http://localhost/site1/index.html
  http://localhost/site2/index.html
365nobodyさん:2009/01/03(土) 13:04:40 ID:???
hosts にサイト名追加して、VirtualHost つかうとかもあるな。
366nobodyさん:2009/01/03(土) 13:12:49 ID:???
俺はZF使ってるからmod_rewrite
367nobodyさん:2009/01/03(土) 13:20:37 ID:???
使ってれば偉くなった気になるんですね。わかります。
368nobodyさん:2009/01/03(土) 13:31:35 ID:???
お前は何を言ってるんだ
369nobodyさん:2009/01/03(土) 13:31:42 ID:???
俺も毎日ちんこ使ってるので偉くなった気になっています。
370nobodyさん:2009/01/03(土) 13:45:12 ID:???
>>365
LinuxじゃないとVirtualHostは使えないのではないですか?
それともWindows環境でも出来るのですか?

>>366
取り敢えず、
  http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html
のサイトで勉強してみようと思います。

実務でphpを使ったWEBサイトの開発とかした事が無いのですが、
実務でphpで開発を行う場合にテキストエディタだけを使っているプロジェクトは少ないですか?

あと、複数サイトの開発を1台のPCで行う場合に、>>364みたいな感じで行うのは
能率が悪いでしょうか?
371nobodyさん:2009/01/03(土) 13:53:14 ID:???
>>370
べつにWindows環境だってIPベースでも名前ベースでもできるさ
372nobodyさん:2009/01/03(土) 13:54:52 ID:???
Apacheの話題はスレ違い
373nobodyさん:2009/01/03(土) 13:57:42 ID:???
>>370
人の話を疑うぐらいなら聞くな >>364の形で運用するわけじゃないんならダメだろ。 >>365がFA
374nobodyさん:2009/01/03(土) 14:00:48 ID:???
おれは常にテキストエディタ(Vim)と過去の開発資源(ライブラリ)だけで事足りてる
375nobodyさん:2009/01/03(土) 14:19:04 ID:???
んんんだこのgdgdはw

複数サイトをプロジェクト(複数人数)でやるんだから、ファイルのアップロード方式の方が重要。複数の人間がftpでアップするのなら、それを管理しやすい方法で

あと、htdocs/aaa/bbb/ とかでやった場合、mod_rewrite の RewriteBase が後でアレな時あり

プロジェクトを管理できれば良いので、エディタは何でもいい



376nobodyさん:2009/01/03(土) 14:38:30 ID:???
複数の人間が更新するならCVSとか使うかなあ
サイト側もcheckoutするのだ
377nobodyさん:2009/01/03(土) 14:55:16 ID:???
checkoutじゃなくて、exportな
378nobodyさん:2009/01/03(土) 14:59:27 ID:???
>>371 〜 >>375 あざーす。
ぐぐって勉強してみます。
379nobodyさん:2009/01/03(土) 15:57:48 ID:???
Subversionを使っているのに何故かデプロイがftp経由ファイル単位なうちのプロジェクトは滅ぼしていいと思う。

>370
同時にいじるなら、何も考えずにやってるとアクセスログが同じファイルになってしまうので、やりづらいと思う。
そのままでもできるけど、バーチャルホストの方がエラーログの切り分けが簡単。
あとは両プロジェクトで同名のクッキーを使った場合衝突が発生する点かな。セッション周りが特に危険。
あと、本番環境に持っていく際に、相対リンク/絶対リンクとか周りで絶対いくつかリンク切れが発生すると思う。
以上のような点を気にしなくて良いのならば、そのままでもいいんじゃない?
380379:2009/01/03(土) 16:44:44 ID:???
ああ、そもそもセッション変数が共有されてしまう点の方が問題か。
クッキーは発行パスを適切に指定すれば混ざらないが、本番環境への移行の際に適切な修正をする必要がある。
381nobodyさん:2009/01/12(月) 12:35:49 ID:???
パール互換の正規表現についてなのですが、
preg_matchなど公式マニュアルに出ている内容については理解したのですが、
Perlとは微妙に違うリテラルやトークンの使い方について詳しく説明してある
ドキュメント等はないでしょうか?
382nobodyさん:2009/01/12(月) 13:43:52 ID:???
PHPって確か鬼車使っているんだっけ
だとしたら
ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
補記 3. Perl 5.8.0と比較して存在しない機能
+ \N{name}
+ \l,\u,\L,\U, \X, \C
+ (?{code})
+ (??{code})
+ (?(condition)yes-pat|no-pat)
* \Q...\E
但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効
383nobodyさん:2009/01/12(月) 15:24:30 ID:???
ありがとうございます!
参考にメモさせていただきました
384nobodyさん:2009/01/13(火) 02:11:38 ID:???
くだらない事なんですが、一つ気になっている事があります。
PEAR::Logでログでログ管理をしようと思っているのですが、
手元の参考書やWebで調べると、解説のサンプルプログラムが

<?php
require_once 'Log.php';
$file = &Log::factory('file', 'out.log', 'TEST');
$file->log('ログ内容');
?>

みたいな場合が多いのですが、この場合Log::factoryで作成した
インスタンス(?)の$fileは明示的にcloseか何かしなくて言いのでしょうか?
例えば、普通のファイル操作ならfopenしたら最後はfcloseをするので、
Log::factoryもそれに該当する操作が必要ないのか?と気になりましたので・・・・
385nobodyさん:2009/01/13(火) 03:08:48 ID:???
マニュアル嫁
386nobodyさん:2009/01/15(木) 22:20:46 ID:???
テキストファイルを読み込んで一行ごとに配列に入れ
配列を検索して特定の文字が含まれていた場合そのインデックスを返す
っていうのをやりたいのですが、わかりません。よろしくお願いします。
インデックス1を返して欲しいんですが、何も返ってきません。

***テキストファイルの中身*******
群馬県
栃木県
茨城県
埼玉県
東京都
****************************

<?php
//ファイルを開く
$filename="test.txt";
//配列に代入する
$f1=file($filename);
//特定の文字が含まれる要素を探す
$word="栃木県";
$key=array_search($word,$f1);
print($key);
?>
387nobodyさん:2009/01/15(木) 22:27:13 ID:???
返り値
ファイルを配列に入れて返します。 配列の各要素はファイルの各行に対応します。改行記号はついたままとなります。 失敗すると file() は FALSE を返します
388nobodyさん:2009/01/15(木) 22:28:50 ID:???
$word="栃木県\n";
389nobodyさん:2009/01/15(木) 23:00:30 ID:???
>>387
>>388
レスありがとうございます。

この検索の場合は完全に一致するものしか検索できないんですね。
例えば
$word="玉";
とした場合に
埼玉県のインデックスの3を返すというのは無理なんでしょうか?
390nobodyさん:2009/01/16(金) 00:17:00 ID:???
>>389
データーベースに入れて
「like」検索をすればできる。
391nobodyさん:2009/01/16(金) 07:02:26 ID:???
>>389
DBなんて使わなくてもstrposでできる
392nobodyさん:2009/01/16(金) 15:17:30 ID:???
>>391
strposって、最初に出てきた位置を返す関数じゃない?

「あるかどうか」を調べる関数のほうがいいんだけど。
393nobodyさん:2009/01/16(金) 15:19:44 ID:???
最初に出てくる=ある
394nobodyさん:2009/01/16(金) 16:25:58 ID:???
strposで位置取得
そこまでに\nがいくつあるか
ウマー
395nobodyさん:2009/01/16(金) 23:23:04 ID:???
俺なら何も考えず配列に格納→foreachでループ→中でstrpos

>392
strposは文字列検索としては最速の部類。
他の選択肢はpreg_match位しかないが、preg関数とstr関数じゃお話にならんほど速度が違う。
396nobodyさん:2009/01/16(金) 23:24:33 ID:???
説得力を持たせるためにベンチマークを載せてはどうかね?
397nobodyさん:2009/01/16(金) 23:28:16 ID:???
自分でやれ
398nobodyさん:2009/01/17(土) 11:25:45 ID:???
>>396
395ではないが暇なので作ってみた

$imakara_ikude = microtime(TRUE);

$dokowo_sawatte_hosiinya = '検索対象にしたい任意の文字列';
$kokoga_eenka = '検索したい任意の文字列';
$kokoga_eenka_pattern = '/' . preg_quote($kokoga_eenka, '/') . '/';
$itte_itte_ikimakuru = 100000;

for ($i = 1; $i <= $itte_itte_ikimakuru; $i++) {
if (strpos($dokowo_sawatte_hosiinya, $kokoga_eenka) !== FALSE) {}
// if (strstr($dokowo_sawatte_hosiinya, $kokoga_eenka)) {}
// if (preg_match($kokoga_eenka_pattern, $dokowo_sawatte_hosiinya)) {}
}

$doya_yokattaka = microtime(TRUE) - $imakara_ikude;
echo $doya_yokattaka;

■結果 - Windows XP(ペン4 3.2GHz)+XAMPP(PHP5.2.2)
strpos():0.060ぐらい
strstr():0.052ぐらい
preg_match():0.28ぐらい

strstr()の方が微妙に早いが、公式マニュアルでstrstr()の説明見ると
strpos()使えカスと書いてるので俺は素直にstrpos()使う。
399nobodyさん:2009/01/17(土) 11:38:45 ID:???
>>392
というわけで、
if (strpos($str, 'search') !== FALSE)
を使え。必ず「!== FALSE」にするように。理由は説明ダルいからマニュアル見れ。

>>389
$index = FALSE;
$word = '玉';

if ($ary = file('test.txt')) {
foreach ($ary as $key => $val) {
if (mb_stripos($val, $word) !== FALSE) {
$index = $key;
break;
}
}
}

var_dump($index);


strpos()はマルチバイト対応してないので、mb_系使うように。
400nobodyさん:2009/01/17(土) 11:43:51 ID:???
>>399で書き忘れたが、大規模検索なら素直にDB使う。

>>384
気持ち悪いなら明示すりゃいい。というか、色んな意味で明示したほうが良いと俺は思う。
phpは、リソースのオープンは明示しなくても自動的に閉じてくれる。(ファイルであれDBであれ)

>>382
PHP5から鬼車。mb_ereg()系で。
preg_match()では使われてないのでは?
401nobodyさん:2009/01/17(土) 11:53:04 ID:???
お前らJavaとPHPのスキルを比率で示してくれ。

俺の場合

Java : PHP = 5 : 5

ただ、レンタルサーバ代がJavaだと高いから力配分を
1:9程度に持って行こうかと思ってる。

402nobodyさん:2009/01/17(土) 12:00:27 ID:???
>>399
最初にifしてるのはなんで?
403nobodyさん:2009/01/17(土) 12:05:09 ID:???
>>402
$a = array('a', 'b', 'c');
foreach ($b as $k => $) {}
実行すれば分かる
404nobodyさん:2009/01/17(土) 12:06:47 ID:???
>>398
変数ワロタwww
405400:2009/01/17(土) 12:11:35 ID:???
>>384
あ、ひょっとしたらデストラクタで閉じてるのかもね。と一応>>400に付けたし。
連レスウザいだろうからこの辺で。
406nobodyさん:2009/01/17(土) 12:23:28 ID:???
>>403
だったら普通初期化するかキャストするもんだよ
407nobodyさん:2009/01/17(土) 12:25:11 ID:???
>>406
開こうとしているファイルが必ず開けるとは限らないわな。
408nobodyさん:2009/01/17(土) 12:26:13 ID:???
>>407
foreach((array)file('〜') as ...)
409nobodyさん:2009/01/17(土) 12:29:37 ID:???
phpごときで何細かいことウダウダやってんだかww
410nobodyさん:2009/01/17(土) 12:30:34 ID:???
>>406
エラー処理がしやすいとかじゃね?
411nobodyさん:2009/01/17(土) 12:34:40 ID:???
あと
$ary = file('test.txt') or array();
$ary = file('test.txt') or exit;
とか。もしくは例外使う。

何か関数からの出力を得る度にifで1ブロック使うなんてナンセンスすぎ。
412nobodyさん:2009/01/17(土) 12:38:43 ID:???
399は最近学び始めてphpが分かってきたから答えたくてたまらないお子ちゃまか
413399:2009/01/17(土) 12:39:51 ID:???
>>411が糞ウザくなってきたから一言。


あのな。
言っておくが、>>399みたいな処理は普通はクラスのメソッド通すなりするわ。
めんどくさいからはしょってるだけだろーが。分かるか?あ??


なんか>>411見てると、俺の会社の全然使えないカスPGにそっくりで殴り倒したくなるわw
414nobodyさん:2009/01/17(土) 12:40:56 ID:???
いやお前のコードが使えないんじゃん
415nobodyさん:2009/01/17(土) 12:41:35 ID:???
お前ら、質問があっても誰も答えないくせに
誰かが答えるとそれには文句つけないと気がすまないんだな。
どうしようも無いカスだなw
416nobodyさん:2009/01/17(土) 12:42:27 ID:???





たかがPHPでしょ






動けばいいじゃん




ばか?
417nobodyさん:2009/01/17(土) 12:43:17 ID:???
能力ないのに見栄を張るとは恥ずかしい奴だなw
418nobodyさん:2009/01/17(土) 12:46:56 ID:???
さすがPHPスレ。お前ら目糞鼻糞。
419nobodyさん:2009/01/17(土) 12:50:26 ID:???
          ____        ) 『 実行すれば分かる 』っと、
        /⌒  ⌒\      ) 『 開こうとしているファイルが必ず開けるとは限らないわな』っと。
      /( ●)  (●) \    )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶
     / ::::::⌒(__人__)⌒::::: \
    |      |r┬-|     |
     \       `ー'´     /
     ノ            \
   /´               ヽ                 カ
  |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ
  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
   ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
      ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
   ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄


       ____                 
    /::::::─三三─\            foreach((array)file('〜') as ...)
  /:::::::: ( ○)三(○)\          
  |::::::::::::::::::::(__人__)::::  |  _____
   \:::::::::   |r┬-|  ,/ .| |        
   ノ::::::::   `ー'´  \ |
420nobodyさん:2009/01/17(土) 12:52:06 ID:???
やぱりphpしか使えない奴ってバカっ事でOK?

Java使いが一番
421nobodyさん:2009/01/17(土) 12:52:28 ID:???
>>419
ウケルwwwww
422nobodyさん:2009/01/17(土) 12:53:47 ID:???
アホな奴もいるもんだなw
423nobodyさん:2009/01/17(土) 13:03:06 ID:???
自演煽りのクオリティが低すぎて吹いた
424nobodyさん:2009/01/17(土) 13:46:03 ID:???
書き込み時間と日頃のレスの伸びからして2名が暴れていただけらしいな
PHPやってると頭だけではなく性格まで悪くなるらしいから気をつけようww

融通利かないやつやコミュニケーション能力無いやつは
PGだろうが何だろうが使えん
うちにも1名いて給料の査定も下がったはずだが、はやくその理由に気付いて辞めてくれ
425nobodyさん:2009/01/17(土) 17:45:47 ID:???
一週間を表示する関数を作ってみたんですが、
どういうわけか土曜日だけ文字化けしてしまいます。
解決策はないでしょうか?

<?php
write_day();

//一週間を表示する関数
function write_day(){
while($i<7){
print($f1[$i]);
$ts=getDay($i);
print(date("m/d".getYoubi(date("w",$ts)),$ts));
$i++;
}
}

//曜日を漢字に変換
function getYoubi($wday) {
$arr = array("(日)","(月)","(火)","(水)","(木)","(金)","土");
return $arr[$wday];
}

//日にちを取得する関数
function getDay($day){
$now = time();
return mktime(date("H",$now),date("i",$now),date("s",$now),date("m",$now),date("d",$now)+$day,date("Y",$now));
}
?>
426nobodyさん:2009/01/17(土) 18:23:30 ID:???
>425
コードをShift_JISで書かないでUTF-8にするだけで解決。
427nobodyさん:2009/01/17(土) 18:52:25 ID:???
>>426
一発で解決しました。ありがとうございます。
本当文字コードって難しい。
スクレイピングでサイト作る人とか超尊敬。
428nobodyさん:2009/01/17(土) 23:41:37 ID:???
>>425
まったく関係ないんだけど
土曜日だけ()が付かないのはなんでなんだろうと思った。
429nobodyさん:2009/01/18(日) 07:29:09 ID:???
>>428
土曜日だけどうしても文字化けで表示できず
いろいろと試行錯誤した結果わからなかったので
質問しました。

()除いたりといった試行錯誤の名残をそのまま
書いてしまいました。ごめんなさい。
430nobodyさん:2009/01/18(日) 11:24:28 ID:???
>>424
自己紹介乙
431nobodyさん:2009/01/18(日) 20:28:36 ID:???
プログラム経験無しで、今からPHPを勉強しようと思っています。
そんな俺に、一冊買うならコレ!っていうPHPの参考書を教えてください。

432nobodyさん:2009/01/18(日) 20:32:39 ID:???
433nobodyさん:2009/01/18(日) 21:03:22 ID:???
>>432
本をonegaisimasu
434nobodyさん:2009/01/18(日) 22:30:36 ID:???
まずマニュアル嫁
435nobodyさん:2009/01/18(日) 23:59:27 ID:542zz2rd
アンケートプログラムなんかでよくある、全部の項目が入力されているかを
submitボタンが押されたときに調べて、それが通ればsessionに入力項目を追加して次のページへ
ってことをやりたいんですが、
全部の項目が入力されているかを調べるのはonclickにJavascriptでチェック出来ますが、
そのあと動的に選んだ値をphpのsession変数に追加するのってどうしたら良いのでしょうか?
436nobodyさん:2009/01/19(月) 00:03:08 ID:???
$_SESSION['hoge'] = $hoge;
437nobodyさん:2009/01/19(月) 00:11:48 ID:jnDZLn2z
>>436
すいません、えっとどう言ったら良いのか;
質問のニュアンスを伝えるためにわざと無茶苦茶に書くと、

<input type="submit" onclicke="check()" />
<script type="text/javascript">
function check(){
//checkコード
if(allchecked){
$SESSION['age']=document.getElementsById("age");
}
}
</script>

こんな風な意味合いのことをする方法を聞きたかったのです。
438nobodyさん:2009/01/19(月) 00:16:55 ID:???
PHPとJavascriptの違い分かってないの?
439nobodyさん:2009/01/19(月) 00:21:05 ID:jnDZLn2z
>>438
あくまでニュアンスを伝えるために上記のような書き方をしているだけで、
サーバサイドphpとユーザサイドJavascriptの違いは分かってます。
ただphpではこういうチェックが出来ないのでどうしたものかと迷ったので。
440nobodyさん:2009/01/19(月) 00:21:42 ID:???
よく分からんがGETで取れば?
441nobodyさん:2009/01/19(月) 00:22:12 ID:???
いやPOSTでもいいけど
442nobodyさん:2009/01/19(月) 04:21:49 ID:???
>>437
よく意味がわからんが・・・

<form name="form1" method="post" action="hoge.php">
<input type="submit" onclick="return check();" />
名前:<input type="text" name="name" />
</form>
<script type="text/javascript">
function check(){

  //checkコード
  if (document.form1.name=='') {
    alert('名前が入力されていません');
    return(false);
  }

  return(true);

}
</script>


あとはhoge.phpでnameを受けとってセッション変数に放り込むなり好きにするヨロシ。
443nobodyさん:2009/01/19(月) 04:44:39 ID:???
ただのjavascriptの話になってるw
444nobodyさん:2009/01/19(月) 17:58:38 ID:???
うわわわわ。。。
issetでもisSetでも書けるくさいなぁ(´・ω・`)
445nobodyさん:2009/01/19(月) 20:15:28 ID:???
str_replaceよりpreg_replaceが速いのか
446nobodyさん:2009/01/20(火) 00:26:44 ID:???
>>445
それはありえない
preg_replaceは正規表現の処理が入る分遅くなる
ついでにいうと、単純な置換ならstrstrよりstr_replaceの方が速い
447445:2009/01/20(火) 00:28:42 ID:???
>>446
じゃあここのはウソってことか。。。

ttp://phpspot.org/blog/archives/2006/11/12php.html
448nobodyさん:2009/01/20(火) 00:37:17 ID:???
うん
449nobodyさん:2009/01/20(火) 00:58:56 ID:???
>>447
そのサイトは検証もせずコピペしてるだけだからあまり鵜呑みにしない方がいい
450nobodyさん:2009/01/20(火) 01:55:00 ID:???
原文はこう書いてある。
str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4

PHPの勉強の前に、まず英語勉強しようぜ
451nobodyさん:2009/01/20(火) 06:28:50 ID:???
>>450
その原文の出典ってどこ?
452nobodyさん:2009/01/20(火) 07:38:55 ID:???
>>447のリンク先
453nobodyさん:2009/01/20(火) 12:58:32 ID:???
>>447
記事がうそじゃないとしても、2年も前だとあまり当てにならないな。
5.1.x時代だっけ
454nobodyさん:2009/01/20(火) 14:17:46 ID:auDP4Xko
sql文の中に多数の変数を入れるにはどうしたらよいのでしょうか?
455nobodyさん:2009/01/20(火) 14:24:08 ID:???
普通に文字列連結じゃだめなの?
意図がいまいちわからない。

あ、エスケープはしっかりしろよな。
456454:2009/01/20(火) 20:16:30 ID:???
>>455
はい普通に . でした
6時間前の自分にゲンコツしときました
457nobodyさん:2009/01/20(火) 23:14:20 ID:FkFXLWeK
http://php5.seesaa.net/category/3813207-1.html

ここを見ながら勉強中で、ひとつ前の
Step9・入力された値をPHPでチェックする
まではうまくいったんですが、
Step10・入力された値をJavaScriptでチェックする
が、うまくいきません。イントラネットとかいうのが関係してるんでしょうか。。
何度も確認したんですけど、警告ウインドウが出てきません
458nobodyさん:2009/01/20(火) 23:21:44 ID:???
問題の切り分けすべし
459nobodyさん:2009/01/21(水) 03:11:36 ID:???
まずなにも入れないで計算してみて。
あとjavascript有効になっている?
460nobodyさん:2009/01/21(水) 09:46:52 ID:VkT7uFdT
>>459さん
javascriptは、セキュリティのところでいじればいいんですよね。
それでしたら有効になってます。
なにも入れないで計算すると
-------------------
+=0

前の画面へ戻る
-------------------
って出ます。IEから見るソースは
-------------------

<html>
<head>
<title>calc.php</title>
</head>
<body>
+=0
<br/>
<br/>
<a href="#"onclick="history.back();return false;">前の画面へ戻る</a>

</body>
</html>
------------------------------
です。
書いてるソースのほうは
http://php5.seesaa.net/category/3813207-1.html
にあるとおりだと思います。
461nobodyさん:2009/01/21(水) 10:44:16 ID:???
calc.htmlはどうなっているの?
最初に実行するプログラムはなに?
calc.htmlだよね?
そこからcalc.phpで処理してってことだけど、
form action とか大丈夫これどうり記述しているよね?
jsも読み込んでいるよね。
パスもあっているよね?

462nobodyさん:2009/01/21(水) 13:51:32 ID:ruw5pBd2
<input type="text" name="名前" size="20" />
<?
$line = "==名前==";
$line = ereg_replace("==(.*)==", $_REQUEST["\\1"], $line);
?>
上記スクリプトで $line を name="名前" のフォーム値に置換したい
のですができません。どうすれば置換できるでしょうか?
463nobodyさん:2009/01/21(水) 14:09:33 ID:???
マニュアル見れ
あとeregよりpreg
464nobodyさん:2009/01/21(水) 14:58:58 ID:VkT7uFdT
>>461さん
calc.htmlのソースは

---------------------------
<html>
<head>
<script type="text/javascript"src="calc.js"></script>
<title>calc.html</title>
</head>
<body>
<form name="form1"action="calc.php"method="post">
<input type="text"name="txtA"id="txtA">

<select name="selOpe"size=1>
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>

<input type="text"name="txtB"id="txtB">=?
<br>
<input type="submit"value="計算">
<input type="reset"value="クリア">
</form>
</body>
</html>
-------------------------------------
です。パスがあっているかどうかは、どこを見るとわかりますか?
465nobodyさん:2009/01/21(水) 15:12:50 ID:???
>>464のソースの中を見ればわかりますよ!( ^∀^)b
466nobodyさん:2009/01/21(水) 15:27:54 ID:???
sample012
の中にはなにが入っている?
sample011までPHPは動いていたんだよね?
わからん。
ほんと。http://php5.seesaa.net/category/3813207-1.html
と同じことしているんでしょう?
calc.jsもsample012のフォルダの中にはいっているんでしょう?
ソースはコピペしてやっているんでしょう?

467nobodyさん:2009/01/21(水) 16:23:54 ID:VkT7uFdT
>>465さん
>>466さん
コピペしなおしたらできるようになりました。
でもどこが悪かったのかわからに・・
468nobodyさん:2009/01/21(水) 19:35:45 ID:???
考えられるのは、どっかに空白がはいってしまったこと。
なんか変な文字がどこかにはいってしまったか。
おれもコピペでそういうことになったことは
よくある。
見たとこミスはないので、あのソースをきちんと理解
して次進んでいいと思うよ
469nobodyさん:2009/01/21(水) 21:43:57 ID:VkT7uFdT
空白もいけないんですか
先生ありがとう
470nobodyさん:2009/01/21(水) 22:33:22 ID:???
いやあくまでも想像だけど、でも間違っているところがないから。
以後もし動かったら再度コピペすることを望みます。
471462:2009/01/22(木) 10:25:52 ID:PnoeEoeZ
>>463
すみません、マニュアル見直しました。
ところで、

$line = "==名前==";
//$line = preg_replace("/==(.*)==/e", "$_REQUEST['$1']", $line);
$line = preg_replace("/==(.*)==/e", "rep('$1')", $line);
function rep ($text) { return $_REQUEST["$text"]; }

コメント行の置換が動作せずに下記エラーが発生するのですが、
いちいちrepのようなfunctionを用意しなきゃいけないのでしょうか?

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
in /************/index.php on line 340
472nobodyさん:2009/01/22(木) 10:36:31 ID:???
preg_replace_callback じゃないのか
473nobodyさん:2009/01/22(木) 12:54:40 ID:???
$line = "==名前==";
$line= preg_replace("/==(\S*)==/e", 'sprintf("<input type=\"text\" name=\"$1\" value=\"%s\" />", isset($_REQUEST["$1"]) ? $_REQUEST["$1"] : "")', $line);

こうやりたいのか?

キー文字は==全角==じゃなくて==半角==がいいと思うが
474473:2009/01/22(木) 13:16:38 ID:???
htmlspecialcharsも使わないとやヴぁいか。。。
475462:2009/01/22(木) 13:23:02 ID:PnoeEoeZ
>>473
すいません、解決しました。バカみたい・・・
$line = preg_replace("/==(.*)==/e", 'sprintf("%s", $_REQUEST["$1"])', $line);
476nobodyさん:2009/01/23(金) 05:27:52 ID:L5uKYwrL
今初めてのPHP+mysqlを勉強しているのだが、
17章のサンプルアプリケーションが動かない。
これって仕様かな?
おれはcent os5でやったんだが、画面真白で。
linuxで誰かやってくれませんか?すいませんが
お願いします。ソースは一応レンタルサーバーと
ホームページ上に貼り付けているんで、
ソースダウンロードできないんだ。
http://gichioka.web.fc2.com/source.zip←ソースをダウンロード
http://www.krautgrrl.com/learningphp/index.php/site/C17/←データベース
とかもろもろ貼ってあります。
お手数ですが、よろしくお願いします

477nobodyさん:2009/01/23(金) 05:29:33 ID:L5uKYwrL
日本語へたで申し訳ないですが、まあ両方見てやってみてください。
ほんとはphpの本のスレに行きたかったんだけどなくなってしまった
みたいで。
すいませんが、よろしくお願いします
478nobodyさん:2009/01/23(金) 05:34:48 ID:L5uKYwrL
すいません。
サンプルコードありました。
昔はなかったのに
http://www.oreilly.co.jp/books/9784873113654/
ここです。
479nobodyさん:2009/01/23(金) 07:37:08 ID:???
オライリー本、
読んで理解できたためしがない
480nobodyさん:2009/01/23(金) 08:08:21 ID:???
>>478
エラーメッセージは?
481nobodyさん:2009/01/23(金) 16:01:37 ID:???
<?php
session_start();
$anc = array('anc1' => 'one', 'anc2' => 'two', 'anc3' => 'three'); $html = '<html><body><form action="">';
switch ($_REQUEST['m']) {
case '1':
$html .= 'confirm<br />';
foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $html .= $v . '=checked! '; } }
$html .= '<br /><input type="hidden" name="m" value="2"><input type="submit" value="go!">';
break;
case '2':
482nobodyさん:2009/01/23(金) 16:04:18 ID:???
$html .= 'finish<br />'; $param = ''; foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $param .= $v . '=checked! '; } }
if ($fp =@ fopen('anc.dat', 'a')) { fputs($fp, date("Y/m/d H:i:s ") . ' ' . $param . ' ' . $_SERVER["REMOTE_ADDR"] . "\n"); fclose($fp); } $html .= 'thank you!';
break;
default:
$html .= 'question<br />'; foreach ($anc as $k => $v) { $html .= '<input type="checkbox" name="' . $k . '" value="1">' . $v . ' '; }
483nobodyさん:2009/01/23(金) 16:08:55 ID:???
$html .= '<br /><input type="hidden" name="m" value="1"><input type="submit" value="next">';
}
$html .= '</form></body></html>'; echo $html; exit;
?>

パソコンが今使えないので携帯で消化してしまってごめんなさい
このプログラムのoneやtwoを別のファイルに記録したいんですが
どうすればよいでしょうか?
すごい初心者なので、良ければ具体的に教えていただければ嬉しいです
スレチや失礼あればごめんなさい
484nobodyさん:2009/01/23(金) 16:11:58 ID:Jr51+scJ
あと、これを一時間くらいでやらなきゃなので
テンパってます…
お待ちしてます
485nobodyさん:2009/01/23(金) 16:34:47 ID:???
初心者とかじゃなくて、
「oneやtwoを別のファイルに記録したいんですが 」
日本語か?それ。
486nobodyさん:2009/01/23(金) 16:40:52 ID:Jr51+scJ
すいません
やはり分かりにくかったですか


questionの解答がoneやtwoになっていて
その解答を記録したいんです
解答した日付時刻などはanc.datに記録されますが
なにを答えたかが記録出来てないと思うのですが
487nobodyさん:2009/01/23(金) 16:58:18 ID:???
>>486
なんかエラー出てると思うけどねぇ。
エラーを確認するのが解決への近道だよ。

たぶん、原因は↓かと。
$param .= $v . '=checked! ';

$param .= "{$v}=checked! ";
に変えてみたらどうかな?
488nobodyさん:2009/01/23(金) 17:08:51 ID:Jr51+scJ
>>487
あれ
paramじゃなくてそこはhtmlにではないですかね
僕の方では一応エラーは出てません
489nobodyさん:2009/01/23(金) 17:21:03 ID:???
>>486
セッションが引き回せていないだけ、ってオチじゃないの?
case '2'のところで、print_r($_SESSION)ってやってみれば?
490nobodyさん:2009/01/23(金) 17:27:13 ID:Jr51+scJ
>>489
すいません
どの辺りに入れたらいいかよろしければおねがいします
セッション引き回す?の意味がよく分からないのですが
…念のためお聞きしますが、このプログラムでは解答をファイルに書き込めないですよね?
491nobodyさん:2009/01/23(金) 17:37:42 ID:???
>>486
もう少し頭を整理したら?
回答はどのファイルに書き込むの?
> oneやtwoを別のファイルに記録したいんですが
回答毎に別のファイルを作るってことかい?
492nobodyさん:2009/01/23(金) 17:39:39 ID:???
//$_SESSION[$k] = $_REQUEST[$k];
//if ($_REQUEST[$k]) {
if ($_SESSION[$k]) {
493nobodyさん:2009/01/23(金) 17:52:40 ID:???
>>490
デバッグなんだから、どこでもいいよ。
とりあえず、聞く前に試したら?

セッションに代入した(はずの)後、
代入された(はずの)セッションを使う前
494nobodyさん:2009/01/23(金) 17:58:15 ID:Jr51+scJ
>>491
これをwebアンケートのようにしたときに
これを解答した人が何を選んだのか記録するファイルを作りたいんです
今はanc.datをつくればそこに日付等が記録されますが
できれば加えてone,two,threeのどれにチェックをつけたかも記録したいということです
記録するのがanc.datファイルでなくてもよいです

>>492
ありがとうございます!
それで上記みたいな事ができるでしょうか?
今は分かりませんが、夜に試してみます
495nobodyさん:2009/01/23(金) 18:00:35 ID:Jr51+scJ
>>493
自分でさっきいろいろ挿入してみました
どうしてもエラーが出てしまったので
あとで>>492を試してみます
ありがとうございます!
496476です。:2009/01/23(金) 19:42:52 ID:L5uKYwrL
エラーメッセージは
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
でした。
わかる人いますか?
ぜんぜんわかりません。
ちなみにsmartyはhttp://hangar5.blog48.fc2.com/blog-entry-27.html
でインストールしました。

497nobodyさん:2009/01/23(金) 20:01:20 ID:???
すんまそん、どなたか教えて下さい

あるphpで書かれたスケジューラを使っているのですが、ユーザ認証の際に
POSTで パスワードを受け取り($pwd)、これの一部をsaltとして使い、crypt()でパスワードを暗号化しています。
おおまかな処理は以下の様な感じで行っています(htmlspacialchars等は省きました)。

/* $userid, $pwd => POSTから受け取ったユーザ名・パスワード */
$ pwd_cr = crypt( $pwd, substr( $pwd, 3, 2 ) );

/* SQL文作成 */
$sql = "SELECT id, passwd FROM users ";
$sql .= "WHERE id='".$userid."' AND password='".$pwd_cr."'";

/* SQLの結果セット取得 */
$res = pg_query($conn, $sql);
$cnt = pg_num_rows($res);


教えてもらいたい事ですが、この crypt( string $str [, string $salt ] ) について、
$str と $salt が完全に同じものである場合、どのような環境でも、生成される文字列は常に同一のものになるのでしょうか?

なんでまたこんな事を聞くかと言うと
Windows ServerにApacheとPHPをぶちこんで動かしていたら、Apache再起動のタイミングで
何故か 同一の $str ・ $salt から生成される文字列が変わってしまった経験が今日を含めて2回起きたからです。
そりゃ確かに php.netのマニュアルには

> そのシステム上で使用できるその他のアルゴリズムを使用します

と書いてあるんですが…ンなcryptの動作がコロコロ変わるものなんでしょうか?
498nobodyさん:2009/01/23(金) 20:04:21 ID:???
連投すみません、追記。

crypt の挙動が変わる辺りで Windows Update を挟んでいたかどうかは、情けない事にわかりません。
むしろ、 Windows Update で crypt の挙動が変わる可能性があるなら、どのHotfixが怪しいか教えてもらえるとありがたいです。
499nobodyさん:2009/01/23(金) 20:10:33 ID:???
>>496 (>>476)
「 /var/www/html/login.php 」について、下の2つの確認まじおすすめ
・確実に存在しているのか
・Apacheを実行しているユーザが読めるのか(パーミッションを確認)
500476です。:2009/01/23(金) 20:41:49 ID:L5uKYwrL
>>499さんへ
/var/www/html/login.php
確実にあります。
パーミッションもユーザーが読めるようにしています。
smartyもできてます。
if (class_exists('Smarty')) {
$smary =& new Smarty;
printf("you can use Smarty(version %s).\n", $smary->_version);
} else {
echo "you can't use Smarty.\nplease install Smarty library.";
}
で確認をとりましたし、テストデータもいれました。
ってことはlinuxだからだめってことですよね?
ほかに考えられないんですよ。
基礎からのphpのサンプルアプリケーションもlinuxでだめでした。


501nobodyさん:2009/01/24(土) 21:09:15 ID:???
>>476
・ DB関連の記述は間違っていないか
  MySQLみたいだけど、特に $db_host 等
・ php自体の記述が間違ってないか
  つーかphpの文法はわかってる?あとファイル始端終端の無用な空白行やコメント、文字コードとかにも注意。
・ 最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++; を入れて止まってるところを探せ
  php勉強するなら結局はコレ大事。

あとは、本気でどうにも出来ないけどどうにかしたい、って言うなら↑の3つを試した後で
今使ってるMySQLの中身と、今のDocumentRootのディレクトリ構成、php.ini、httpd.conf を、ディレクトリ構成ごとまとめて
zipでうpする位は必要だな。レスが付くかどうかは知らんけど。

>>476 の source.zip だけじゃ db_login.php とか、Auth/HTTP.php とか入ってないっしょ。
ドキュメント見たらなんか、学習に沿って自分で作って配置するものらしいけど…そんなんわからんがな。
これじゃ相当なヒマ人かエスパーじゃない限りレスも何もでけん。
502476です。:2009/01/24(土) 22:31:06 ID:M+3olz+y
>>501
Auth/HTTP.php これはpearだぜ。
db_login.php はつくったけど、結果はだめでした。
もういいです。すいませんでした。
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
これも連日ぐぐっているけど、だめ。
orellyに聞いたところ確認するって。
誰か持っていてアプリをlinuxで試した人いるかなって
思ったんだけど、いないみたいですね。
スレ汚しすいません。
持っている方はぜひやってみて。
報告待っています
souce.zipは削除しますので、
暇なエスパーの方でおれやってみようかな?っていう方
http://www.oreilly.co.jp/books/9784873113654/
からダウンロードしてみてください。
ではすいませんでした。
503nobodyさん:2009/01/24(土) 22:41:25 ID:???
もっかい自分が今扱っているコードと関連ファイル(ディレクトリ構成そのままで)をうpしてくれ
504nobodyさん:2009/01/24(土) 23:08:37 ID:???
"Unknown on line 0"
そのエラー、稀に文字コードの問題はあるにしてもソースの問題じゃないと思うけど。
サーバー設定で権限がなくて読みに行けないとか、だな。
505nobodyさん:2009/01/24(土) 23:11:53 ID:???
元ファイルがUnknownなのにlogin.phpがincludeできないというのもおかしいな
506nobodyさん:2009/01/24(土) 23:21:55 ID:???
>>505
おかしくない。よくあること。
507nobodyさん:2009/01/24(土) 23:23:43 ID:???
なぜに?
508nobodyさん:2009/01/24(土) 23:49:33 ID:???
Unknown on line 0
Unknownとは、読みに行く側のリソースが特定できていないということ。
Web経由のアクセスの場合、login.phpはあるが、権限が不足していたりすると404じゃなく、
phpハンドラーに渡されて、そのエラーになる。普通によくあること。
>>500は「パーミッションもユーザーが読めるようにしています。 」って書いてるが、
読めなくなる原因はファイルパーミッションだけじゃないからね。
509nobodyさん:2009/01/24(土) 23:56:53 ID:???
実際のところ、>>501のアドバイスの3つ目をやってみてないわけだな。
とりあえず、最初に叩くファイルの冒頭にecho "hoge";exit();これでどうなるか。
そっからデバッグしてけば別のエラーになるさ。
510nobodyさん:2009/01/25(日) 01:33:09 ID:???
>最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++;
だせぇw
511476です。:2009/01/25(日) 02:01:51 ID:esMzMmSN
>>503さんへレスくれた方へ
http://gichioka.web.fc2.com/source.zip
すべてのファイルとデータベースとphp.iniを入れました。
よろしくお願いします。
512nobodyさん:2009/01/25(日) 02:15:21 ID:???
どれ実行して>>502が出んの?
513nobodyさん:2009/01/25(日) 02:28:51 ID:esMzMmSN
login.phpとposts.phpです。
514nobodyさん:2009/01/25(日) 02:41:42 ID:???
>>510
ださくない、ださくないよ
515nobodyさん:2009/01/25(日) 02:44:07 ID:???
>>513
login.phpの中で/var/www/html/login.phpなんてincludeしてんの?
516nobodyさん:2009/01/25(日) 03:08:45 ID:???
ダブルクォーテーションで囲んだ文字列に改行をいれてもエラーにならないのですが、
これって文章化されたPHP仕様に含まれてますか?
てっきりヒアドキュメントを使わなくてはならないものだと思っていたのですが…

$multiline = "
LINE 1
LINE 2
LINE 3
";
517nobodyさん:2009/01/25(日) 03:24:57 ID:???
PHPだけじゃなくて一般の言語全てがそうだと思われます(pyなんとかは一般でないから除く)
518nobodyさん:2009/01/25(日) 03:58:37 ID:???
>>516-517

VBだと改行で認識するよね。
だからVBからきた人だと、改行入れても
エラーにならない、という仕様のほうが
不思議に思うんでしょう。
519516:2009/01/25(日) 04:22:47 ID:???
ありがとうございます。

有名どころのフレームワーク等でも

$multiline = "LINE1\n"
. "LINE2\n"
. "LINE3\n"

と書いているものがほとんどなので、使ってはいけないのかなと疑問を持った次第です。
SQLとか埋め込む時は>>516の方が断然楽ですよね…

ヒアドキュメントはいらない子?
520nobodyさん:2009/01/25(日) 04:37:23 ID:???
いる子
521nobodyさん:2009/01/25(日) 05:48:15 ID:???
>>519
ヒアドキュメントは、"をエスケープしなくてすむのがいい。
522nobodyさん:2009/01/25(日) 05:59:54 ID:???
多次元配列の要素数を返す関数はありませんか?
例えば
$test['a'][1];
$test['a'][2];
$test['b'][1];
$test['b'][2];
$test['b'][3];
この配列で要素数5を返したいのですが
countでは3が返ってきます。
何かほかの関数や手段はありますか?
523nobodyさん:2009/01/25(日) 06:07:51 ID:???
>>522
array_merge_recursive
524nobodyさん:2009/01/25(日) 06:08:42 ID:???
array_walk_recursive
すまんこっちのほうだ
525nobodyさん:2009/01/25(日) 07:39:19 ID:???
526nobodyさん:2009/01/25(日) 08:17:33 ID:???
>>476
>>515
だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。

たとえば、お前らのサーバでも試せるからやってみ。
test.php作ってパーミッションを000にしたファイルにアクセス。

したら、
Warning: Unknown: Failed opening ・・・
になるから。
527nobodyさん:2009/01/25(日) 08:29:44 ID:???
おいおい、マルウエアかよ
528476です。:2009/01/25(日) 11:45:32 ID:esMzMmSN
だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。

なんででしょうか?
529nobodyさん:2009/01/25(日) 11:56:54 ID:???
なんでて、言う前に試してみた?
login.phpの中身を空っぽにしてアクセスしてみ?
530nobodyさん:2009/01/25(日) 12:04:32 ID:???
>>528
原因はパーミッション以外にいろいろあるよ。
パーミッションだってあってるのかどうか。

他にはopen_basedirとかsafe_modeとか、
CGIで動いてるレンサバなんかならそれに合わせた設定が必要だし。
531nobodyさん:2009/01/25(日) 12:08:36 ID:???
>>526
上と被るけどそれじゃ単純なhello worldスクリプトも動かないってこと?
532nobodyさん:2009/01/25(日) 12:09:07 ID:???
>>528宛てね
533nobodyさん:2009/01/25(日) 12:14:51 ID:???
>>531
Hello Worldが動くかどうかなんて、エスパーじゃあるまいしわからないさ。
が、とりあえず、それを試せば問題は次に移るってこと。

Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
冗長だけどもっかい書くとね。
Apache:login.phpにリクエスト来ました。ファイルありました。phpハンドラー、後はよろしく。
php:了解、じゃ、ファイルをインクルードして処理します〜。あ、ファイル、インクルードできません。

で、エラー
from:不明なリソース to: login.php action:include result:無理
534nobodyさん:2009/01/25(日) 12:19:12 ID:???
こういうケースでよくあるのは
パーミッションが間違ってる。
open_basedirの設定にtypoがあって動かない。
include_pathに問題がある
safe_modeの設定に問題がある
PHPがsuexecで動いてて、ファイルの所有ユーザーかグループに問題がある
などなど。
535nobodyさん:2009/01/25(日) 12:20:35 ID:???
>>533
いやお前さんに聞いてるだけじゃなくて本人に聞いてるんだよ
536nobodyさん:2009/01/25(日) 12:21:27 ID:???
まぁ、login.phpの冒頭にphpinfo(INFO_CONFIGURATION);
とでも書いて結果を貼ってもらうってのがいいのかもしれないね。この場合。
537nobodyさん:2009/01/25(日) 12:22:17 ID:???
>>535
あぁ、そういうことね。
538476です。:2009/01/25(日) 13:36:25 ID:esMzMmSN
>>536
phpinfo(INFO_CONFIGURATION);
かいたやつを入れましたのでよろしくお願いします。
539476です。:2009/01/25(日) 13:42:05 ID:esMzMmSN
source.zipの中にはいっています。
540nobodyさん:2009/01/25(日) 13:44:10 ID:???
source.zipアクセスできなかったよ?
ところで、login.phpでecho "Hello World!";はしてみたの?
541nobodyさん:2009/01/25(日) 13:44:40 ID:???
てか、そのURL貼っちゃえw
542nobodyさん:2009/01/25(日) 13:45:57 ID:???
>>538
なぜ531はシカト?
543nobodyさん:2009/01/25(日) 13:49:36 ID:???
え、シカトされて怒ってんの?
544nobodyさん:2009/01/25(日) 13:50:22 ID:???
これは、マルウエアをインストールさせるための釣りだな。たぶん。
545476です。:2009/01/25(日) 14:46:06 ID:esMzMmSN
login.phpでecho "Hello World!";
はできました。
source.zipアクセスできるようになりましたので、よろしくお願いします。

>>マルウエアをインストールさせるための釣りだな。たぶん。
変なこといわないでください
546nobodyさん:2009/01/25(日) 14:53:00 ID:???
>>545
そしたら、元のソースにして、エラーが出る個所を特定すればいい。
1行でも解釈できれば例のエラーにはならないから。
で、リダイレクトループとかで問題が出ているケースもあるから、
error_log(__LINE__);とかを怪しいところにはさんで行って、どこまで処理が進んでるかチェック。
547476です。:2009/01/25(日) 15:00:45 ID:esMzMmSN
error_log(__LINE__);
の使い方がわかなんね。
どうやって使うの?
548nobodyさん:2009/01/25(日) 15:04:41 ID:???
それ書いて、エラーログ見れば、行番号が出力されてくる。
コマンドラインが使えるならエラーログでtail -f /var/log/httpd/error_logとかで見張ってればよくわかる。
エラーログが見れないんならechoでもいいけど、要するにどこまで処理が進んでるかチェックして
そのエラーメッセージを出せば、新しい情報がとれるでしょ?
549nobodyさん:2009/01/25(日) 16:08:16 ID:???
なんで原因を特定しようとせんの?
Hellow World→動く
サンプルコードをそのまま挙げた→動かない
これしかやってないでできないできない言うとかありえないっす
550476です。:2009/01/25(日) 20:01:42 ID:esMzMmSN
みなさん。ありがとうございます。
error_log(__LINE__); でいろいろ調べてみたいと思っています
551476です。:2009/01/25(日) 20:12:36 ID:esMzMmSN
エラーがでました。

PHP Fatal error: require_once() [function.require]: Failed opening required 'config.php' (include_path='.:/usr/local/include/php/libs') in /var/www/html/login.php on line 3
だそうです。
調べてみてもわからん。
552476です。:2009/01/25(日) 20:13:47 ID:esMzMmSN
ひとつ事例があり、SELINUXが原因かと思いましたが
SELINUXは切ってありました。
553476です。:2009/01/25(日) 20:51:19 ID:esMzMmSN
すいません。質問です。
無事動いたのですが....動いたといえるのか。
HTTP/AUTH.PHPが作動したのですが、
Member Area のサーバーにはユーザー名とパスワードが必要です。
と普通でます。
で、db_login.phpのデータを入れたんですがだめでした。
もしかして
$AuthOptions = array(
'dsn'=>"mysql://$db_username:$db_password@$db_host/$db_database",
'table'=>"users", // テーブル名
'usernamecol'=>"username", // ユーザ名の列
'passwordcol'=>"password", // パスワード列
'cryptType'=>"md5", // パスワードの暗号化形式
'db_fields'=>"*" // 他の列も取得可能にする
のどこかにデータを入れなくてはいけないのでしょうか?
554nobodyさん:2009/01/25(日) 21:17:56 ID:???
とりあえず、初期の問題は片付いたわけだな。よかったよかった。

>>553
聞きたいことをもう少し整理してくれ。
555476です。:2009/01/25(日) 21:24:21 ID:esMzMmSN
Member Area のサーバーにはユーザー名とパスワードが必要です。
とでるんですがユーザー名とパスワードを入れてもうごきません。
初歩的ですいませんが、
>>553のどの部分に自分のデータを記載すればいいのでしょうか?
僕はdb_login.phpにデータが入っているのでなにもいれてなく>>553
のままなんですが。
ここの部分がおかしいんですよね?

556nobodyさん:2009/01/25(日) 21:31:42 ID:???
mysqlでしょ?
usernameっていうユーザいるの?
557nobodyさん:2009/01/25(日) 21:35:07 ID:???
まず、こんだけ色々アドバイスもらってんだから、動くに至った経緯を書け。
ここはお前専用の質問スレじゃないんだ。

で、login.phpが動かないとか、そもそも入力されたユーザ名・パスワードが間違ってた時の挙動が
どうなるのかを把握してんのか?
それと自分でうpした中のDB.txtの中身を理解してるのか?
具体的には62・63行目。

…もしかしてNG推奨だったのか
558nobodyさん:2009/01/25(日) 21:35:50 ID:???
データベースのレコードに自分のユーザー名とパスワード、md5ハッシュを保存
db_login.phpにはそのデータベースにアクセスするための権限情報を保存
559476です。:2009/01/25(日) 21:38:41 ID:esMzMmSN
'usernamecol'=>"username", // ユーザ名の列 ←変更
'passwordcol'=>"password", // パスワード列 ←変更 
すればいいですか?
あ、mysqlに入っているusernameとpasswordはすでに試しましたが
だめでした。
それがいまいちよくわからないんですよね
なんでだめなのか
560nobodyさん:2009/01/25(日) 21:39:56 ID:???
パスワードはちゃんとハッシュしてんの?
561nobodyさん:2009/01/25(日) 21:47:18 ID:???
しっかし、よく釣れるなぁw
562476です。:2009/01/25(日) 22:23:02 ID:esMzMmSN
>>557さんへ
マスまずパスが違っていました。
僕のパスはinclude_path = ".:/usr/local/include/php/libs"
なので、ここにpearとconfig.phpを入れてやりました。
そしたら動きました。
>>560さんへ
パスワードはちゃんとハッシュしていますよ。
563nobodyさん:2009/01/25(日) 22:34:43 ID:???
>>562
PEAR入れて無かったってこと?
564476です。:2009/01/25(日) 22:43:40 ID:esMzMmSN
いや、pearのパスが間違っていました。
565nobodyさん:2009/01/25(日) 23:06:00 ID:???
元はどこにあったの?
566522:2009/01/26(月) 01:07:02 ID:Ihgtqp1K
>>525
それだと、a・bという項目もカウントしてしまい、7を返すようです。5を返す方法はないですか?
567nobodyさん:2009/01/26(月) 01:16:16 ID:???
568522:2009/01/26(月) 05:09:38 ID:Ihgtqp1K
>>567
すみません、バージョンが4なのでarray_walk_recursiveは使えないみたいです。
他にありませんか?
569nobodyさん:2009/01/26(月) 05:10:14 ID:???
引き算すりゃいいでしょ。countとcountで
570nobodyさん:2009/01/26(月) 05:48:20 ID:???
>>522
$count = 0;
foreach ($test as $value) {
 $count += count($value);
}
echo $count;
571570:2009/01/26(月) 05:58:46 ID:???
ちなみに>>570の方法は2次元配列の場合で
それ以上になると再帰(リカーシブ)でやったほうがいい
(foreachのネストでも可能だが読みやすさに限界がある)
ただし再帰は頭の回転が速くないと何やってるかわからなくなるので
苦手なら無理して使う必要はない
572nobodyさん:2009/01/26(月) 06:13:09 ID:???
>>570-571
発想はいまいちだが、初心者にしちゃぁ、よくできたな。
573nobodyさん:2009/01/26(月) 06:26:30 ID:???
574nobodyさん:2009/01/26(月) 06:30:54 ID:???
自己紹介乙
575nobodyさん:2009/01/26(月) 10:12:51 ID:???
>>570
わざわざそんなことしなくてもこれでいけるっぽ

echo count($test, 1) - count($test);
576nobodyさん:2009/01/26(月) 10:29:32 ID:???
html拡張子でPHP5が動くように設定しつつ、
404エラーの際に自作エラーページを表示させるには
どうすれば良いかご存知の方いませんでしょうか。

.htaccessで「AddType PHP5-script html」を指示してしまうと
「ErrorDocment 404 error.html」で指定したページが表示されません。
PHP4の時は両立できたんですが…
577nobodyさん:2009/01/26(月) 10:41:26 ID:2xglnPYy
>>576

AddType php5-script .html
578nobodyさん:2009/01/26(月) 10:44:39 ID:???
>>575
3次元以上の場合は?
579nobodyさん:2009/01/26(月) 11:03:14 ID:???
>>577
あー大文字で書いてしまったのはここに書き込む際の記載ミスです。
実際の.htaccessではご指摘のように記載してます。html拡張子でPHP5は動いてます。
でもそうすると404エラーで自作ページが表示できなくて困ってます。
AddTypeでやってもAddHandlerでやっても結果は同じで、
「AddType application/x-httpd-php .html」でPHP4の環境では両立できるんです。
580nobodyさん:2009/01/26(月) 11:05:47 ID:???
エラーページが表示されないのならどんなページが表示されてる?
まっちろ?
581nobodyさん:2009/01/26(月) 11:14:50 ID:???
>>580
IEならIE、FireFOXならFireFOXのフツーの404NotFoundページが出ます
582nobodyさん:2009/01/26(月) 11:19:56 ID:???
そのエラーのソースの中でheader("HTTP/1.0 404 Not Found");してみるとどうなる?
583nobodyさん:2009/01/26(月) 11:22:02 ID:???
だったら例のあれじゃない?
自作エラーページのサイズが小さ過ぎるとか。。。
584nobodyさん:2009/01/26(月) 11:27:03 ID:???
>>582
変化ありませんでした。
IEのHTTP 404 未検出の画面が出ます。

>>583
ファイルサイズは1Kbありました。
585nobodyさん:2009/01/26(月) 11:29:13 ID:???
>>584
404header返せばいけるはずなんだがな。
どんなソースになってるよ。
586nobodyさん:2009/01/26(月) 11:46:12 ID:???
>>585
単純なHTMLページの1行目に↓をぶち込んだんですが…
<?php
header("HTTP/1.0 404 Not Found");
php?>

.htaccessで拡張子指定しているのは今は.htmlだけなのですが
存在しない.htmファイルを探させると自作エラーページへ行くことがわかりました。
が、.htmlファイルだとIE規定のページになっています。
.htmlでPHPが動くように指定してしまうとErrorDocmentが
狙った動きをしてくれない、という事でしょうか。

ちなみに今、直接自作エラーページを指定したらIE規定のページが出ましたので
404headerはちゃんと返ってきているようです。
587nobodyさん:2009/01/26(月) 11:54:43 ID:???
Apacheスレかhtaccessスレあたりで聞いたほうがいいぞ
588nobodyさん:2009/01/26(月) 12:06:45 ID:???
htaccessスレが見つけられなかったのと
PHPで何とか似たような事をやる技があったりしないかなーと
思ったりしたんですが、やっぱ無理すよね。スイマセンでした。
Apacheスレの方で聞いてみます。ありがとうございました。
589nobodyさん:2009/01/26(月) 14:26:16 ID:7H1IWdV1
>>586
> php?>

何これ。
590589:2009/01/26(月) 14:27:55 ID:???
と思ったら関係ないな、すまん。
591nobodyさん:2009/01/26(月) 21:42:45 ID:???
右から読んでもphp
592nobodyさん:2009/01/26(月) 23:07:21 ID:???
左から読んでもphp

なんて言うと思ったか
593nobodyさん:2009/01/27(火) 06:21:30 ID:???
前から読んでも(ry
594nobodyさん:2009/01/27(火) 10:00:43 ID:???
<?山本山
タケヤブヤケタ
山本山?>
595nobodyさん:2009/01/29(木) 04:21:55 ID:???
ttp://free-p.ddo.jp/tools/enc4php_e.php
こことおなじものを自分のローカルサーバに設置したいのですがどこかに置いてないでしょうか?
596nobodyさん:2009/01/29(木) 04:32:25 ID:???
なぁにこれ?
597nobodyさん:2009/01/29(木) 07:06:35 ID:???
>>595
サイトの中身良く見りゃわかんだろ・・・
evalは、文字列の中身をphpのコードとして解釈して実行するもの。
base64_decodeしてからgzinflateしてるんだから
base64_encodeしてからgzdeflateすれば、期待の物が出来るんじゃね?

これでわからないんだったら、プログラミングやめた方が良いかもな
598nobodyさん:2009/01/29(木) 10:51:02 ID:???
性格悪いな
599nobodyさん:2009/01/29(木) 12:03:24 ID:???
>>597
最初と最後の1行ずつは要らんだろ常識的に考えて。
600nobodyさん:2009/01/29(木) 12:10:04 ID:???
601nobodyさん:2009/01/29(木) 13:24:49 ID:???
>>600
フイタww
淡々と技術情報の交換を2chでしたいってそりゃ無理だろw
2chってそういうとこだとおもうべきだな
602nobodyさん:2009/01/29(木) 17:55:36 ID:???
質問です!
サーバーがPHP5になってしまい
今まで使っていたフリーのメールフォームが使えなくなりました。
PHP5のフリーのメールフォームを探したのですが全然わからず
ここにたどり着きました。
フリーのメールフォームのサイトを教えて頂けないでしょうか?
603nobodyさん:2009/01/29(木) 18:20:03 ID:???
スレ違いで内科?
604nobodyさん:2009/01/29(木) 18:24:41 ID:???
まともな人がいないのでこちらでも質問を

//$_SESSION['abc']; は前ページで123を代入

//ここから
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy();

echo $_SESSION['abc'];//123

と表示したいのですが何か方法はないのでしょうか?クッキーとか使わずに。
605nobodyさん:2009/01/29(木) 18:29:17 ID:???
頭痛くなってきた。
要点をまとめてくれないか
606nobodyさん:2009/01/29(木) 18:40:48 ID:???
$_SESSION['abc'] にはすでに123が入ってるが
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy();
とすると123も消えるけど、それを消さずに

echo $_SESSION['abc'];//123
と後でも表示させたい。

理想としては
$abc = $_SESSION['abc'];
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy()
$_SESSION['abc'] = $abc;
echo $_SESSION['abc'];

と表示できればいい。
607nobodyさん:2009/01/29(木) 19:53:27 ID:???
>>604 == >>606 だよな?
「どうしても$_SESSION['abc']を使いたい理由」ってのがわからんと、普通のPGは他の手段を考えると思うぞ。
>>606 の中で $abc に入れてるんだったら、そのまま echo $abc; すりゃ良いじゃん、的な。
つーかsession_start()しなくて良いんかな。

長ったらしくない程度に、もう少し質問の背景を含めて、かつ要領良くまとめて質問すれば回答が返って来ると思う。
608nobodyさん:2009/01/29(木) 20:07:16 ID:???
609nobodyさん:2009/01/29(木) 20:25:30 ID:???
http://pc11.2ch.net/test/read.cgi/php/1158647441/672
http://pc11.2ch.net/test/read.cgi/php/1231850905/880

理由はどうあれこういうマルチするアホは相手にしないほうがいい
610nobodyさん:2009/01/29(木) 23:28:49 ID:???
何回読んでも>>604のやりたいことがわからない
611nobodyさん:2009/01/29(木) 23:37:26 ID:???
前よく出没してた基地外だろ
612nobodyさん:2009/01/29(木) 23:41:37 ID:???
やりたいことは見えてる。
「ログイン・ログアウトとは別にセッションデータを引きまわしたい」ってことだろ。
で、普通は>>604みたいなソースにはならないのに、わざわざ教えてgooだか、
phpのマニュアルでセッション破壊用のソースをそれだと勘違いして質問してるだけ。

すでに回答ついてるのに、人の意見を聞けない困ったチャンか、単なる荒し
613nobodyさん:2009/01/30(金) 10:09:33 ID:???
>>607
ログインログアウトとは別に、スタイルシートをセッションで持ち歩いていて、
ログアウト>>606で書いたようにログアウトとしたときセッションに保存してあるスタイルシート変数も消えてしまいます。
なので、セッション(ログアウト)を消す前に$abc = $_SESSION['abc']; として消した後再び、$_SESSION['abc'] = $abc; などにして再度セッションにいれればなと考えていますが、
うまくいきません。
そこで何かいいほうほうは無いものかと。

614nobodyさん:2009/01/30(金) 12:27:38 ID:???
悔しいっ・・・でも・・・触っちゃう・・・っ(ビクビク

>>613
cookie使えよ。sessionなんかにそんなん入れんな。
sessionに入れるならログアウト=専用スタイルシート破棄として使え。
$_SESSION と session_*()を勉強し直して来い
615nobodyさん:2009/01/30(金) 23:37:15 ID:gxYTwHzL
http://epg.2ch.net/tv2chwiki/subject.txt
から、別サーバー(自分のブログとか)に
スレの勢いと局、番組名だけを取得して表示させることってできますか?
616nobodyさん:2009/01/30(金) 23:39:57 ID:???
うん
617nobodyさん:2009/01/31(土) 00:20:10 ID:Zjr5MV5E
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="text" name="textbox" value="">
<input type="submit" value="送信">
</form>

<?php

$text = htmlspecialchars( $_POST["textbox"] );

if ( get_magic_quotes_gpc() ) {
$text = stripslashes( $text );
}
print $text;
?>

これ、ゲストの人がコメント書き込むくらいならいいんだけど、自分が投稿しようと思った時に
$_SERVER['PHP_SELF'];が入っているからエディットページ(管理人専用の編集ページ)かなんかでindex.phpに書き込めないと思うんだ。
エディットページでindex.phpに反映させる方法ってない?
618nobodyさん:2009/01/31(土) 00:28:12 ID:???
エディットページで$_SERVER['PHP_SELF']にしなければいいのでは?
619nobodyさん:2009/01/31(土) 00:41:31 ID:Zjr5MV5E
お!というとどういう風に記述すればいいですか?
620nobodyさん:2009/01/31(土) 00:42:37 ID:???
ファイル名
621nobodyさん:2009/01/31(土) 00:42:41 ID:???
>>615 $rtn = file_get_contents( 'http://epg.2ch.net/tv2chwiki/subject.txt ' );

>>617 漏れは神様でもエスパーでもないんだから、
おまいのやりたいことを補完して理解なんかできない。
質問は相手に理解できるように書こう。

でも <input type=hidden name=action value=edit>
とか場合わけしる
622nobodyさん:2009/01/31(土) 00:43:50 ID:???
なぜにhidden使う必要が?
623nobodyさん:2009/01/31(土) 01:07:34 ID:Zjr5MV5E
>>621 説明足らずで すまん ありがとう。要は管理人専用ページでこのスクリプトを使用した時に$_SERVER['PHP_SELF']だと現在いじってる(管理人専用ページ)でスクリプトが実行されてしまうんではないかと。
あくまで表示したいのはindex.phpなので、そこんとこどうなんかなーと思いまして。

>>620
と、いうことは$_SERVER['PHP_SELF']を$_SERVER['index.php']にしたらいいってことですか?
624nobodyさん:2009/01/31(土) 01:09:00 ID:???
お前は何を言ってるんだ?
625615:2009/01/31(土) 01:27:06 ID:myPf0iH/
>>621
<?php
$temp = "http://epg.2ch.net/tv2chwiki/subject.txt";
$html_f=file_get_contents($temp);
$replace = "(2)";
$scriptphp = "<br />";
$word = str_replace($replace, $scriptphp, $html_f);
$hogeru = ".dat<>";
$gogeta = "<br />";
$yabai = str_replace($hogeru, $gogeta, $word);
print $yabai;
print($word1_a);
?>

から、偶数行だけ表示するにはどうしたらいいんでしょうか?

626nobodyさん:2009/01/31(土) 01:27:12 ID:Zjr5MV5E
すみません。ようやく分かってきました。
$_SERVER['PHP_SELF'] これ書かなきゃいいんですね。

じゃあそのかわりformのactionにはなんて書けばいいんですかね?
627nobodyさん:2009/01/31(土) 01:28:37 ID:???
actionの意味知らんの?
628nobodyさん:2009/01/31(土) 01:30:22 ID:Zjr5MV5E
正直なところform処理いじったことがありませんもので…。非常に申し訳ないんですが教えてくれると助かります…
629621:2009/01/31(土) 01:35:09 ID:???
>>625 最初からそれをいいたまへ

$rtn = file( 'http://epg.2ch.net/tv2chwiki/subject.txt ' );
for ( $n = 0; $n < count( $rtn ); $n = $n + 2 ) echo $rtn[$n];
630621:2009/01/31(土) 01:38:56 ID:???
>>623 やっと意味がわかった。管理人は管理人ようのページを作り給え
631nobodyさん:2009/01/31(土) 01:46:56 ID:Zjr5MV5E
>>630ありがとうございます。じゃあ$_SERVER['PHP_SELF']はいらないってことですかね?
632nobodyさん:2009/01/31(土) 01:55:22 ID:???
>>631

<? // index.php
if ( $_POST['textbox' != '' ) { なんか処理 }
?>
<html><body>
<form action="index.php" method="post>
<input type="text" name="textbox" value=""><input type="submit"
</form>
</body></html>



<? // kanri_index.php
if ( $_POST['textbox' != '' ) { なんか処理 }
?>
<html><body>
<form action="kanri_index.php" method="post>
<input type="text" name="textbox" value=""><input type="submit"
</form>
</body></html>

を作れ
633nobodyさん:2009/01/31(土) 01:59:14 ID:???
いやindex.phpでいいだろ
634nobodyさん:2009/01/31(土) 02:06:10 ID:???
色んなやり方あるけど初心者だそうだからいちばん新ぷりに
635nobodyさん:2009/01/31(土) 13:18:26 ID:Zjr5MV5E
ありがとうございます!ようやくわかった気がします。actionって動作させたいファイル名を指定したらいいんですね。
これでなんとかなりそうです。ありがとうございました!
636nobodyさん:2009/01/31(土) 19:25:28 ID:???
prepareの使い方で質問があります。
下記のコードを実行すると
Call to a member function prepare() on a non-object
とエラーが返ってきます。

$sql = "insert into table (column2,column1) values(?,?)";
$sth = $this->db->prepare($sql);
$result = $this->db->execute($sth, array($column2_value,$column1_value));

プレースホルダを使わずqueryを発行すると問題なくdbが更新されるのですが、
どこかおかしいのでしょうか
637nobodyさん:2009/01/31(土) 19:26:42 ID:???
すみません、環境書き忘れました。
php5,postgresです
638nobodyさん:2009/01/31(土) 19:28:26 ID:???
>636
どのクラスのprepareだよこの馬鹿馬鹿まんこ!

$this->dbが接続失敗か何かで初期化されていないように思われる。
639nobodyさん:2009/01/31(土) 20:01:51 ID:???
レスどうもありがとうございます。
そのあたりを探ってみます。
640nobodyさん:2009/01/31(土) 20:02:31 ID:???
いや$dbのnewしてるとこ見れば一発だろw
641nobodyさん:2009/01/31(土) 20:16:52 ID:???
出来ました。どうもありがとうございます。
さっきのエラーは昔書いたクラスコピペして直したら出なくなったのですが、
dbが更新されなくて悩んでいたら文字コードの違いが原因でした。

mb_convert_encodingで挿入する値をdbの文字コードに直して解決しました。
お世話様でした。
642nobodyさん:2009/01/31(土) 20:23:42 ID:QDNvJIlq
sqlite php5 利用です。
登録メールアドレスの重複チェックをしたいのですが、うまく動きません。
if(!$db=sqlite_open("database/database.sqlite",0666,$err)){
die("データベース接続エラー".$err."<br>");
}
////////////////////////////データベース二重登録防止////////////////
$check_sql="SELECT * FROM add_table WHERE add = '$mailadd'";
if($abc = sqlite_query($db,$check_sql)){
header("Location: mail.php?miss=miss&miss_naiyou=sumi");
    //登録済みの場合は飛ばす
}
sqlite_close($db); //データベースクローズ
643nobodyさん:2009/01/31(土) 20:26:51 ID:???
644nobodyさん:2009/01/31(土) 20:31:10 ID:lgngjuqH
<?php
$temp = "http://epg.2ch.net/tv2chwiki/subject.txt";
$html_f=file_get_contents($temp);
$br = "<br />";
$replace = "(2)";
$word = str_replace($replace, $br, $html_f);
$replace = ".dat<>";
$word = str_replace($replace, $br, $word);
$replace = "res/min";
$word = str_replace($replace, $br, $word);
$replace = "] ";
$word = str_replace($replace, $br, $word);
$a = explode( "<br />", $word );
$b[0]= "g";
print $a[2]; print $br; //…(1)
print $b[0]; print $br;
$strs[0] = "srename :"+ $a[2] +",";//…(2)
$strs[1] = $b[0];
print $strs[0]; print $br;//…(3)
print $strs[1];
?>
出力
[NHK総合]探検ロマン世界遺産
g
0
g


(3)の$strs[0] が0になってしまうのはなんでですか?
おねがいします。
645nobodyさん:2009/01/31(土) 20:33:43 ID:QDNvJIlq
>>643
マニュアル見てもさっぱりわかりません
646nobodyさん:2009/01/31(土) 20:39:00 ID:???
>>644
+を.にかえてみ
647nobodyさん:2009/01/31(土) 20:40:47 ID:???
>>645
じゃ諦めれ
648nobodyさん:2009/01/31(土) 20:42:10 ID:???
>>646
おーできました
ありがとうございます!!
649nobodyさん:2009/01/31(土) 20:59:19 ID:QDNvJIlq
>>642
解決しました。
if(sqlite_fetch_array(sqlite_query($db,$check_sql))){
header("Location: mailmagazine.php?miss=miss&miss_naiyou=sumi");
}

>>643
ありがとうございます
650nobodyさん:2009/02/01(日) 21:04:08 ID:???
質問です
elseif (preg_match("/^\d{8}$/", $_GET["id"])){
$id = $_GET["id"];
}
GETで8桁の数字のみ受け取るように↑のようにしましたが
if文でマッチしてても変数に代入する際はpreg_matchなりで
GET変数内を数字のみとなるように変換した方がいいものなんでしょうか
651nobodyさん:2009/02/01(日) 21:10:26 ID:???
お前は何を言ってるんだ
652nobodyさん:2009/02/01(日) 21:11:12 ID:???
>650
俺ならctype_digit($str) && strlen($str) === 8
まあそれはそれとして、別にいいんじゃね。その正規表現にマッチしてるなら間違いなく数字だけだし。
653nobodyさん:2009/02/01(日) 21:16:32 ID:???
末尾の$は改行にもマッチするから数字だけとは限らないんじゃ?
654nobodyさん:2009/02/01(日) 22:42:37 ID:???
ググってたら遅くなりました
>>652
matchに漏れがなければ問題ないように思たんですが
あげてもらった関数の方が確実 でしょうか
>>653
正規表現はまだよくはわかってないのですがググったところ
\r\nのことでしょうか。
http://scripting.cocolog-nifty.com/blog/2008/12/post-c9b4.html
ここを参考に一応"/^\d{8}\r?$/"としてみましたが
>hoge$に掛かりません
の理屈が今一わかりません。
655650:2009/02/01(日) 22:56:05 ID:???
よく考えたら\rが混じる時点で正常なデータではないので
もとの"/^\d{8}$/"で問題なしな気がしますがどうなんでしょう
656652:2009/02/01(日) 23:22:37 ID:???
重視したのは分かりやすさ。正規表現だと、何を意味しているのか分かりづらい。
パターンがよほど複雑な時以外は正規表現は避けたほうがいい。

>653-654
改行とか忘れてたわ。
if(preg_match("/^\d{8}$/", "12345678\n")){
 echo 'match';
}
657nobodyさん:2009/02/03(火) 00:43:02 ID:???
半年ロムってろと言われてずっと見てきたが
もうPHP諦めることにした。さっぱり分からん。

このスレのどこが超初心者用なんだ。
658nobodyさん:2009/02/03(火) 01:51:58 ID:???
3年ROMってろ
659nobodyさん:2009/02/03(火) 02:00:14 ID:???
もう、諦めたんだ放って置いてくれw
プログラムなんて嫌いだ。
660nobodyさん:2009/02/03(火) 09:47:26 ID:???
何が分かんないんだよ
661nobodyさん:2009/02/03(火) 10:34:27 ID:???
放っておいてやれよ
662nobodyさん:2009/02/03(火) 14:10:58 ID:???
なんか残念だな...。

このスレだけ読み続けても、超初心者が分かるようにはならないと思う。
このスレは、超初心者も質問していいというだけで、来る質問が全部、
超初心者向けというわけではないから。

もう見てないかもしれないけれど、入門書を図書館とかで借りてきたほうが
いいと思うよ。
663nobodyさん:2009/02/03(火) 14:18:03 ID:???
PHPなんってググって触ってみりゃ、どうにでもなるものを、
半年もROMってわからないなんて、ネタに決まってるだろ
もしネタじゃないなら、10年はROMるべき。
そうして人生が終わるさ
664nobodyさん:2009/02/03(火) 20:28:48 ID:???
人生も諦めたらスッキリするのに
665nobodyさん:2009/02/04(水) 06:33:54 ID:???
>>664
全く原因が分からないのでお聞きしたいのですが…

$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy

上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません

phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします
666nobodyさん:2009/02/04(水) 06:34:18 ID:???
>>664
全く原因が分からないのでお聞きしたいのですが…

$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy

上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません

phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします
667nobodyさん:2009/02/04(水) 06:50:26 ID:???
image.jpgがないんでね?
668nobodyさん:2009/02/04(水) 08:17:43 ID:???
>>666
MIMEヘッダー出してる?
669nobodyさん:2009/02/04(水) 10:03:22 ID:???
ああそれだな
670nobodyさん:2009/02/04(水) 17:18:03 ID:???
>>667
確かにファイルは存在しています・・・
>>668
MIMEヘッダーは
header("content-type: image/jpeg");
で出力できてますでしょうか?
ご指摘の後にこれを追加してやってみてのですがだめでした。
ただ、文字化けのような表示から画像を表示できていないマーク?
のような表示にはかわりました・・・
671nobodyさん:2009/02/04(水) 17:25:29 ID:???
>>670
imagecreatefromjpeg
にしてみたら?
それで、$imがfalseになってないかチェック
それから、imageやheaderを出力する前に余計な出力をしないように、ソースの冒頭でob_startして、直前で破棄

672nobodyさん:2009/02/04(水) 17:39:12 ID:???
ところで皆さんPHPとMYSQLは勉強し始めて
どれくらいの期間で使えるレベルになりましたか?
673nobodyさん:2009/02/04(水) 17:41:17 ID:???
使うだけなら書籍読みつつ1日でカバーできる範囲
使いこなすまでは相当かかったが
674nobodyさん:2009/02/04(水) 17:50:34 ID:???
>>670
「image.jpg」→「"image.jpg"」
675nobodyさん:2009/02/04(水) 18:10:51 ID:???
"imagejpg"になってたりするのか
676nobodyさん:2009/02/04(水) 18:32:32 ID:???
そもそもcreateimagefromjpegなんて標準関数はないわけだが
imagecreatefromjpeg(string $filename)ならあるけど
677nobodyさん:2009/02/04(水) 18:33:11 ID:???
単純にサーバにGDライブラリがはいってないだけなんじゃね?
phpinfoみてみれ
678nobodyさん:2009/02/04(水) 18:37:31 ID:???
679nobodyさん:2009/02/04(水) 18:37:52 ID:???
680nobodyさん:2009/02/04(水) 18:38:31 ID:???
書いたとおりに載せないで情報小出しにしてる時点でもう答えようがない
681nobodyさん:2009/02/04(水) 18:38:39 ID:???
要するに釣り
682666:2009/02/04(水) 20:04:43 ID:???
お騒がせ致しました

釣りではないのです

広告自動表示のレンタルサーバーを使用していたためにうまくいかなかったようです

広告無しのサーバーでは問題なく表示できました。

ありがとうございました
683nobodyさん:2009/02/04(水) 22:08:23 ID:???
広告自動挿入のサーバーだと
ヘッダー情報ってだめなの?
684nobodyさん:2009/02/04(水) 22:09:01 ID:???
PHPの講師やりたいんだけど、
どこの学校がおすすめ?
685nobodyさん:2009/02/04(水) 22:31:36 ID:???
学校行ってまでPHP学びたいと思うか?
686nobodyさん:2009/02/04(水) 22:37:41 ID:???
>>685
だって一日で20万もらえるってよ
バカらしくてコーダーなんかやってられないよ
687nobodyさん:2009/02/04(水) 22:41:25 ID:???
SQL(SQLite)なんですが単対多のデータを取得したら
|A|a|1|
|A|a|2|
|A|b|1|
|A|b|2|
|B|c|1|
|B|d|1|
みたいになるじゃないですか。
重複した項目をまとめて(A,(a,b),(1,2)),(B,(c,d),1)な感じにする関数てあるんでしょうか。
688nobodyさん:2009/02/04(水) 22:46:57 ID:???
>>685
http://pdoj.wordpress.com/2009/02/04/fetch-modes/

とりあえず翻訳やってみたけど、どう?
689nobodyさん:2009/02/04(水) 22:50:36 ID:???
>>687
pdoとかMDBとかにあるよ
sqliteは知らんけど
690nobodyさん:2009/02/04(水) 22:52:37 ID:???
>>688
ドキュメントの翻訳で「〜と思う」なんて普通使わない
691nobodyさん:2009/02/05(木) 00:20:18 ID:???
>>689
ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。
692nobodyさん:2009/02/05(木) 00:47:17 ID:???
693nobodyさん:2009/02/05(木) 00:49:12 ID:???
$str = '4,980 円';

↑みたいなフォーマットの価格データを整数値にしたいんだけど
↓よりシンプルにやる方法ってある?

$str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);
694nobodyさん:2009/02/05(木) 00:51:20 ID:???
$str = (int)str_replace(',','',$str)
695nobodyさん:2009/02/05(木) 00:54:43 ID:???
ありがとうg
696nobodyさん:2009/02/06(金) 21:22:00 ID:???
>>692
MySQLでも試してみたのですが結果は同じでサンプルのような結果にならないのですが
どこか捉え違いしているのでしょうか。
PHP 5.2.6/MySQL 5.0.4
|apple|red|
|banana|yellow|
|apple|green|
という内容として、
$dbh = new PDO('mysql:〜','root','root');//もしくは'sqlite:〜'
$sql = "SELECT name,color FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0);
var_dump($result);
$stmt = null;
結果
array(2) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
["banana"]=>
array(1) {
[0]=>
string(6) "banana"
}
}
となります。
697nobodyさん:2009/02/06(金) 21:29:26 ID:???
サンプルのような結果と言われても、サンプルのような結果がどんなもんだかわからんからね。

とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?
698nobodyさん:2009/02/06(金) 21:34:36 ID:???
まぁ、試しに
PDO::FETCH_COLUMN|PDO::FETCH_GROUP
じゃなく
PDO::FETCH_ASSOC|PDO::FETCH_GROUP
にしてみたら?
699nobodyさん:2009/02/06(金) 21:39:06 ID:???
>>697
失礼、サンプルは>>692にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、>>696が正しいということはやっぱりなにか勘違いしてるのかなぁ
700nobodyさん:2009/02/06(金) 21:43:25 ID:???
あぁそれか、fetchAllの第2引数に0が入ってるじゃん、だから、カラムが制約されてる
それ、外したらどうなる?
701nobodyさん:2009/02/06(金) 21:48:42 ID:???
array(2) {
["apple"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["banana"]=>
array(1) {
[0]=>
string(6) "yellow"
}
}

になったけど
702nobodyさん:2009/02/06(金) 21:49:22 ID:???
ああすまん本人じゃなくて俺の環境でやったらってことね
703nobodyさん:2009/02/06(金) 22:07:01 ID:???
>>700
あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701も確認ありがとうございます。
704nobodyさん:2009/02/06(金) 22:11:15 ID:???
fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0); で普通に取得できたが?
後進のために原因を明らかにしといてくれ
705nobodyさん:2009/02/06(金) 22:21:43 ID:???
>>704
もし、第2引数に0が入ってても第2カラムを取得できたんならバグだと思うよ
706nobodyさん:2009/02/06(金) 22:26:54 ID:???
お前は何をいっちょるんだ?
第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ
707nobodyさん:2009/02/06(金) 22:29:53 ID:???
>>778
何も問題ないが
708nobodyさん:2009/02/06(金) 22:30:55 ID:???
すまん誤爆した
709nobodyさん:2009/02/06(金) 22:57:48 ID:???
>>706
デマ書いてすまん、よくわかってなかった。
そのはずだよねぇ。
710nobodyさん:2009/02/08(日) 19:09:17 ID:???
<?php
try {
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

fntest();
function fntest() {echo "call function";}

} catch (ErrorException $exception){
echo "何かエラーだよ<br />";
echo $exception->getMessage()."<br />";
echo "line:".$exception->getline();
exit();
}
?>
これを実行するとFatal error: Call to undefined function fntest() in〜と出ます
定義を先にするかtry〜catchをなくすとエラーは出ません
何がいけないんでしょうか
711nobodyさん:2009/02/08(日) 19:26:17 ID:???
定義が後でtry〜catchの中だからでは?
712nobodyさん:2009/02/08(日) 20:00:14 ID:???
>>711
まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします
713nobodyさん:2009/02/08(日) 20:00:15 ID:???
>>710
いったいどうしたらそういう書き方ができるのか知りたいわ
714nobodyさん:2009/02/08(日) 20:35:03 ID:???
Perlから入った奴なんかはそういう書き方をする事があるな。
Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。
715nobodyさん:2009/02/08(日) 21:05:08 ID:???
PHPだって、パース対象がグローバルなら、普通にfunctionの後置定義は有効だよ。
ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。

>>710なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ
716nobodyさん:2009/02/08(日) 21:07:39 ID:???
ツン?
717nobodyさん:2009/02/09(月) 00:04:48 ID:???
PHPとMySQLで学習用のWEBシステムを作っているのですが

' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する
にはどうすれば良いですか?

簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。
718nobodyさん:2009/02/09(月) 00:12:47 ID:???
基礎中の基礎すぐる
719nobodyさん:2009/02/09(月) 08:41:31 ID:???
>>717
mysql_real_escape_string
addslash
720nobodyさん:2009/02/09(月) 08:53:51 ID:???
addslash ? syntax error
721nobodyさん:2009/02/09(月) 09:16:28 ID:???
データーベースにデーターをつっこむ直前に
データーベース専用のエスケープ処理をするのが普通
722nobodyさん:2009/02/09(月) 09:20:54 ID:???
データー(笑)
723nobodyさん:2009/02/09(月) 21:42:26 ID:???
>717
使える箇所ならプリペアドステートメント。これが一番安全。
ttp://jp2.php.net/manual/ja/mysqli.prepare.php
ttp://jp2.php.net/manual/ja/pdo.prepare.php

使えない箇所ならmysql_real_escape_stringなど。
どの文字が危険かはDBによって違うので、MySQLにはMySQLの、OracleにはOracleの、SQLiteにはSQLiteの専用の関数がある。
724nobodyさん:2009/02/11(水) 12:21:22 ID:???
htmlの<base>のようにユーザのトップディレクトリを指定したいんですが、
ユーザのトップディレクトリを調べる方法はありますか?
725nobodyさん:2009/02/11(水) 13:56:50 ID:???
環境は?OSとか
726nobodyさん:2009/02/11(水) 14:12:44 ID:???
>>725
ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…
727nobodyさん:2009/02/11(水) 14:24:23 ID:???
exit()ってスクリプト終了のために多用してもいいのでしょうか?
たとえばエラーチェック時にdieの代わりに自作関数呼び出して終了みたいな場合など

function return_json($flag, $data){
 if($flag == true)
  $result = $data;
 else
  $result = "ERR:".$data;
 $res = array(
  "status" => $flag,
  "result" => $result );
 print(json_encode($res));
 exit();
}

if(エラーチェック1) return_json(false,"エラー1です"); //エラーなら終了

if(エラーチェック2) return_json(false,"エラー2です"); //エラーなら終了

//最後に
return_json(true,"成功です。");
728nobodyさん:2009/02/11(水) 14:33:34 ID:???
別にいいんでは?
729nobodyさん:2009/02/11(水) 15:13:35 ID:???
関数はあくまで何かを返すだけにして、制御を握っているのは「メインのルーチン」ひとつにした方がいい。
あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。
同じ理由で、printするよりは文字列を返す(printは「メインのルーチン」で行なう)方がいいと思う。

俺ならreturn_json()はjsonを返すだけ(exitもprintもしない)にして
function generare_json(){
 if(isError1()){
  return return_json(false,"エラー1です");
 }
 if(isError2()){
  return return_json(false,"エラー2です");
 }
 return return_json(true,"成功です。");
}
とし、echo generate_json()を最後に呼び出す。
exit()はスクリプトの末尾のみ、出力はこの文のみになる。
730nobodyさん:2009/02/11(水) 15:20:37 ID:???
つうか、正しいjson出力とエラー出力を別の関数にするかな。
boolを渡すより、return_error_json()の方が分かりやすい。
731nobodyさん:2009/02/11(水) 15:23:03 ID:???
>>719
ヒントをサンクス。

>>723
詳しいありがとうございます。
参考にさせて頂きます。
732nobodyさん:2009/02/11(水) 17:07:46 ID:???
>>726
ああもしかして、http://〜/~user/ の部分の実ディレクトリが知りたいってこと?
733nobodyさん:2009/02/11(水) 17:30:07 ID:???
実ディレクトリでいいのかな?ローカルでいえば
/Applications/MAMP/htdocs/
となります。
実行ファイルがトップにあるわけではないので相対パスでのファイル指定より
基点からの絶対パスのほうがわかりやすいかなと。
734724,733:2009/02/11(水) 17:31:27 ID:???
>>732
アンカーわすれてたので念のため
735nobodyさん:2009/02/11(水) 17:45:24 ID:???
>>733
dirname(__FILE__) とか getcwd() とか

そういうこと?
736nobodyさん:2009/02/11(水) 17:47:36 ID:???
>>733
$_SERVER['DOCUMENT_ROOT']
737nobodyさん:2009/02/11(水) 18:00:00 ID:???
ユーザー関係ないじゃんw
738724,733:2009/02/11(水) 19:15:46 ID:???
>>735,736
$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。
739727:2009/02/12(木) 16:10:42 ID:rITuikA6
>>729
それだとプログラム毎にgenerare_json()を書き換えるって事ですよね
(エラーチェックは入力値が対象なのでプログラム毎に変わるから)
if〜elseのネスト地獄に陥りたくないので、if文でエラーなら残りをすっ飛ばしたいだけなのです。
それとメインルーチンのほとんどがgenerare_json()内に入ってしまうような・・・

他の方法(関数内でprintもexitもなし)だと
1.エラー時、gotoでメインルーチン末尾に飛んでprint実行
2.フラグを用意し初期値true、エラー時falseにして、if(!フラグ && isError2())と毎回チェックする
3.例外処理
が思い浮かんだんですが、gotoはv5.3からだし、2は毎回チェックが煩わしい(スマートじゃない)、
3の入力値チェックのエラーは例外とは違う気がしたり・・・

それとも例外として処理してもいいのかな・・・?
チェック用自作関数は真偽を返すのでif文でエラーならthrowとか
740727:2009/02/12(木) 18:57:04 ID:???
連投ですみません。
色々調べたら入力値チェックで期待しない値は異常なエラーとして例外処理してもよい、
みたいに書いてあったので例外処理することにしました。

function throw_except($msg){
 throw new Exception($msg);
}

try {
 if( isError1() ) throw_except('エラー1');
 if( isError2() ) throw_except('エラー2');
 return_json( $xxx );
} catch ( Exception $e ) {
 return_err_json( $e->getMessage() );
}

例外処理になったからreturn_xxx関数内でprintさせてます(exitは削除)
print文を関数外に出した方がいいのかもしれませんが
741nobodyさん:2009/02/12(木) 19:05:55 ID:???
なんで「throw_except」←関数化してんの?
742nobodyさん:2009/02/12(木) 19:11:40 ID:???
毎回throw new Exception($msg);と書くのがめんどくさいので
743nobodyさん:2009/02/12(木) 20:08:20 ID:???
isError1()とisError2()側でthrowしろよ(まぁ関数名おかしくなるから変えて)
try {
isError1();
isError2();
return;
} catch (isError1Excetion $e) {
} catch (isError2Exception $e2) {
}
744nobodyさん:2009/02/12(木) 21:20:57 ID:???
isErrorをtryはせんだろうw
745729:2009/02/12(木) 23:45:53 ID:???
>739
if else地獄?>729のコードにはelseが一行も出てないだろ。これは偶然そうしたんじゃなくて、意識してそうデザインしたんだ。
適切な規模で関数を切って、returnでエラーを通知可能にすればelseは削れるし、多くの場合throwは不要になる。

すぐthrowを使いたがる奴は、GOTO時代と脳の構造が一緒の、OOPどころか関数指向にすらなれない原始人。
ぱっと思いつく欠点挙げてやろうか。throwだと妥当性検証エラーの結果を最初のひとつしか出力に反映できない。
他にも、どこまで処理が継続するのか、どこからの処理はすっ飛ばされうるのかを判定しにくいのも例外の欠点。
ロックファイルを作って、ファイルに書き出して、さあ安心と思ったら変なところから例外が飛んできて、ロックファイル削除せずに終了、とかな。
例外は、複数の呼び出し階層をぶっ飛ばして上位層にエラーをダイレクトに通知したい場合に使うものであって、GOTO代わりに使うものじゃない。

>729のコードの完成版 ttp://gist.github.com/62642
isError1とisError2の中身を替えれば、チェックする内容はそのまま置き換わる。
両者をまとめて関数化してしまえば追加も可能。generate_jsonはノータッチでいける。

入力値検証らしい構造に書き直した版 ttp://gist.github.com/62643
入力値チェックの内容が変わる場合、validate関数を差し替える。処理内容が複雑ならisError1みたいな関数を書いてvalidateから呼んでもいい。
746739:2009/02/13(金) 00:56:29 ID:???
ヒートさせてしまって&作例してもらって申し訳ないm(_ _)m

if else地獄というのは>>729のコードではなく(>>727の)自作関数内でexitしない場合のこと。
(一応自分でも>>727>>740で意図してelse使わないようにしてます)

ただ作例だとisError1,isError2,validate,build_responceなど関数自体を毎回書き直す羽目になるし、
メインルーチンがほぼ丸ごと関数化(build_responce)してるのもどうも・・・

関数は一度作ったら修正したくない、極力同じような文を書きたくない、ってのが元々の理由なので。

今作ってるのは妥当性エラーは1つ(というか「入力値が間違ってる」だけ)でいいのですっ飛ばしてます。
通常の入力ではなく意図的に変更してる場合しかありえないので。

確かに原始人と思いますが、GOTOも上手く適度に使えばいいんじゃないんでしょうか?
反GOTO教信者ではないし。

まあバリデーションにthrowの使うのは>>739にも書いたけど微妙だとは思いますが↓のようにあったので使ってみました
http://takagi-hiromitsu.jp/diary/20051227.html
>>パス名を受け取ることを想定したパラメタに「../」や「..\」が含まれていたら、削除とか変換をするのではなく、
>>エラーとして例外処理して終了するというのが、本来のそのプログラムの正しい動作だろう*5。

クライアント側でもチェックしてるのでそれをわざわざ変更して送ってくるのは上記にあてはまるかと。
747nobodyさん:2009/02/13(金) 01:41:35 ID:???
初心者相手なんで一応言っておくと、後者のコードは検証ルールが変わっただけなら書き換えないといけない関数はひとつ(validate)。
グローバル空間の処理や他の関数は一切触れなくて平気。
グローバル空間の処理を書き換える方が、関数を書き換えるより簡単だって言い張るならもう何も言わん。ダイクストラ以前の時代に帰れ。

「メインルーチンがほぼ丸ごと関数化してる」のは、確かに設計としては甘い。
本来は、「100%すべてを関数化すべき」だしな。
748746:2009/02/13(金) 02:05:40 ID:???
あー、でもとりあえず作例他ありがとです。
参考にして勉強させていただきます。
749nobodyさん:2009/02/13(金) 11:16:46 ID:???
質問です。
現在、PHP4を使って携帯サイトを作っています。
新規登録してログインして日記みたいなのを登録するシステムなんですが、
ログインした後の日記登録の部分は問題なく動作します。
ところが新規登録のところで動作がおかしい部分があるのです。

動作確認はdocomo,au,softbankの実機とPC上のエミュで行っています。
現象はsoftbankの実機のみで起こるのですが、スクリプトでは
header("Location:xxxxxx.php?id=xxxxx")でページを飛ばすところで問題が起きます。
docomo,au実機、PC上の3キャリアのエミュでは問題なく動作、ところがsoftbankの実機のみ
ページが飛ばずに「このページは開けません」みたいなエラーが出ます。
ソースレベルでは、その他の日記登録などとほぼ同じなのですが・・・。
softbank携帯だけ、何か仕様が違うのでしょうか?ちなみにセッションを使っています。
750nobodyさん:2009/02/13(金) 11:18:06 ID:???
↑に追記です。
飛び先のphpスクリプトにダイレクトに接続した場合、問題なく動作する事は確認済みです。
751nobodyさん:2009/02/13(金) 11:24:03 ID:???
さらに追記です。うざくてすいません・・・
header Locationで飛ばさずに、aタグを使って間にワンクッション置く(クリックさせる)と正常に動作します。
どのみち、その先でまたheaderで飛ばすところで駄目なんですが・・・。
752nobodyさん:2009/02/13(金) 11:45:37 ID:???
>>749-751
> softbankの実機のみページが飛ばずに「このページは開けません」みたいなエラーが出ます。

このときの、サーバーに残るアクセスログは?

んで、Locationで指定しているURLはドメイン込のフルパスで書いてるよね?
753nobodyさん:2009/02/13(金) 11:52:57 ID:???
サーバーのアクセスログは見る権限がないので、ちょっと頼んで調べてみます。
Locationには絶対ではなく、相対アドレスで指定しています。
754nobodyさん:2009/02/13(金) 12:03:26 ID:???
755nobodyさん:2009/02/13(金) 12:05:58 ID:???
サーバーのログを見ると、302が返ってきているようです。
要求しているURLは、変ではなくアクセス出来るURLでした。
756nobodyさん:2009/02/13(金) 12:09:54 ID:???
302はLocationヘッダーを飛ばした時のログでしょう。
その直後に正しいリクエストが来てるかどうか。
757nobodyさん:2009/02/13(金) 13:01:14 ID:???
同じリクエストを数回繰り返しているだけでした。
758nobodyさん:2009/02/13(金) 13:46:02 ID:???
>754
PDFの資料、大変役に立ちました。
locationで指定しているアドレスを相対から絶対にしたところ、動作しました。
ありがとうございました。
でも、他の部分では相対にもかかわらず正常動作しているんですけどね・・・。
やはり携帯サイトは難しいです。
759nobodyさん:2009/02/14(土) 13:18:20 ID:???
RFCだと絶対URL(absoluteURI)になってますね

rfc2616の14.30 Location
原文
http://tools.ietf.org/html/rfc2616
和訳
http://www5b.biglobe.ne.jp/~type-aya/rfc/rfc2616j.txt
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec14.30

ソフバンの方が厳密に仕様に沿っているんでしょう
760nobodyさん:2009/02/18(水) 18:43:17 ID:???
URLでファイル名やディレクトリを暗号(?)のようにするのはどうやって
いるのでしょうか?
例えば、認証するサイトでパスワード変更の時、応答メールで、
ttp://hoge.co.jp/mail/CSDFG365
へアクセスをすれば作業完了という場合の、CSDFG365や
ダウンローダーでttp://hoge.co.jp/download/CSDFG365にアクセス
すると、別名のファイル名が保存できる機能が、どう実装されているのか
知りたいのです。検索キーワードが悪いのか、ファイルの暗号化ソフト
ばかりヒットして解らずにいます。
どなたか教えてください。
761nobodyさん:2009/02/18(水) 19:28:28 ID:???
それをキーにしてどっかから引っ張ってきてるのでは?
762nobodyさん:2009/02/18(水) 19:45:41 ID:???
>>760
暗号ではなくユニークキー
763nobodyさん:2009/02/18(水) 23:18:25 ID:???
前者は
アカウント情報とそのキーを一緒にDBかなんかに突っ込んでおく
アクセスがあったらアカウントを有効にしてそのキーを削除する

とやってるだけ。
その文字列とあなたのアカウントIDやメールアドレスに直接の関係(例えば、メールアドレスを「暗号化」するとその文字列になるとか)
はないと思うし、むしろあったら設計として不味い。

後者も、文字列と実際のファイル名なりデータなりを関連付けるDBを保持しているだけ。
ダウンロードさせるファイルの名前はヘッダで指定できる。Content-Dispositionでぐぐれ。
764nobodyさん:2009/02/18(水) 23:18:58 ID:???
質問です。

皆さん、日記やブログを作るときどのような感じでスクリプトを組んでいますか?
例えばhtml文字をエスケープして、マジッククォートを取り除いて…といった形で教えてくださるといいんですが。
765nobodyさん:2009/02/18(水) 23:38:29 ID:???
ぐぐれよ
766nobodyさん:2009/02/19(木) 11:06:34 ID:???
>760
mod_rewriteを使ってるんだろうね。
767nobodyさん:2009/02/19(木) 12:40:19 ID:???
それのどこにmod_rewriteが必要なんだよw
768nobodyさん:2009/02/19(木) 18:38:41 ID:???
いや、hoge.co.jp/mail/CSDFG365 ←このアドレスの事をいったんだ。
暗号云々ではない。ズレてしまって申し訳ない。
769760:2009/02/19(木) 22:42:44 ID:???
みなさんありがとうございます。
パラメータをディレクトリとしていたんですね。
mod_rewriteを使って解釈しないといけないので、ズレていないと思いますよ。
使わずにすむ方法は思いつかないんですが・・・。
助かりました。ありがとうございました。
770760:2009/02/19(木) 22:50:42 ID:???
連続ですみません。もう一つ関連(?)でわからないことがありまして。
ダウンローダーとか、宅ファイル便とかだとファイルの公開日というのが
指定できるのですが、その指定した日時まで公開というのはどう実装するので
しょうか。ユニークキーと期日を保存して、その期日にユニークキーを
削除すると思うのですが、「その期日」に動作される方法が解らないのです。
教えて君ですみませんが、どなたかアドバイスください。お願いします。
771760:2009/02/19(木) 22:54:01 ID:???
すみません。
×「その期日」に動作される方法
○「その期日」に動作させる方法
でした。何卒よろしくお願いします。
772nobodyさん:2009/02/19(木) 22:56:59 ID:???
クラックとかでもなければDB内の改竄はできない気もするんですが
データを信用するなとのことなので出力時にhtmlspecialcharsを挟んでます
しかし装飾系のタグが使いたいので以下のようにしてみました
問題ありますか?

$str = "@<b@>強調@</b@>@<span class=@”red@”@>赤色@</span@>"; //DBから取得したデータ
echo str_replace(array("@<","@>","@”"), array("<",">","\""), htmlspecialchars( $str, ENT_QUOTES, "UTF-8" ));
検索文字はすべて全角、上はあくまでサンプルで実際の検索文字は違います
773nobodyさん:2009/02/19(木) 23:52:31 ID:???
>>770
ファイルそのものを削除するならcronなんかを走らせておくのでしょうが、
ファイルを直接DLではなくCGI/PHP経由でのみDL許可にすれば
期日後はユニークIDをDBから取り出せなくするだけで実現できるのでは?
774nobodyさん:2009/02/20(金) 04:23:24 ID:???
>>772
閉じタグ打たなかったら、ページの最後まで
適用されてしまうんでない?

<h1>おはよう


↑こんなの。ひろゆきがあめぞうを
つぶしたときに、「スタイルシート破壊攻撃」というのを
使ったのだ。「あめぞうウイルス」でググるとわかる。
775760:2009/02/20(金) 08:00:28 ID:???
>>773
アドバイスありがとうございます。
その期日後にPHPを起動(?)させる方法を知りたいのです。
だれもその期日(後)にPHPにアクセスしなければ、PHPは動作しないので。
あっ誰かがアクセスする時に、期限のチェックをすれば済む話ですね。
なんか自動的に削除処理しなきゃと思い込んでました。
超初心者ということで許してください。ありがとうございました。
776nobodyさん:2009/02/20(金) 08:15:05 ID:???
cronでPHP起動できるやろ
PHP内でcrontabを書き換えられるかどうかは知らんけど。
777nobodyさん:2009/02/20(金) 15:07:58 ID:???
自動削除は1時間毎や1日毎みたく定期的にcron動かせばいいんじゃないのかな
778nobodyさん:2009/02/21(土) 00:09:46 ID:???
>772
scriptタグを埋め込まれると、ページ内の全表示内容、クッキーを外部のURLに送信される可能性がある。
onloadなどのJavaScriptを実行されるものは全て同じ。
多くのシステムがタグを回避するのはこの脆弱性対策のため。
imageタグによる画像貼り付けや、objectタグによるFlash貼り付けなど、考慮しないといけない事は山のようにある。

脆弱性対策ってのは、猿真似してりゃいいってもんじゃない。
「何故」HTMLタグに警戒しないといけないのかを理解し、適切な対策を自分で考える必要がある。
勘違いするといけないのではっきり言うが、その処理を挟んでもセキュリティは一切向上しない。無駄だ。
779nobodyさん:2009/02/21(土) 06:29:21 ID:wFQNH034
perlで300行程度の規模のプログラムを外注で打ってもらったらいくら取られますか?
780nobodyさん:2009/02/21(土) 06:30:12 ID:wFQNH034
書き間違いました

perl X 
PHP ○
781nobodyさん:2009/02/21(土) 07:16:06 ID:???
500円
782nobodyさん:2009/02/21(土) 07:51:36 ID:???
うちなら400円で良いよ
783779:2009/02/21(土) 10:59:46 ID:???
おぉぉそんなものなの?作ってください!!!
ブラウザーアドベンチャーゲームなんだけど。

300行分を10本ね 

連絡先 [email protected]
784nobodyさん:2009/02/21(土) 11:05:48 ID:???
コメント行3万行入れて4万円上乗せするけどいいか?
785779:2009/02/21(土) 11:11:58 ID:???
だめぽorz
786nobodyさん:2009/02/21(土) 11:20:40 ID:???
すみませんが質問させてください。
入場者名と退場者名を同じ1ページ内で、上下のスパン(上半分が入場者名、下半分が退場者名)
にしてPDF出力したいと考えています。
プログラムはそれぞれ"nyuujyou.php"、"taijyou.php"が用意されています。
このように別々のプログラムの結果を、同じページ内でPDFで同時に表示させることはできますか?
共通の変数は日付$ymdだけです。
787nobodyさん:2009/02/21(土) 11:54:46 ID:???
>786
入場.php、退場.phpを、出力結果をechoするのではなく、出力結果を文字列として返す関数に書き直すのが正しい道。
こういう事は非常によくあるので、「出力結果を組み立てる」部分と「書き出す」部分は明確に分けたほうがいい。
「入場者名や属性の配列をDBから取ってくる部分」→「それを使ってHTML文字列を組み立てる部分」→「それを受け取って書き出す部分」
の三段階に分けると使い回しが効く。ロジックの殆どは最初の部分に来て、変更が多いのは簡単な後半だからな。
例えばCSVでファイルに書き出したい場合、最初の難しい部分にはノータッチで後ろの2つだけ書き換えればよくなる。
前から順に「モデル」「ビュー」「コントロール(の一部だが)」層と呼ぶ。

で、レシピだが。
<?php
$ymd = '2009/02/21';
ob_start();
require_once("入場.php");
$result1 = ob_get_flush();

ob_start();
require_once("退場.php");
$result2 = ob_get_flush();

でresult1、$result2に両phpの実行結果が文字列として入る。PDF変換はライブラリを自分で漁れ。
788786:2009/02/21(土) 11:59:35 ID:???
>787
わかりました、丁寧にありがとうございました。
789nobodyさん:2009/02/21(土) 12:59:33 ID:???
>>778
厳しいご意見どうも
前段に関してはセキュリティ関連のサイトとか見てるんで
scriptを仕込まれてとかはまあ理解してます(というかこんなことがあると把握してる程度というか)。
その上で>>772が全くの無駄となるとhtmlspecialcharsが意味を成さないんでしょうか
それとも関数の後に置換をしてるからダメになるんでしょうか。
これで100%対策してるとはもともと思ってませんが、htmlspecialcharsで
ある程度の対策になるという考えは間違ってるでしょうか。
>>772も置換パターンが読まれたらアウトですが、どういった部分がだめなのか1例だけでも
教えてもらえないでしょうか。
790nobodyさん:2009/02/21(土) 14:46:55 ID:???
@<b onmouseover=@"怪しい処理@" @>ボールドだよ@</b@>

自信ないけど、こんなの入れたらどうなるでしょうか。
791nobodyさん:2009/02/21(土) 15:18:21 ID:???
>>790
つまり789の最後に言ってるように@<が<に変換されるのが
ばれているということが前提ですか?
ならば置換を行わずにhtmlspecialcharsのみなら問題ないということでしょうか。
当初の一部タグを有効にしたいというのはとりあえず置いときますが。
792nobodyさん:2009/02/21(土) 15:38:10 ID:???
>>791
一部のタグだけ有効にしたいというのならstrip_tagsでいいでしょ
793nobodyさん:2009/02/21(土) 15:51:07 ID:???
出力時に htmlspecialchars を挟むのは間違えてない。
万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。
# まぁ、SQLインジェクションが起こった時点でいろいろ見直すべきだと思うけど。

装飾のタグが使えるのは素敵な機能だと思うけど、自力で組むのは難しいんじゃなかろうか。
自分ではどんなに完全だ、と思ってても意外なところに穴があったりするし。
ここで「大丈夫でしょうか?」って聞くくらいならば、そんなものは実装しないのが一番。
少なくとも str_replace() とかの単純な手法で実装できるような機能ではないと思う。

置換パターンが読まれてなければ云々については、
攻撃するときは攻撃者はいろんなパターンの文字列をスクリプトに投げてみて、置換や変換のルールを推測した上で攻撃するんだろうから、
あんまり考える意味がない。
794nobodyさん:2009/02/21(土) 15:54:51 ID:???
strip_tags
ttp://phpspot.net/php/man/php/function.strip-tags.html

この関数は、allowable_tagsで許可した全てのタグ の属性を修整しません。
これには、style お よび onmouseover属性が含まれており、悪意のあるユーザが他のユーザに見せるようなテキストを投稿する際に危険な行為を行う可能性があります。
795791:2009/02/21(土) 16:08:04 ID:???
ありがとうございます。
ちょっと忙しくなったので夜に反応します。
796nobodyさん:2009/02/21(土) 19:23:46 ID:???
>>783
設計はすでにできていてあとはコードを書くだけ?
それなら設計の読み方わかるニートがやってくれるかもね
普通の人に頼むならまぁ無理だと思ったほうがいいわ
時給換算して300行400円はわりにあわない
10分で300行かけるような超人がいたとしたら
人の○倍仕事量こなすから○倍よこせってなるのでますます無理
設計書くなら値段は跳ね上がるから設計書いらないっていうのが
PHPクライアントなわけだけど
それだとお金にならないからスルーするというのが業界の流れ
797nobodyさん:2009/02/21(土) 21:09:34 ID:1h/i9qY8
これだと1回で20数全部でます。1回1数でかぶらずに20回出したいです。
<?php
$numbers = range(1, 20);
shuffle($numbers);
for($i = 0; $i < 20; $i++) {
echo $numbers[$i]."<br>\n";
}
?>
798nobodyさん:2009/02/21(土) 21:19:21 ID:???
<?php
$CountLogFile = "カウントログへのファイルパスを指定";
session_save_path("セッション情報を記録するディレクトリパスを指定");

session_start();
if(!file_exists($CountLogFile))
{
touch($CountLogFile);
}
$File = fopen($CountLogFile , "r+" ) or exit("FileOpenError...");
flock($File , 2);
if(empty($_SESSION["Count"]))
{
$_SESSION["Count"] = "1";
$Count = fgets($File , 16);
$Count = $Count + $_SESSION["Count"];
}
else
{
$Count = fgets($File , 16);
}
rewind($File);
fwrite($File , $Count);
flock($File , 3);
fclose($File);
?>

<?php echo "AccessCount : $Count"; ?>
799nobodyさん:2009/02/21(土) 21:19:50 ID:???
マルチは地獄に落ちろ
800nobodyさん:2009/02/21(土) 21:35:22 ID:???
はわわ
801772:2009/02/21(土) 21:58:27 ID:???
strip_tagsは>>794なので自分で有効なタグのみ出力するよう考えてみたんですが難しいようですね。
wiki風なキーワード+対象文字っていうのも考えてたんですけど、それはそれで抜き出しのための正規表現とかで
>>793でも言われているどんな抜けがあるかが想像つかないものでして。
とりあえず今回はあきらめることにします。ありがとうございました。
802nobodyさん:2009/02/21(土) 22:35:15 ID:???
>>794
万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。

お前、いろいろと混同してないか?
803nobodyさん:2009/02/21(土) 22:42:59 ID:q8fBHhcW
test.html

<?php
if( $_POST['insert'] == 'insert' ) {
echo "インサート";
}
?>

・・・

<form action="test.html">
<input type="text" name="text">
<input type="submit" value="送信">
<input type="hidden" name="insert" value="insert">
</form>


送信を押したときにだけ、インサートを表示するようにしたいのですが、リロードした場合も表示されてしまいます。

POSTされた中身が保持されているからだと思うのですが、

送信を押したときにだけ表示するにはどうしたらよいでしょうか?
804nobodyさん:2009/02/21(土) 22:45:45 ID:???
リロードした時に「再送信しますか?」って聞かれてるだろ?
つまり、そういう事だ。
805nobodyさん:2009/02/21(土) 23:01:17 ID:???
>>802
不正に注入されたデータがJSとかのスクリプトを含むもので、html..を噛ませてなかったら、出力時に実行されてScriptInsertionにならない?
そこで、データの出力時にhtml..を噛ませてあれば、JSの実行は防げるから多少は軽減できる、って意味。
別にSQLInjectionが防げるっていう意味のつもりじゃないよ。
806nobodyさん:2009/02/21(土) 23:42:58 ID:???
質問です。

file_get_contents()って第一引数にファイル名を指定しなければならないと聞きましたが、ファイル名を変数に代入してそれを指定しても動きますでしょうか?
807nobodyさん:2009/02/21(土) 23:48:15 ID:???
動く
808nobodyさん:2009/02/22(日) 00:00:11 ID:???
>>803
解決法のひとつは、getにする。
809nobodyさん:2009/02/22(日) 00:11:37 ID:???
>>805
いやそこでSQLインジェクションが出てくるのがおかしいよ。
意図したとおりのSQLが実行されて、意図したとおりDBに保存されるんでしょ?

文字型のカラムに入るデータがHTMLだろうとJavaScriptだろうと
DB的にはなにも問題ない。

それを取り出して表示するときにHTMLならHTML用の処理が必要ってこと。


。。。ほかのとこにいた人?
810nobodyさん:2009/02/22(日) 00:15:33 ID:???
>>803
二重送信防止とかでぐぐれば結構出てくるよ
811nobodyさん:2009/02/22(日) 00:23:28 ID:???
>>809
インジェクションが万一、起こってしまった場合の話。
html..が対策になるなんて思ってないよ。

データベースから引っ張ったデータでも信用せずに、出力時にhtml..をかけておけば万が一、JSとかの意図しないデータを混入させられても少しは安全になるだろう。

って言いたかった。
間違えたこと言ってたらすまない。
812811:2009/02/22(日) 00:34:57 ID:???
なんかわかりにくくなってる。

言いたいことは>>809と同じのつもりなんだけど……。
ぐちゃぐちゃにしてしまった、申し訳ない。

IDスレのほうも似た話題になってるけど別の人です。
失礼しました。
813nobodyさん:2009/02/22(日) 00:39:28 ID:???
むしろ809が何に食いついてるのかがわからん
俺に読解力がないんだろうか
814nobodyさん:2009/02/22(日) 00:43:08 ID:???
質問です。
配列の値をカンマで繋げたいんですがそういった関数はないでしょうか。
配列関数のところにはなさそうなんですがforeachでループさせるぐらいしかないんでしょうか。
815nobodyさん:2009/02/22(日) 01:09:34 ID:???
implode
816nobodyさん:2009/02/22(日) 01:23:04 ID:???
implode,explodeは覚えておいて損はない
817nobodyさん:2009/02/22(日) 01:23:45 ID:???
>>815
ああstring関数でしたか。
ありがとうございます。
818nobodyさん:2009/02/22(日) 01:28:17 ID:???
>>816
はい、しかと覚えました。

ていうか今回はこちらの調べ方不足だったけど
関数多すぎでいまいちマニュアルから探しづらい・・・
819nobodyさん:2009/02/22(日) 01:32:17 ID:???
何でも自分以外の物のせいにする奴は駄目な子になるぞ
820nobodyさん:2009/02/22(日) 01:37:18 ID:???
>>818
「php 関数 配列 つなげる」でぐぐったらすぐ出てきたぞ
821nobodyさん:2009/02/22(日) 01:50:01 ID:???
キーワード
php 配列 値 繋げる

今回は悪かったって
たいていググルで見つかるけどマニュアル内検索でヒットしたらいいんだけどね
とまた転嫁
822nobodyさん:2009/02/22(日) 02:26:36 ID:???
PHPの関数は6500個あるから
マニュアル全部読みとか無理
823nobodyさん:2009/02/22(日) 02:57:10 ID:???
>>822
6500とかすげーなw
数えたお前もすげーよ
824nobodyさん:2009/02/22(日) 10:23:10 ID:???
>>804
>>808
>>810
ありがとうございます。参考にさせていただきます。
825nobodyさん:2009/02/22(日) 10:31:23 ID:???
phpのレンタルサーバでオススメなところはどこですか?
私は、今のところサクラを考えていますが既に使われている方は
実際の使い勝手は如何でしょうか?

選択する上でのポイント
・月額料金が1000円未満
・ローカルで作成したphpスクリプト+DB(MySQL)を簡単に使える(UI操作でOK)
826nobodyさん:2009/02/22(日) 10:32:38 ID:???
827nobodyさん:2009/02/22(日) 15:33:49 ID:???
最近引き継いだ案件のソースみたら、
PDOもPEARもmysqliも使ってなくて、
いまだにmysql関数使っててマイッタ。
インジェクションはエスケープ文字をあらかじめ
全部全角に変換することで対応してるみたい。
これってどうよ?
828nobodyさん:2009/02/22(日) 16:01:03 ID:???
トリッキーな解決は風物詩
829nobodyさん:2009/02/22(日) 16:06:55 ID:???
おれもmysql関数しか使わないよ
どんな環境・設定でも対応できるからネイティブ関数だけで使いやすいようにクラス化しておけば使いやすいし
830nobodyさん:2009/02/22(日) 16:14:47 ID:???
>>829
やっぱそういうことか。
たしかにどネイティブだからサクサク動いてるんだよな〜これが。
デグレ起こしたらいやだし、今回は実装あわせてサクッと終わらせよ。
831nobodyさん:2009/02/22(日) 16:47:38 ID:???
Vistaにapacheをインストールしたのですが、
起動しようとすると、
「指定されたファイルが見つかりません。No Installed service named "Apache2"」
となって起動できませんでした。

UACはオフにしているのですが…、どなたか教えて下さい。
832nobodyさん:2009/02/22(日) 16:57:39 ID:???
IISとかSKYPEが起動してないか要チェックですぞ
833nobodyさん:2009/02/22(日) 16:58:16 ID:???

PCにキックをすると直ったよ。
834nobodyさん:2009/02/22(日) 17:15:38 ID:???
>>832
あ!skype起動してました!これオフラインにすると正常にインストールすることができるんですかね?
あとIISってのが分らないです。調べてみます…
835nobodyさん:2009/02/22(日) 17:32:49 ID:???
ポート80の取り合いするからだよ
836nobodyさん:2009/02/22(日) 17:34:31 ID:???
できました!skype閉じてインストーラ起動させてみたら正常にインストールできました。
皆さんのおかげです。ありがとうございました!
837nobodyさん:2009/02/22(日) 17:39:03 ID:???
青いねぇ!すがすがしい!
838nobodyさん:2009/02/22(日) 17:54:25 ID:???
PHPを拡張しようと思ってhttpdのAddModuleという欄をさがしてみたのですがありません。
apacheのバージョンは2.0、PHPのバージョンは5なんですが2.0には最初から書いてないんですかね?
839nobodyさん:2009/02/22(日) 18:06:50 ID:???
LoadModule書けばよし
840nobodyさん:2009/02/22(日) 18:10:00 ID:???
お!そうなんですか! じゃあAddModule mod_php4.cの記述はいらないってことですかね?
841nobodyさん:2009/02/22(日) 18:11:04 ID:???
そらそうだ。
エスパーじゃないんだから、チミがAddModuleするかなんて
アパッチ様が知るわけないだろ
842nobodyさん:2009/02/22(日) 18:13:45 ID:???
エスパーじゃない...そうですね!
アパッチ様がエスパーじゃないという前提で、LoadModule mod_php5.cと記述してみました。これで合ってるでしょうか
843nobodyさん:2009/02/22(日) 18:29:41 ID:???
それじゃぁエスパーだという前提じゃないと動かないと思うぞ
844nobodyさん:2009/02/22(日) 18:31:48 ID:???
えー!どうしましょう!じゃあもうコレ

AddModule mod_php5.c
いらないってことですかね?
845838:2009/02/22(日) 23:02:42 ID:???
もう!オレのバカバカ!こんな質問でみんなを困らせて!
みなさんありがとうございました。自分で解決してみます
846nobodyさん:2009/02/23(月) 01:21:02 ID:???
>>803
value をからにしておいて、ボタン押したら
document.forms[0].elements['insert'].value = 'insert';
document.forms[0].submit(); とか、phpじゃないけど、、
847nobodyさん:2009/02/23(月) 09:53:42 ID:???
これからPHPを1から勉強しようと思っています。
初心者用でおすすめの技術書はありますか?
できれば1行ごとに、「//変数を配列[a]にセットする」・・などといった解説がついているといいのですが。
おねがいします。
848nobodyさん:2009/02/23(月) 12:40:12 ID:???
マニュアル
849nobodyさん:2009/02/23(月) 12:52:59 ID:???
その段階ならマニュアルの言語リファレンス読んだほうがいいと思われ
850nobodyさん:2009/02/23(月) 14:11:13 ID:???
PHPをイチからっつても、下地があるかどうかで変わってくると思うけど・・・
なんか他の言語でプログラムはしたことあるの?
851nobodyさん:2009/02/23(月) 15:26:41 ID:???
PHPでfeedcreator.class.phpを使ってRSS出力をしています。
RSSのURLをIEでクリックすると、ちゃんとitemsを拾ってXMLにしてくれるんですけど、
RSSリーダーやFirefoxでクリックするとitemsを拾ってくれません<items>要素が空になってます。
IEとFirefoxでは挙動が違うのでしょうか?
852nobodyさん:2009/02/23(月) 15:39:23 ID:???
↑の者です。
原因がわかりました。お騒がせしました。こちらのプログラム上のミスでした。
853nobodyさん:2009/02/23(月) 16:06:29 ID:???
>>847
実践マスターPHP+MySQL

独習PHP

PHPによるWebアプリケーションスーパーサンプル
854nobodyさん:2009/02/23(月) 16:23:08 ID:frx8oxrA
初心者ってレベルじゃないですがPHP+Apacheの最新版のインストール手順が載ってるサイト
ってありますか?
どこ調べても旧バージョンしかないんですが。
855nobodyさん:2009/02/23(月) 16:25:24 ID:???
ここは超初心者用だから問題ないですよ。
856nobodyさん:2009/02/23(月) 16:34:11 ID:???
>>855
それはありがたいです><もし心当たりのあるサイトがあれば教えてください
857nobodyさん:2009/02/23(月) 16:51:00 ID:???
環境は?OSとか。
インストールはバイナリーから?ソースからビルド?
旧と手順変わらないと思うけどね。確実なのは添付されてるドキュメント
858nobodyさん:2009/02/23(月) 16:55:07 ID:???
>>854
OSぐらい書いといた方がいいと思うよ。
WindowsとLinixがやり方違うし。

最新版は
Apache: 2.2系
PHP : 5.2.8

でおk?
859nobodyさん:2009/02/23(月) 17:49:03 ID:frx8oxrA
>>858
そうです。OSはウィンドウズです。
860nobodyさん:2009/02/23(月) 17:52:48 ID:???
>>857
よくわかりませんが多分前者かと
861nobodyさん:2009/02/23(月) 17:56:31 ID:???
運用でなく開発環境として+インストールの勉強自体が目的じゃないなら
XAMPP入れた方が早いよ >>windows
862nobodyさん:2009/02/23(月) 18:01:35 ID:???
>>848>>849>>850
まったく経験なしに等しいです。
>>853
ありがとうございます。とりあえずXAMPPはインストールしました
863nobodyさん:2009/02/23(月) 18:05:24 ID:frx8oxrA
XAMPPってすごいですね。私は学習用に必要なんでこれを使わせていただきます。
ありがとうございました。
864nobodyさん:2009/02/23(月) 19:28:01 ID:???
XAMPPのよさがまったくわからない。
865nobodyさん:2009/02/23(月) 19:39:11 ID:???
>>854
xampp
866nobodyさん:2009/02/23(月) 19:40:36 ID:???
>>864
じゃあ秋葉原にいくな

CPUを買うときと、ハードディスクを買うときと、
ソフトを買うときと、マウスを買うときと、
それぞれ全部違う町にいけ。
867nobodyさん:2009/02/23(月) 19:57:12 ID:???
それは大げさ
868nobodyさん:2009/02/23(月) 21:15:50 ID:???
>>867
いや、そんなもん
わざわざ面倒な方を選んで何が楽しいんだろうね
869nobodyさん:2009/02/23(月) 21:18:58 ID:???
じゃあなんでwampじゃなくてxamppなんだ
870nobodyさん:2009/02/23(月) 21:38:57 ID:???
いいんじゃない?自分が使ってるWeb鯖やアプリ鯖の設定について何も知らんでプログラミングしたいならそれで。

八割がた後になってハマるんだがw

必要になったらそのとき勉強する?はいはい。
871nobodyさん:2009/02/23(月) 21:41:24 ID:???
まったくだ。
どんだけものぐさなんだよ。
872nobodyさん:2009/02/23(月) 21:52:11 ID:???
>>870
馬鹿か?
駄目なやつは何を使っても駄目
ようは使う人の問題だろ

それにXAMPPは何も設定できないと思ってんのか?これだから低脳は
873nobodyさん:2009/02/23(月) 21:53:30 ID:???
うんお前を見てよく分かるよ
874nobodyさん:2009/02/24(火) 09:21:59 ID:???
http://anond.hatelabo.jp/20090222100251
ちょっと違うけどxamppにも当てはまる話
875nobodyさん:2009/02/25(水) 10:09:48 ID:???
>>866
おまえはそれらを買う時に、常に全部一緒に買えよな。
876nobodyさん:2009/02/25(水) 22:54:22 ID:???
既存のPCいじるときには一緒に買ったりはしないが、新しいPCを作る時は一緒に買うわな。
勿論、「ディスプレイとマウスは既存のものを使いまわすから要らないや」という事はあるが、全部必要な事のほうが世間的には圧倒的に多い。
マウスだけ使いまわすなら、ワンセット買って来てマウスだけ取り替えた方が楽だしな。

つうか、むしろBTOに近い気がする。
組み立てが面倒なので、多少コストで損をする事を承知でDellに頼むわけだ。
1台だけなら自作するだろうが、100台必要だと分かっているなら自作する馬鹿はいない。
webフレームワークは10台くらいの、自分でやるか頼むかちょっと迷うなってラインか。
877nobodyさん:2009/02/25(水) 22:59:00 ID:???
あれ、いつの間にかフレームワークの話に逸れた。何故だろう自分でも分からない。
後半は思いっきり忘れてくれ。

とりあえず、初心者に買わせるならメーカー品にするだろ?って話。
878nobodyさん:2009/02/26(木) 10:25:39 ID:???
全てソースから自分でオプション決めてビルドしてインストールするから
xamppなんて思いつきもしないな。
初心者ならそれから始めてもいいけど、何かあった時に誰かに聞くしか能がないから
決まった使い方しかできないみたいだな。
879nobodyさん:2009/02/26(木) 11:47:43 ID:???
最近PHPスキル伸び悩んでるんだけど、
クラスやった事ないのでやったらいいですかね?
PHPマスターはオブジェクト指向ですか?
880nobodyさん:2009/02/26(木) 11:55:18 ID:???
伸び悩んでるっていうかそれって皆無じゃん
881nobodyさん:2009/02/26(木) 12:05:11 ID:???
PHPってオブジェクト指向になったんだろ?5から。
オレもまだ4ばかり使ってるけど、クラスはボチボチ使い始めてる。
882nobodyさん:2009/02/26(木) 12:13:19 ID:???
オブジェクトなにがしがよりよい制作手法ならやればいいさ
よりよい制作手法を実現するための手段ならこだわる必要ない
883nobodyさん:2009/02/26(木) 13:02:56 ID:???
>>879
データベースは使えるの?
オブジェクト指向はPHPで最初にやるべきではない。
不完全なPHPで最初にやると、
PHPが一般的で他の言語は特殊だという間違った認識が身につくよ。
用語なんかも一般的な他言語のものとは意味あいが違ったりするし。
884nobodyさん:2009/02/26(木) 13:18:41 ID:???
>>883
例えば?
885nobodyさん:2009/02/26(木) 14:19:48 ID:???
postgreです。
CSSなども基本的は事はOK
オブジェクト思考自体初めてなので>>883な言った様な
偏った認識もしたくはないですが、PHPのオブジェクト指向ができれば
他の言語もとっつきやすいですよね?
886nobodyさん:2009/02/26(木) 14:36:47 ID:???
PostgreSQLをpostgreと言う人は初心者だと思うが。
せめてpostgres
887nobodyさん:2009/02/26(木) 14:46:06 ID:???
すいませんgoogle検索の癖です。
PHPとPosgreをいつもセットで使ってますからsqlはできます。
888nobodyさん:2009/02/26(木) 16:21:15 ID:???
885じゃないけどポスグレって言わね?
postgreは記憶ないけど
889nobodyさん:2009/02/26(木) 16:35:04 ID:???
>>884
>>883じゃないけど、オーバーロードとか。
ttp://www.php.net/manual/ja/language.oop5.overloading.php
>PHP における "オーバーロード" の解釈は、他の多くのオブジェクト指向言語とは異なります。
>一般的に「オーバーロード」とは「名前は同じだけれども引数の数や型が異なるメソッドを複数用意できる」という機能のことを指します。
890nobodyさん:2009/02/26(木) 16:56:04 ID:???
PHPの本アマゾンでみたけど、
次はステップはデザパタ?ぽいですね。
891nobodyさん:2009/02/26(木) 18:24:38 ID:???
>>885
お前恥ずかしいなあwww
892nobodyさん:2009/02/26(木) 19:06:20 ID:???
893nobodyさん:2009/02/26(木) 19:14:16 ID:???
>>892
googleすげえええええ
894nobodyさん:2009/02/26(木) 19:55:32 ID:???
四の五の言わずにJAVAやれ
やっつけ案件はPHP
895nobodyさん:2009/02/26(木) 20:13:16 ID:???
>>894
ほとんど小規模だからJavaの出る幕はあまりない
896nobodyさん:2009/02/26(木) 21:10:54 ID:???
>>895
まあね。この不景気じゃなぁ。。。
897nobodyさん:2009/02/26(木) 23:08:25 ID:???
>>889
マニュアルに明記されてるならいいじゃん
898nobodyさん:2009/02/26(木) 23:36:04 ID:???
よくねえよw
なんでオーバーロードなんて名前つけたのかアホとしか思えん
899nobodyさん:2009/02/26(木) 23:37:18 ID:???
なんでよくないの?
900nobodyさん:2009/02/26(木) 23:42:59 ID:???
統一性がなくなって混乱の元になるだけだろ
PHPだけがこんな状態ならまだいいけど
他の言語がこぞってオーバーロードはこういう機能です!
って別々な実装していったらどうなるんだ?
乗り換えに苦労するだろ
901nobodyさん:2009/02/27(金) 01:10:45 ID:???
オーバードーズなら一目瞭然なんだけどね。
飯島愛の死体を見せれば。

「これがオーバードーズという状態です」って。
902nobodyさん:2009/02/27(金) 10:11:12 ID:???
分かりました。
仕事でPHPやりながら家でJAVAかじります。
903nobodyさん:2009/02/27(金) 11:01:39 ID:???
Javaは、先に設計をカッチリ決め、100%それに沿って開発するようなシチュエーション向きの言語。
100人↑が絡むような大規模案件はどの道仕様をカリカリにfixさせるので、Javaのような静的言語と相性がいい。
ただし、型でガチガチに固められるから、仕様変更に異常に弱いという欠点がある。
まあ、だからこそちょっとした仕様変更でも追加料金を請求できて、だからこそ儲かると言われるわけだが。

仕様がポンポン変わるようなアプリケーションには、動的言語のほうが向いている。
例えばPHPは、メソッドさえ同じならどんなオブジェクトを渡しても動くような関数が簡単に書ける。
Javaでこれをやるには専用のインターフェイス書かなきゃいけないし、新しい機能を実装すると過去のコードにまで変更が波及しがちになる。

趣味コードでJavaとか、考えるだけで恐ろしい。
仕事でPHPを使うことの次くらいにやりたくないな。
904nobodyさん:2009/02/27(金) 13:18:50 ID:???
趣味でぼっち開発の俺には、簡単お手軽どこでも動いてゆるゆるのPHP君で十分です。
905nobodyさん:2009/02/27(金) 18:13:37 ID:???
>仕様変更に異常に弱い
それは設計モデル次第だ
906nobodyさん:2009/02/27(金) 20:58:22 ID:???
>>904
一人で100人のキャラを演じながら開発しろよ
907nobodyさん:2009/02/27(金) 23:31:53 ID:???
>905
比較の話だろ。
そりゃJavaだってアセンブラよりは変更に強かろうよ。
908nobodyさん:2009/02/28(土) 23:56:48 ID:???
>>1
を読んで思い切って質問してみちゃいまう

tp://hiroqli.blogspot.com/2007/12/keepass.html

にphpと書かれていたのでここで質問するんですが
これを自分のPC上で実行したい場合どうすればいいんでしょう?
IDMというアプリでエクスポートされたCVSをKeepass用に変換できるもののようなんです
よろしくお願いします
909nobodyさん:2009/03/01(日) 00:29:41 ID:???
>>908
http://www.php.net/downloads.php
PHP環境を入れる
910908:2009/03/01(日) 00:45:47 ID:???
>>909
XAMPPというのをインストールして
tp://www.phppro.jp/school/phpschool/vol1/4
のところまでやりましたがそこから先がさっぱり。。
911nobodyさん:2009/03/01(日) 01:13:58 ID:???
初心者ならxamppはやめとけ
912nobodyさん:2009/03/01(日) 12:56:14 ID:???
教科書読んでたら、

「exitは終了時にメッセージを発生しない」
って書いてあるけど、
自分で実際に試したら、メッセージを表示できるんだけど、
教科書が間違っている?

<?php
exit('hello');
?>
913nobodyさん:2009/03/01(日) 13:02:27 ID:???
http://www.php.net/manual/ja/function.exit.php
↑パラメータの注意書きのところ
914nobodyさん:2009/03/01(日) 13:13:51 ID:???
「質問」の人?
915nobodyさん:2009/03/02(月) 02:49:22 ID:???
HTMLの表示用に同じ雛型を用いて、個別に変わる個所を変数で呼びしたいのですが
変数を入れ子で使うにはどうすれば良いのかご教授ください。

test.php
<?php
$title = "てすとぺーじ";
$hoge = $hensuu1; //変数1の中身を表示させたい
?>
<?php include('html.php'); ?>
<?php echo $html; ?>

html.php
<?php include('hensuu.php'); ?>
<?php
$html = "
<html>
<head><title>$title</title></head> ←$titleは「テストページ」となりますが
<body>
$hoge ←例えばここに「hensuu1」の中身を表示させるためには、どうすればいいですか?
</body>
</html>";
?>

hensuu.php
<?php
$hensuu1 = "実際に表示させたい内容";
?>
916nobodyさん:2009/03/02(月) 02:58:08 ID:???
>>915
なんか色々変・・・
設計を見直したほうがいいよ
917nobodyさん:2009/03/02(月) 03:10:55 ID:???
素直にテンプレートエンジン使いなよ
918nobodyさん:2009/03/02(月) 03:30:10 ID:???
>>916-917
変なのは分かっているのですが
設計を見直そうにもphpを初めて1週間なので
何をどうしたらベストなのか計画を立てることさえできません。


現状はwindowsにApacheとPHPを入れて
表示されるかどうかを確認するのが精いっぱいです。
919nobodyさん:2009/03/02(月) 03:34:00 ID:???
ならまだそんなことやる段階ではないと思われ
920nobodyさん:2009/03/02(月) 06:04:37 ID:???
php file_put_contentsの排他ロックは
全然ロックされてないって本当?
921nobodyさん:2009/03/02(月) 06:15:47 ID:???
922nobodyさん:2009/03/02(月) 06:40:23 ID:???
内部的にfopenするときにw+で
開いてしまっているので、ファイルの内容が空になる。

そんときに第三者から読み込みにこられると
空のファイルを渡す

それからロックをかける

こういう仕様なので、append以外では使えない。

こういう理解にしました。
923nobodyさん:2009/03/02(月) 06:46:28 ID:???
ロックが必要なのはwriteのときでreadはいらんだろ
924nobodyさん:2009/03/02(月) 06:50:24 ID:???
>>922
空のファイルが渡されるっていう現象を検証できるソースある?
試してみたい。
925nobodyさん:2009/03/02(月) 06:58:05 ID:???
(1)w+でオープンする
(2)w+なので、自動的にファイルの中味が空になる
(3)第三者が読み込みにくる
(4)空のファイルを渡す
(5)ここでようやくロック発動
(6)第三者が空のファイルを戻しにくる
(7)カウンタがぶっ壊れる
926nobodyさん:2009/03/02(月) 07:19:37 ID:???
検証したの?
別な理由でカウンター壊れてんじゃないの?
カウンターにfile_put_contentsって手抜き杉で笑えるから別なところにもバグありそうだけど
927nobodyさん:2009/03/02(月) 07:21:20 ID:???
file_put_contentsって
fopen -> fwrite -> fclose
って3つの流れを自動でやってくれるんだけど、
この中の
fopenが、どうもw+でオープンしてるらしい。

だとしたら、ファイルの中味は問答無用で
オープン時に空になるよね。

だからappend以外では使えない。
928nobodyさん:2009/03/02(月) 07:25:56 ID:???
マニュアル見るのめんどくさいからみてないけど
file_put_contentsも第三引数あたりでLOCK_EX使えるでしょ

>>927
該当ファイルを読み込んで修正してファイルを空にして全て書き出すのが基本
追記も便利だけどね
929nobodyさん:2009/03/02(月) 07:29:33 ID:???
>>928
今はLOCK_EXの話をしてる。
930nobodyさん:2009/03/02(月) 07:34:32 ID:???
LOCK_EXが信用できるかできないかの話かsorry
ソース見てみないとどうなってるかわからないな
931nobodyさん:2009/03/02(月) 07:36:23 ID:???
検証してみたよ。
コマンドラインで
for($i = 0; $i < 10000; $i++) {
$data = file_get_contents("test.txt");
$data += 1;
$res = file_put_contents("test.txt", $data, LOCK_EX);
if ($res === false) {
error_log("write failed");
}
}

こんな感じのソースをシェルを複数立ち上げて実行したら、
単独なら10000になるけど、同時実行させると少なくなった。
3端末でやったら29767だった。本来なら30000になるべきだが。
しかし、もし>>925の言っている通りなら、どっかで0が戻るとすると、
こんなにきわどい値にはならない。もっと小さくなる。

排他ロックされて、書き込みに失敗していると見るべきだ。
実際、エラーログには書き込みに失敗した分のfailedが記載されたよ。

よって、LOCK_EXは正しい。
932nobodyさん:2009/03/02(月) 07:38:18 ID:???
つまり、まじめにカウンターを実装するなら、file_put_contentsでfalseが返ったら、
リトライするなりなんなり、自分で実装しなきゃいけない。
そこを、ミスったのをPHPの仕様漏れにしたがったってことじゃねぇか。
933nobodyさん:2009/03/02(月) 07:44:15 ID:???
$count = 0;

counter:
try {
カウンター書き込み
} catch(Exception $e) {
while($count <= 試行回数) {
$count++;
goto counter;
}

こんなんか?
934nobodyさん:2009/03/02(月) 07:51:15 ID:???
http://yp.xenophy.com/?p=23

誰も信じて疑っていないのか、PHP5.1.0からサポートされたという、第3引数のLOCK_EXによる排他ロック
file_put_contents( $path, $string, LOCK_EX );

これ・・・・・排他ロック・・・・・・できてません。。。

JMeterの負荷テストにて実証済みです。
具体的にどうなるかというと、書き込み時にロックがかけられないので、
書き込み時に、読み込みが行われた場合は、「空」で取得されます。
うーん。空なのか。。。
935nobodyさん:2009/03/02(月) 08:07:09 ID:???
くだすれだが、くだらないブログのつぶやきを信じるスレじゃないからな。
検証してねぇだろそのブログ主
936nobodyさん:2009/03/02(月) 08:07:55 ID:???
>>933
例外が発生してるわけじゃないからな。
937nobodyさん:2009/03/04(水) 07:34:34 ID:???
<?php
print M_SQRT2;
?>

で、スクエアルートが表示できると聞いて、
さっそくいろいろ試してみたのだが、
これって結局、2と3しか対応してないのな。
938nobodyさん:2009/03/04(水) 08:21:57 ID:???
BASIC認証でログアウトするのってどうすればいいの?
939nobodyさん:2009/03/04(水) 08:23:59 ID:???
940nobodyさん:2009/03/04(水) 08:45:59 ID:???
アクセスしてきたユーザーのIPアドレスを
crypt、またはMD5,またはsha1等で
暗号化してIDとして表示したいのだが、
安全性はどんな感じか。
941nobodyさん:2009/03/04(水) 08:53:13 ID:???
>>940
何の安全性?
942nobodyさん:2009/03/04(水) 08:56:47 ID:???
>>941
復号されること
943nobodyさん:2009/03/04(水) 09:09:26 ID:???
固定IPアドレス前提?
複号されたところでどうなる?
暗号IPとREMOTE_HOSTで照合するわけだよね? だとしたら生IPとREMOTE_HOSTで照合するのとほとんど変わらないと思うが・・
944nobodyさん:2009/03/04(水) 09:14:22 ID:???
>>943
違う。
アクセスしてきたやつのIPを
暗号化関数にぶちこんで、IDを生成して、

「今、この人達が見にきてます」

って表示するの。
945nobodyさん:2009/03/04(水) 09:18:17 ID:???
表示するためだけに使う程度のIDなら見に来てる人に名前入力させれば?
946nobodyさん:2009/03/04(水) 09:24:06 ID:???
>>945
それをサニタイズして表示するのがめんどくさい
入力させない方がセキュリティは上がる
947nobodyさん:2009/03/04(水) 09:33:34 ID:???
でも見に来てる人たちのIDの中に自分のIDも確認できたほうがちょっとうれしくないか?
文字のランダムな羅列よりも・・
948nobodyさん:2009/03/04(水) 09:42:46 ID:???
セッションって、一回セットすると、
破棄するのがすっごくめんどうなんだね。

<?php
session_start();
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
session_destroy();
}
?>


こんなに書かないと消せないなんて、、、
949nobodyさん:2009/03/04(水) 10:03:06 ID:???
簡単に消そうと思えばセッションファイルをunlinkするだけで事足りるだろ
ブラウザ側のクッキーの扱いなんてしょせんサーバ側でコントロールなんてできないし
950nobodyさん:2009/03/04(水) 13:03:55 ID:???
>>939
5.3からceilとかfloorをroundで代替できるようになるんだね
951nobodyさん:2009/03/04(水) 13:50:54 ID:???
ログインしてる、していない、を
判別するにはどうしたらいいかな?
952nobodyさん:2009/03/04(水) 13:51:26 ID:???
ブラウザを開いていたら、ログインしてる。
ブラウザを閉じたら、ログインしてない。

これでいいのかな?
953nobodyさん:2009/03/04(水) 15:47:05 ID:???
ログインしている = ログイン後ログアウトしていない
954nobodyさん:2009/03/04(水) 21:10:09 ID:???
ログインしたらセッションを生成、ログアウトしたらセッションを破棄。
セッションの最も一般的な使い方。

自分で実装するならこんな感じ。

1.ユーザーがログインフォームにパスとIDを打ち込む
2.リクエストを受けたサーバーは、パスワードを照合。
 あってたら、ランダム文字列をクッキーとしてユーザーに送りつける。
 同時に、この値とユーザーのIDをセットにしてどこかに保存しておく。
 一番シンプルなのは、クッキーの値をファイル名にして、中にユーザーID書き込んでおくとか。
((((((10年後))))))
3.ユーザーがアクセス時にクッキーを送りつけてくるので、そのファイルを探す。
 あったらそいつはログインしているユーザー。
 ファイルの中身を読み、ユーザーのIDを(=ユーザーが誰かを)特定し、処理を続ける。

この「クッキーを発行し、クッキーを送りつける」「ファイルがあるか確認する」をやってくれるのがPHPのセッション。
ファイルの中身がセッション変数に当たる。
955nobodyさん:2009/03/05(木) 00:53:07 ID:Rp65yYdP
FlashDevelopみたいな補完機能が超強力なphpエディタってない??
956nobodyさん:2009/03/05(木) 01:23:02 ID:???
出席簿みたいのを作りたいんですよ。

ブラウザを開いている間は、出席している。
ブラウザを閉じたら、退席した。

こういうロジックで、セッションを使って実装するのは
どうしたらいいですか?

フォームにIDとパスワード入れてログインするとかじゃなくてです。

IPアドレスだけで実現したいのです。
957nobodyさん:2009/03/05(木) 01:53:13 ID:???
セッションが存在したら出席,
セッションが存在しなかったら退席
でいいんじゃないの?
958nobodyさん:2009/03/05(木) 02:12:34 ID:SpoYISjY
あまり意味のない事かもしれませんが、同一の接続IDを使って
mysql_query()とmysqli_query()を混在させたり、
mysql_query()で問い合わせてmysqli_close()でクローズしたりする事は
可能でしょうか? 教えてください。

以下のページでは、mysqli_*()ではオブジェクトAPIを使用すると説明がありますが、
mysql_connect()はコネクションを再利用するが、mysqli_connect()は常に新規にコネクションを取得するように
connect以外でもmysql_*()とmysqli_*()では、動きが異なるようなものだったりするのでしょうか?

ttp://d.hatena.ne.jp/taiju1225/20080509/1210305274
959nobodyさん:2009/03/05(木) 08:44:27 ID:???
学習1ヶ月程度の初心者です、よろしくお願いします。
入門本に、header("location:url")のみでリダイレクトされた先のスクリプトで、
$_GET["キー"]で値をとれていますが、GET送信の場合は値を
?で付けていかなければ駄目ですよね?
送り元は自身にPOSTでは値を送っています。
そして送り元も送り先もセッションでは値を送受信していますが。

960nobodyさん:2009/03/05(木) 08:54:13 ID:???
意味不明なのでもう一度書き直してくれ
961nobodyさん:2009/03/05(木) 08:57:21 ID:???
その程度の話、意味がわかるように書けたら答え出るだろ。
質問のふりして、入門本に文句つけてるだけじゃね?
962nobodyさん:2009/03/05(木) 08:59:23 ID:???
意味不明なのでもう一度書き直してくれ
963nobodyさん:2009/03/05(木) 09:01:52 ID:???
おれも、自分で書いた後そう思ったw
964nobodyさん:2009/03/05(木) 10:47:36 ID:???
<?php
$a=0.97075300;
$b=0.97083700;

$c=$b-$a;

print $c;


?>

これを実行すると、

8.4E-5

とかって、出てきます。
Eとか不愉快なんで、ちゃんと数字で
結果を表示したいのですが、どうすればいいですか?
965nobodyさん:2009/03/05(木) 10:59:16 ID:???
なんで下スレから移動してんの?
966959:2009/03/05(木) 11:27:28 ID:???
書き直します。
header("location:url")でリダイレクトされた先のスクリプト内では、
$_GET["キー"]で値をとれています。
しかしheader内のurlの後に「?キー=値」は付けていません。
GET送信で値を送る時にはURLの後に値を付け足すとしか知識がありません。
headerで送り出す元となるスクリプトでは自身にPOST送信してあるのみです。

967nobodyさん:2009/03/05(木) 11:30:22 ID:???
GETは環境変数QUERY_STRINGだから処理しても変数値は消えない
POSTは標準入力だから一度読み込み処理したらお終い
968nobodyさん:2009/03/05(木) 11:43:15 ID:???
<?php

$a=0.97075300;
$b=0.97083700;
$c=$b-$a;
$d=sprintf("%.f", $c);
print $d;



?>

これを実行すると、
0.000084
ってなるんだけど、
0.000084秒
かかった、って理解でいいの?
969nobodyさん:2009/03/05(木) 11:54:10 ID:???
マルチかコピペか、どっちにしても無意味。
質問になってないしw
970nobodyさん:2009/03/05(木) 12:00:28 ID:???
またいつもの基地外君か
971959:2009/03/05(木) 13:57:59 ID:???
>>967
調べるキーワードを教えてもらって有難うございます。
972nobodyさん:2009/03/05(木) 20:30:31 ID:???
>956
ブラウザを閉じた事を検知する手段は存在しない。
無理やりやるなら、JavaScriptで10秒おきとかにリクエストを送って、それが切れたらブラウザを閉じた、という事にするくらいかな。

問題は誰かを特定するほう。一般論を言うと、IPアドレスと、それが誰かを紐付ける手段は存在しない。
つうかそんなもんあったらプライバシー上の大問題になる。
学校とかのどのPCを誰が使うか決まっている環境で、固定IPならば可能かな。
俺なら初回アクセスの1回だけログインさせてクッキー(セッション)を発行し、以降はそれで個人識別する。
成りすましが問題にならない案件ならこれでじゅうぶん。1月ごとに再ログインさせる必要はあるが。
(寿命が一ヶ月以上のクッキーは発行できないため。技術的制約)
973nobodyさん:2009/03/05(木) 21:11:25 ID:???
1年以上のクッキーも余裕で発行できるだろ?
974nobodyさん:2009/03/06(金) 02:54:24 ID:???
再読み込みの際にわかればいい程度です。

セッションの存在を検知するには、
どの関数を使えばいい?
975nobodyさん:2009/03/06(金) 03:31:29 ID:???
セッション変数
976nobodyさん:2009/03/06(金) 08:41:52 ID:???
jpgraph が使えない
なんで?
977nobodyさん:2009/03/06(金) 09:03:01 ID:???
JpGraph Error: HTTP headers have already been sent

ってなる
978nobodyさん:2009/03/06(金) 09:03:57 ID:???
http://www.phpbook.jp/jpgraph/install/index3.html

このページの通りにやっているのに、、、
なんで、、、?
979nobodyさん:2009/03/06(金) 09:16:02 ID:???
>>977
BOMかな
980nobodyさん:2009/03/06(金) 13:54:17 ID:???
header関数でリダイレクトした時に、元のスクリプトに送ってたパラメータ
(例えばテキストボックスで送った値)はそのままで、locationの値だけが変わるのですか?
981nobodyさん:2009/03/06(金) 14:25:37 ID:???
>>980
GET値なら、変えて記述すれば変わる。
何もしなければ、リダイレクト先には渡らない。
982nobodyさん:2009/03/06(金) 16:07:33 ID:???
携帯からオリコン情報を確認するのに
ttp://www.oricon.co.jp/js/dayrank.js
から読み取りたいのですが「Resource id #3」
と出てしまいます。

どうすれば読み込めるようになるのでしょうか教えてください
983nobodyさん:2009/03/06(金) 16:36:10 ID:???
>>981
有難うございます。
984nobodyさん:2009/03/06(金) 22:26:30 ID:???
>>982
fopenでもしてるの?
freadなりfgetsなりすればok
でもjavascriptの代入文のような気もするけど
985nobodyさん:2009/03/07(土) 12:32:29 ID:???
phpでスクリプトを組んでいるんですけど、一般のフォームのファイル選択フォームで2MB以上のファイルをOPENしようとすると
サーバーがエラーを出します。2MB未満だと問題ないのですが・・・
phpinfoを見ると
post_max_size 8M 8M
upload_max_filesize 10485760 8M
にはなっています。
どうすれば2MB以上のファイルをアップロード出来るようになるのでしょうか?
986nobodyさん:2009/03/07(土) 13:04:50 ID:???
サーバエラーのコード番号が重要だろwwwwww
なぜ書かないwwww
987nobodyさん:2009/03/07(土) 13:12:21 ID:???
>>985
php.confもいじらんと駄目
988nobodyさん:2009/03/07(土) 13:16:24 ID:???
エラーコードは出ずに、単純に「ページを表示できません。」のエラーが出るだけです。
ちなみにIEです。
Firefoxでやっても同じ結果でした。
989nobodyさん:2009/03/07(土) 13:28:28 ID:???
ttp://hiroqli.blogspot.com/2007/12/keepass.html
ここに書かれているphpの文字列はなんというソフトを使って実行するのが簡単でしょうか?
990nobodyさん:2009/03/07(土) 19:42:34 ID:???
pearのモジュールをインストールするときに、
-aオプションと、-oオプションとあるじゃん。

これってどう違うの?
991nobodyさん:2009/03/08(日) 02:10:40 ID:???
-a, --alldeps
install all required and optional dependencies
必須モジュールとオプションモジュールまとめて全部持ってくる

-o, --onlyreqdeps
install all required dependencies
必須モジールだけもってくる

ってことじゃない?
オプションモジュールが無ければ、どっちでもかまわないんだろうね
992nobodyさん:2009/03/08(日) 16:08:41 ID:???
すみませんが、質問です。

Yahoo JAPAN ショッピングのWEB APIを扱うPHPのライブラリはないでしょうか?
・Yahoo!デベロッパーネットワーク - ショッピング
http://developer.yahoo.co.jp/webapi/shopping/

PEARにはそういうライブラリはありませんが、
・Manual :: Web サービス
http://pear.php.net/manual/ja/package.webservices.php

楽天の場合、自作して配布している人がいました。
・楽天オークション系対応−PEAR::Services_Rakuten-0.2.2リリース | Shin x blog
http://www.1x1.jp/blog/2007/12/services_rakuten_022.html

Yahoo JAPAN ショッピングで、似たようなものがあれば助かるのですが、
どなたか心当たりの方、お教えいただけないでしょうか?
993nobodyさん:2009/03/08(日) 18:22:12 ID:???
>>991
オプションモジュールってのは、
つけても、つけなくても、大差ないけど、
できればあったほうがいいモジュールって意味かな?
994nobodyさん:2009/03/08(日) 19:02:37 ID:???
教科書でHTML_QuickFormってのを発見して、
試してみたら、すでに時代遅れで、
今は、HTML_QuickForm2になっているんだと。
995nobodyさん:2009/03/08(日) 19:51:51 ID:???
セッションというのは、IPアドレスに対して
発行されるもの?
996nobodyさん:2009/03/08(日) 20:12:53 ID:???
違うということだけ言っておく
997nobodyさん:2009/03/08(日) 20:18:43 ID:???
セッションを取得して、IPを変えたら、
そのセッションはどうなるの?
998nobodyさん:2009/03/08(日) 20:19:28 ID:???
どうもならん
999nobodyさん:2009/03/09(月) 10:13:44 ID:???
NAT環境で別のPCが同じIPアドレスの場合のほうが気にならんか?
1000nobodyさん:2009/03/10(火) 09:58:21 ID:???
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。