2 :
nobodyさん :2008/11/22(土) 08:10:59 ID:NVQ67oh4
いいの?いいの? 2GET
$me = $_GET[3];
3番目は[2]だろー
プププ
6 :
nobodyさん :2008/11/23(日) 02:46:28 ID:KQeB2dd8
1608年11月23日に3なのに『2get』と書いてしまい、 『500年ROMってろ!!』 と言われた者です。 あれから500年、ひたすらROMに徹してきました。 来る日も、来る日も。 そして今、 やっと2をget出来るだなんて……… 感動で……胸が一杯です。 人間、辛抱すれば良いことって有るんですね! こんな私ですが、 僭越ながらとらせて貰います…! 念願の2ゲットはもちろんこの書き込みです。 では・・ 「6get!!!!」
7 :
nobodyさん :2008/11/23(日) 02:49:23 ID:/R5EIGze
全スレでセッションデータの保存にDB使うのがいいのかどうかとか聞いてた者です。 お礼書く前にスレ落ちてしまったので。とても参考になりました。ありがとうございましたm(_ _)m
ファイルを開かずにサーバー側からファイルを読み込むにはどうすればいいのでしょうか 日付が変わる前に毎日ログをとりたいんですが どのようにすればいいでしょうか
ファイルを読み込むってことはファイルを開いてるってことなんだよ
>>8 1行目は意味不明。2行目についてはログ取るなら
fopen($path, 'a');
あたりか。
$pathとしてファイル名に日付でユニークな名前付ければ良い。(例:yyyy_mm_dd.csv)
$pathのあるディレクトリのパーミッションにさえ気をつけておけば、
あとは日付が変わるたびに新しいファイルが出来てそこに追記処理が行われる。
13 :
nobodyさん :2008/11/23(日) 16:19:53 ID:/R5EIGze
C++をちょっとやった者なんですが、PHPにはインライン関数みたいなのってないのでしょうか??
>>13 関数呼び出しのコストを気にする必要がある状況でPHPを使うことが想定できない。
>>8 俺も1行目の意味がよくわからないけど、
たぶんヒントとして「cron」で検索したら思ってる情報が出るんじゃないかな?
てtest
IFを使って、A=0 かつ 文字数が8文字 かつ 文字の種類が半角英数字のみなら実行 それ以外はエラー、という条件を作りたいのですが、どうすればいいでしょうか、教えてください。
>>17 Aとはなんぞ?意味分からんがこういう事かな?
$A = 0;
$fuge = 'xyz12345';
if ($A === 0 && preg_match('/[0-9a-zA-Z]{8}/D', $fuge)) {
// 実行処理
} else {
// エラー処理
}
19 :
18 :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)
俺なら $A = 0; $fuge = 'xyz12345'; if ($A !== 0) { // エラー処理 } if (!preg_match('/^[0-9a-zA-Z]{8}$/D', $fuge)) { // エラー処理 } //処理続行 にする。 じゃないと条件が増えたり実行処理の中でインデントがたくさん出てきたら読みにくくなる。 どっちの条件にマッチしなかったのかも判定しやすいし。
読みやすさをとるかCPUの負荷軽減をとるか
どうせ弱小サイトのくせにスケーラビリティなんて気にすんな。最適化は自分の頭に実行しろ
こういうゆとりが増えて困ってます。
24 :
nobodyさん :2008/11/24(月) 14:49:07 ID:iKPzd1uP
クラス内の変数を同クラス内の関数で参照する場合って $this->xxx のように参照しなければいけませんよね。 しかし、関数内で変数を参照したりいじったりする機会が多いせいで this->の部分が非常に邪魔なのですが、 この部分を略して記述する方法ってありませんか?
ない。そんなとこで楽する他にお前のプログラミングにはやるべきことがあるだろ。
あるだろw $fuge =& $this->var;
27 :
nobodyさん :2008/11/24(月) 15:07:27 ID:iKPzd1uP
>>25 はおそらくループの中なんかでも平気で
$this->hoge[] = 何かしら;
とかやってるんだろうなw
それすると何か違いあんの?
>>29 場合によっては見通しが悪くなる。
つか普通に考えてメンバ変数をループとかやらんだろw
例えば $this->users[] = new User(ほげほげ) とかやらね? 見通しについては、いちいちローカル変数に代入するほうが悪くなると思うが
32 :
13 :2008/11/24(月) 16:42:34 ID:E3B5gNBM
>>14 ありがとうございます。
すいませんもうちょっと分かりやすく教えて頂けると・・
とりあえずインライン関数っていう概念はないってことででしょうか?
>>32 インライン関数がどういう概念なのかを教えてくれれば答える
PHPを知らないあなたと、C++を知らない僕とで対等ではないか。
俺もC++知らないから調べてみたんだが コンパイラがないPHPには関係ない話じゃないの?
36 :
13 :2008/11/24(月) 21:35:01 ID:???
>>35 >>コンパイラがないPHPには関係ない話じゃないの?
そーか汗
ありがとうございましたm(_ _)m
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
その人のは他のも動かないのあるね。 その上、○○の本のインジェクションが動かないとか 攻撃して書いちゃってるのがかなり痛い人だな。
2chのdatファイルをPHPを使ってダウンロードしたいのですが、 どうしたらよいですか? ブラウザを使ってアクセスするとできるのですが、PHPだとできません。
レスポンス見ろ
42 :
nobodyさん :2008/11/25(火) 21:18:12 ID:qzrO9YC/
googleみたいに、特定のサイトを自動でインデックス化して検索できるようにするスクリプトってありますか? phpで書かれたサーバ設置型を探しています。
ありますか?ってなんだよ そりゃ誰かが作りゃあるだろバカか?
>>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使えば簡単楽ちん。
更新ボタンを押すとおk、キャンセルの確認画面を表示させる程度のものを作りたいのですが phpのなかでjavascript使いたいんですが書き方がわからないです・・・ どなたか教えてください
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 ?>
48 :
37 :2008/11/26(水) 18:03:51 ID:???
>>38 >その人のは他のも動かないのあるね。
む、そうなんですか。
>>44 pdo->prepare 既に使ってたんですが、プリペアードステートメントってこれのことだったんですね。
名前だけ知ってたんですが、何のことかよく分かっていませんでした汗
ありがとうございましたm(_ _)m
49 :
46 :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モードから抜けるの試したのですが、
前者は"更新"が表示されなくなってしまいました。
後者はページ自体表示できなくなってしまいました。。
件数0なんでは?
じゃ出るはず
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に揃えてるはずなんですが^^; いきずまってます。色々なサイト見てますが、出来ません><
html的におかしいでしょ 更新ボタンをjavascriptで制御したいなら <input type="button" onclick="javascript:event" value="更新"> onclickあたりでイベント発生させないと ボタンじゃなくてアンカーだとしても同じこと <a onclick="javascript:event">更新</a>
>>57 32行しか書き込めないようなのでテーブルのとこだけ抜き出してみました
>53のはこうしてみたけどできませんでした、みたいな感じです
>55の方が指摘してくれてるonclickというのを調べて見ていますが
htmlもjavascriptも全然なもので・・・
まずは、PHPとJSの特性を知ることからじゃないの? どうちがうかってちゃんと把握できてるの?
<a href="update.php" onClick="return confirm('更新するぞゴルァ!');">更新</a> PHPまったく関係ないけどこういうことがやりたいとか?
>>60 何・・・だと・・・?
phpもjavascriptもなくできるんですね・・・or2
ありがとうございます、ありがとうございます(´;ω;`)
.jsファイルを読み込むのがJavaScriptだと思ってるのか
>>60 これってjavascriptって書いてないけど、
javascriptで動いてるんだよね?
手抜きせずに基礎からちゃんと学ぼうよ
改造とかそんなたいそうなものじゃなくてなんとか include_once('lapis/write.php');の一行を正常に稼動させたかっただ・・・
display_errors = On
>>68 iniでやったけどやっぱり真っ白でした
最初の行に入れると真っ白だけどアクセス解析は機能しているようです。
70 :
初心者です。助けてください :2008/11/27(木) 21:17:24 ID:7UVbMsyC
>>56 PHPinfo()でdefault_charsetってとこを見たらnovalueとかなってたんだけど
そこもUTF-8とかにしないといけないのかな?
MySQLの方もUTF-8にしてるんですが…
それとも、SQL文を送信するとこで何か他の方法があるんですか?
文字コードで気をつけないといけないところは他にもあるんですか?
漢字とアルファベットは検索出来ます。
mbstringの設定しろよ
72 :
nobodyさん :2008/11/28(金) 02:13:04 ID:6eZt1xO+
74 :
nobodyさん :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(・・・・); 課題で出たのですが、受信側の処理がわからないです。 誰かお願いします。
ID無し質問スレで書いた者だけど マルチは最悪だな
マルチとかはどうでもいいが コピペで我が物顔で提出されるかと思うと、教える気失せるな。 せめて、ここまでやってみましたけどうまくできなせん、とか 努力を見せてほしいね。 講義をちゃんと聴いてない74が悪い
77 :
nobodyさん :2008/12/02(火) 21:55:58 ID:ZnEnsvHS
ユーザーIDとパスワードのとこの配列の使い方が分からないです
「ここから先ぜんぶわからないんだけど〜」
80 :
nobodyさん :2008/12/03(水) 20:41:42 ID:SBXcaNw7
fputcsvを使って入力データの保存を行おうと思ったのですが、 こういうのってトランザクションはどうするべきなのでしょうか?
ロックかければ?
ロック ロック ここでロック あなたから ロック 手を伸ばして 受け取ってよ
83 :
nobodyさん :2008/12/04(木) 02:49:51 ID:6sD/pbke
pecl4winが落ちてるからimagick.dllがダウンロードできないんだけどどっかにないかな?
自分でビルドすれば?
$arr=array(15,34,10) 配列の要素の和を求める関数ありますか? echo 59 の様な感じです。
PHPは本当にどんな関数でもあるな perlだったら、いちいち自分で書かないといけない。
>>88 世の中はPHPとPerlだけではないのだよ?
PHPはウェブありきで設計された言語だからな つーか関数多過ぎ
いやいや少ないだろ・・・
多いから何なんだろう 学習コストが高い? 優秀な言語?
93 :
nobodyさん :2008/12/04(木) 23:39:39 ID:ge2NtuW2
formタグを使って配列を受け渡したいのですが、そういうのってどうしたら良いのでしょうか?
94 :
nobodyさん :2008/12/05(金) 01:26:39 ID:zoYImp6K
配列で0〜99まで格納ってわざわざ全部array(で打ち込んでいくしかないですか!?
95 :
nobodyさん :2008/12/05(金) 01:33:39 ID:jMVHCYUr
日本語でOK どういう値を渡したいのだ?
$a=(0-99); とかでしょ?
rangeだろ
99 :
nobodyさん :2008/12/05(金) 16:28:02 ID:fefynmKZ
csvファイルの15行目から25行目を読み込むみたいな処理をしたいんですが、 こういうファイルの途中から途中までの読み込みって出来ますか? あるいは、やっぱり一行目から読んでいって、 目的のデータにくるまでは捨てていくしかないでしょうか?
捨てていくっていう表現はおかしいな 例えばfileで配列に読み込んで [14]〜[24]までを取り出せばいい ファイルの中身が膨大でメモリの負担を考えるなら また別の方法を考えるべきだが
読み込み位置を変えるseekというものはあるが、 テキストファイルのように1行の長さが不定なものには使えない。
Googleのように、ログインした後はブラウザを一回閉じても 再度開いたらログイン済になっているような機能を実装したいんですが、 参考になるサイトなど教えて貰えませんでしょうか? クッキーを使うのかと思ったらGoogleはクッキーオフでも上記動作をしているようです。 こういう機能をなんと呼ぶのかも判らないので名前を教えて貰えるだけでも結構です。 よろしくお願いします。
>>102 うそつけw
Cookieオンにしろといわれたぞ
IPやホスト名を鯖側で記録しておいて
変化するまで有効にする手なんてのも考えられるが
一般的じゃないしセキュリティ的にも危険
104 :
101 :2008/12/05(金) 19:38:49 ID:???
>>103 すいません、Firefoxでやったらエラーでました。
IEでクッキーを受信するときにダイアログを表示するように設定して、
僕のサイトで警告が出るのを確認してからGoogleにログオンしたんですけど
何故かオンになってたみたいです。
クッキー使うって事はユーザー名とか暗号化して記録すれば良いんですね。
ありがとうございました。
Cookieを使ったセッションだと思うぞ。
セッションでブラウザ閉じた後情報が保持されるかアフォ
Cookieの中身を見てみりゃいいのに…
108 :
nobodyさん :2008/12/05(金) 21:45:22 ID:jMVHCYUr
実験してみればわかると思うけど、 クッキーを手動で削除すれば 強制ログアウトさせられるよ
110 :
nobodyさん :2008/12/06(土) 09:19:14 ID:figaW1Vu
$url= array("リンク1", "リンク2", "" $count= count($url); for ($id=$_GET['id']; $id<$count; $id++){ if ($id >= $count) $id= 1; $link.= $url[$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; } }
113 :
110 :2008/12/06(土) 10:23:36 ID:???
ありがとうございます!! 今から出勤なので帰ってからやってみます。楽しみです マジ感謝です。
114 :
nobodyさん :2008/12/06(土) 19:41:46 ID:uHkDvuuY
onclickのようなイベントハンドラに対してphpのコードを実行させたいのですが、 こういうのってphpではできない感じでしょうか? 具体的にやりたいことは、 ボタンが押される →Javascriptの関数を呼び出し入力項目をチェック →良ければ、次のページに渡すphpの変数をセット →次のページに遷移 って感じです。
115 :
nobodyさん :2008/12/06(土) 19:44:30 ID:yGRUMO6W
できる。
>>115 あれ?
サーバサイドのphpではクライアントサイドのJavascriptみたいにonclickでの
関数呼び出しは出来ないってのは良いですよね?
Javascriptの関数の中でphpを記述するってことですか??
うん。 ちなみに >具体的にやりたいことは、 >ボタンが押される →Javascriptの関数を呼び出し入力項目をチェック >→良ければ、次のページに渡すphpの変数をセット >→次のページに遷移 これ読む限りではphpいらないと思うが?
>>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()" />
javascriptの中にphpコード書いてどうすんの?
>>114 書かれてるのは、onclickで変数をエンコードしてページを呼び出すだけだよな
もし、onclickでphpのコードを実行した結果をページに反映させたいなら
ajaxの仕組みを利用する。
xajaxってライブラリが実現してるのがその仕組みに近い。
シームレスに関数を呼び出す感じになるよ
121 :
110 :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が数個ってな感じでやったのですがもうちょっとシンプルと言うか効率の良いやり方無いでしょうか?
>>118 それじゃPHPの実行結果がjavascriptの一部と解釈されるだけだ・・・
>>121 おいおい、意味わかってれば、
>>112 は動くぜ?
a href= test1ならそれなりに工夫しろよw
125 :
110 :2008/12/07(日) 02:06:11 ID:???
>>112 が何でこんな動きになるのか理解できませんが思い通りにいけました!
ありがとうございます
お世話になりました〜!!
PHPの関数の数って全部でいくつあるの?
約142,000くらい
マニュアルの関数一覧は5900個 日々拡張されたり廃止されてるから増減するし マニュアルにのってないのもあるのでなんともいえないな PEARは各種FWのを含めるとさらに増える ユーザー定義関数も含めると天文学的な数値になる (9割型コードがかぶってたりコードは違うが動作が同じのも含む) 実際によく使うのは100個もないので数なんてどうでもいいやね
6,000もあるのか 全部おぼえようとしていたが、 やる前に質問してよかった。
それで、 「よく使う100個」の リストは、どこかにある? それから優先的に学習していきたい。
アマゾンでPHPで一番売れている本を買おうと思ったんだけど、 なんでPHPってカテゴリはないの?
確かに関数多過ぎてうんざりするからよく使うものとうんこ臭いのに分けてほしい
ソース見りゃいいじゃん
>>130 やっているうちに覚えていくから心配しなくていいよ
とにかく本でもマニュアルでもいいから順序通りにやっていってみ
>>134 その作業が死ぬほどつまらんから
聞いているのです
「試験に出る英単語」って本知ってる?
あれは出現頻度順に並べたものなんです
お前にゃ向いてないから諦めれ
口よりも手が動かないと・・・
>>138 >>135 じゃないけど
俺は暗記得意だから先に仕様書とかリファレンスに一通り目を通してから実戦のほうが合ってる
結局人それぞれじゃね?
>「試験に出る英単語」って本知ってる? あれは出現頻度順に並べたものなんです 試験対策ってことは、当然一通り順序どおりに英文法をマスターしたうえで読む本だよな。 英単語だけ覚えても文章の1つも作れないだろ。 プログラミングだって順序立てて学習するのを避けて関数を覚えようとしても意味がない。
死ぬほどつまらんならやらなければいいのにね
しかし、ある程度勉強しないと 何も作れないじゃん
じゃ勉強すればいいじゃん
じゃやらなきゃいいじゃん
相手にするだけ時間の無駄だぞ 放置してやれ
どもども。 <タグ>あうあう</タグ><タグ>あうあう</タグ>ゲロゲロ<タグ>あうあう</タグ> みたいな文字列からタグの中身をタグも含めて配列に格納していきたいのですが、どうやったらいいのでしょうか。
XML DOMをつかいましょう!
xmlに正規表現てw
なんでxmlって決め付けてるんだよ
トップページに検索フォームを用意しておいて トップページと検索結果ページのレイアウトを全くの別物にしたい場合 GETに中身がなかったらトップページへ 中身があったら検索結果ページへとか言う風にif文でhtmlを丸ごと括って分岐させる感じでいいの? なんかスマートじゃない気がするんだけど
検索アクションがあったら中身が空であっても検索結果を出すべきだろ 検索単語を入れるように検索結果のページで促したり 単純にヒットしなかったと検索結果を出すのが普通
いいことを教えてやろう。 <form action="search.php">
入力エラーだからlocationヘッダでトップページに返せばいいんじゃない? できればエラーメッセージつけてかえすと親切だな。
トップページと同一のファイルで検索結果を表示しようとしてるの? 普通に検索用のスクリプト作ればいいじゃない。
symfonyで作ったスクリプトって、単体じゃー動かないの? symfony本体無いと動かない? 上の質問が正解だとすると、レンタルサーバではほぼ使えないですよね? symfony使えるサーバじゃないと。
>>158 フレームワークなんだからそれ通さないと動かないに決まってるだろ
PHPのフレームワークなんだからPHPで書かれてるだろ
PHPさえ使えればどの鯖でもつかえるんじゃね?
よろしければご質問いたします データベースに内に用事のある日付と人のIDを入れておくテーブルが有ったとします (DATE, ID) (11/29, K) (12/5, F) (12/7, F …みたいな感じ) そこからSQL文で月を指定してまとめてデータを抜き出しておいて 画面テーブルのトップに日付と曜日の一覧を表示させておいて 人別に用事のある日付に×を書き込みたいのですけど (5日と7日に用事があればF, , , , ,×, ,×, …みたいな感じ) SQL文で範囲選択して取得したデータを保持しておいて その中に条件にあったデータが有るかをチェックする事って出来ますか? for文で画面テーブルを作成しながら$iの値を日付に合わせて増やしていき SQL文で一度取得したデータの中に$i(日付)と同じものが有れば ×を記入さていこうかなと考えています お分かりになるかた、もっといい方法を思いつく方 ご教授を願えたら有り難く思います
> ご教授を願えたら有り難く思います 「ご教授願えますか」なら兎も角、不思議な日本語。
162 :
160 :2008/12/09(火) 23:09:26 ID:???
>>161 早速ご指摘を頂き有り難う御座います
追加ですが配列を使用せずに記述をしたいと考えております
お分かりになる方、もっといい方法を思いつく方
ご教授願えますか
このスレを教授が見てる確率は限りなく低いので 無理でないかと思います 大学で聞くのが一番早いと思うのでそちらをお勧めします
164 :
160 :2008/12/09(火) 23:21:52 ID:???
>>163 度々のご指摘ありがとう御座います
正しくは教示の様ですね
>>160 >>162 に関しまして
お分かりになる方、もっといい方法を思いつく方
ご教示願えますか
>>164 SQLのクイズ出してるつもりならスレチだよ。
MySQLならgroup_concat(DATE) と group by IDを使って行を取得というのが楽
標準SQLで組もうとすると、ちょっとパズルチックになるからね。
他人が書いた答えは知ってるけど、オリジナルじゃないからググってみることをお勧めする。
個人的にはfor文で処理するより、rangeと配列、array_mapでサクッとテーブル書く方が好きだな。
ループはダサい。
でもあえて配列を使わないんなら、ORDER BY ID, DATEでクエリの結果セットを
ループしながらifとswitchでテーブル組めば普通にできる。
166 :
160 :2008/12/10(水) 07:53:28 ID:???
>>165 ご返答有り難う御座います
現在インターン中なのですが
そこで課題として従業員のシフト表を作成しています
従業員テーブルから情報を引き出して
それを元に休日テーブルから情報を引き出して表を作成しようと考えています
当初は一度配列に入れてから配列一つひとつをfor文とif文で参照しようと考えていましたが
担当の方にそのアイデアを話してみた所
配列に入れなくても出来ると一蹴されて困っていました。
一度
>>165 様に頂いたワードを調べて参考にしたいと思います
また別の方法が有りましたら教えていただけると
有り難く思います
2chでアルゴリズム聞いて実装するとか嫌なインターンだなw
いや、話を聞いてみるとよくある話。 ちゃんと説明しない嫌な担当だな。 ところで、面白い方法(拡張しないなら冗長だけど)あるよ。 配列もforループも使わない。たぶんifも最小限になる。 RecursiveIteratorIteratorっていうのがあるから、 個人イテレーターを親に日付イテレーターを子に持つようなイテレーターを 定義して、PDOをマップする。日付イテレーターのnext()は次にSQLデータの 有無にかかわらず日付をインクリメントする。 フィルターイテレーターも同時に実装して月別フィルターとか年別フィルター とか週別フィルターとかも実装する。 テーブルソースの作成部分はデコレーターでデータをラップして文字列化 するようなものにする。 すると、 $obj = new shiftTable(array('scope'=>'month', 'target' => 12)); echo $obj; で表が自動出力されるようなものが作れる。
169 :
160 :2008/12/10(水) 08:34:45 ID:???
>>167 グループ課題の担当している部分なのでグループ全体に
影響が出ないよう早く見当を付けたいと思い質問させていただきました
>>168 私の知識では拡張という言葉がどれ程の物をあらわしているのか分かりませんが
>>160 は若干端折って記入しており、実際には×では無く
休日テーブルを書き換える為のチェックボタンが付いており
従業員が現在休みになっている日は初期画面で黒くチェックが入って表示され
画面テーブルの外部にsubmitボタンが付いています
担当の人の話では
休日テーブルから5と7という値を取得すれば配列に入れなくても
画面テーブルの5番目に表示させてから7まで空のセルをつくり
7番目でまた表示させることが出来ると言われました
それを解決しようと思い
>>160 の質問に至ったわけです
>>168 様の方法も調べて参考にさせて頂きたいと思います
ご返答ありがとうございました
> 休日テーブルから5と7という値を取得すれば配列に入れなくても
> 画面テーブルの5番目に表示させてから7まで空のセルをつくり
> 7番目でまた表示させることが出来ると言われました
なんというトーニャハーディング、できりゃいいんかい!って感じの考えだな。
SELECTで前回表示のレコードを取得しとくのか、forループで前回データを保存するのか
いずれにしても、表示ロジックをデータ処理に放りこむのか・・・すごいな。
そういうところでは、はいはいって言うこと聞いて逆らわない方がよさそうw
もし、フォーム要素なんかが絡むんなら
>>168 の方法で基本ロジックを作成して
デコレーターでラップするといいんだけど、習得には多少なりとも時間が
かかるかもしれないのでお勧めはしない。
fromのポストでsubmitのnameの値を取得する方法を教えてください。 <input type=”submit” name="取得する値” value=”送信” />
$_POST['取得する値']
もしくは"送信"が限定されてるなら、array_search("送信", $_POST);
>>173 誤解していました。
ありがとうございます。
array_search覚えました。
少しおしえてください。 PDOでInsertをプリペアドステートメントで行うとき、値が空っぽの時、 NULLを挿入したいのですが、NULLじゃなく、''の空が挿入されます。 これってPDOのオプションで自動で''の時は、NULLを挿入することは出来ないのですか?
どんなソースで実装したの?
>>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に出来たらなと・・
$emailをNULLにすればよろしい
$sth->execute(array($id, $name, $tel, null)); にすれば、NULLが入るのは分かってるのですが、、それはめんどくさいですよね。。
空文字入れたいのか、null入れたいのかの区別がつかないじゃないか。 もし空文字のときは必ずnullでいいならば、間に関数1つかませばいいべ。
>>179 バインドメソッドで明示的に指定すれば?
そうですよね。 かますことにします。 ありがとうございます。
もう一つ聞いてもいいですか? PDOとMySQL5です。 PDOを使ってSELECTをした場合、クエリーキャッシュは使われてるのでしょうか? (PDO::MYSQL_ATTR_USE_BUFFERED_QUERYは無効にしてあります)
MySQLのクエリーキャッシュのことを言ってるなら、MySQLの設定次第
書き忘れましたが、PHP5.2.0です。
>>184 PHPのネイティブ関数であれば、クエリーキャッシュは効いてるですが、PDOを使うとだめぽっい。。
PHP5.2.1にアップするしかないのかなぁ・・。
動画データFLVの1コマ目だけをjpegにして、サムネイル化して表示 をしたいのですが、どうすれば出来るでしょうか? PHP5.2を使ってます。詳しい方いらっしゃったらおしえてください。
>>185 PHP5.2.0ってだめなの?5.1.17ぐらいから使えるはずだけど。
まぁ、書いてるんだしそうなのかな・・・
>>187 PHP5.2.0のPDOだとクエリキャッシュが効いてないみたいですね。
PDO::MYSQL_ATTR_USE_BUFFERED_QUERYを有効にすると効きますが、副作用があって。。
どんな?
LIMIT ?,? とかやるとエラーになります。 なので、LIMIT 0,10 とか LIMIT {$offset}, {$limit}とやれば良いんですけど・・。
まだ勉強中なんですが、phpで実現可能かどうか質問させて下さい メールを受信した後、それをHTMLとして表示させたいんです。 エンコード状態のマルチパートなメール(ソース?)があるとして、 それをHTMLとして出力するライブラリみたいなのとかありますか? 問題は画像の部分だと思っています。(どう実現するかイメージも沸きません) 具体的な使い方は調べますので、あるかどうかと、 名前とかヒント教えてもらえるとありがたいです。 ちなみに、レンタルサーバ借りて(Web/Mail/php/DB) iPhoneから使えるWEBメールシステムを自分の為に作ってます
PEAR Mailに受信したメールを読ませれば添付ファイルまで抽出できる。 メールサーバが立ってるなら、.forward等でphpプログラムに渡すと簡単。 他所のメールサーバーでも、POPやIMAP用の関数でアクセスすることも可能。 解釈部分はPEARが実績があると思う。
>>191 iPhoneならGmail使えば良いのに・・・
191です
ありがとうございます
>>192 PEAR MailのPOP3でメールとってますが
画像部分を一旦保存しなきゃダメですかね〜
極端な話、メールのテキストと埋め込み画像をまとめて
1つの画像に落としてくれる関数があればいいんですけど都合よすぎですね><
>>193 ネックは画像を抽出する部分とかでしょうか?
>>194 Gmailはメール入力が難ありで・・・
Yahoo!JメールはiPhone用のメール作成画面ないし・・
それと、
あるAさん宛てのメールとAさんから来たメールを抽出して
一覧で見せるようなのをイメージしてます
>>195 画像抽出は簡単だけど、
送信されてきたメールをプログラムに渡すにはサーバの設定が必要で、
POPから取得するとCRONの設定が必要。
メール送信して、スクリプトにアクセスするならいいけど。
特定URLに定期的にアクセスしてくれる、CRONサービスがあるから、 それを利用すればOK
WebMailに使うならアクセス時に全部取りに行けばいいので、 cronはいらないんじゃね?
199 :
196 :2008/12/11(木) 17:30:03 ID:???
ごめん勘違いしてた。じやあIMAP関数使えば楽勝。
200 :
nobodyさん :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); ↑この部分がおかしいんだとは思うんですが・・・
fetchRowで$iやめてみたら? そのままだと$rowでbreakする必要があるかもしれないけど。
202 :
nobodyさん :2008/12/11(木) 22:54:53 ID:nahQekTa
>>201 レスありがとう
本当は$indexに現在のページ数が入って$indexの時は1〜10行目まで、$index=2のときは11〜20行目までという風に処理をさせたいのでfetchrowに$iを使わずwhileなどで処理できないんですorz
>>202 それ、結果セット時点でseekしといた方がいいんじゃないの?
全結果セットから、毎回行指定じゃ重いでしょ。
とはいえ、やりたいことができない理由は他にあるだろうね。
クエリが間違ってるとかない?
>>203 レスどうもです。
まだ勉強中なのでseekっていうのが・・・・
結果セットから配列なりに格納して結果セットを開放しておくということでしょうか?
クエリのコードは
sql = "select * from table ORDER BY id DESC ";
$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}
で、他のwhileで全行取り出しした場合には上手くうごいてくれているのでクエリは大丈夫かと思うのですが・・・
あぁ、ごめん、seekって勢いでミスったw ところで、クエリにLIMITを含めておくわけにいかないの? あと、fetchRowの行指定は1回だけ発動して、あとはループでいいと 思うんだけど。 あと、単にフィールド名が違うとかじゃないよね? var_dumpとかしてます?
普通limitだわな
207 :
nobodyさん :2008/12/12(金) 11:46:01 ID:MaDVXqed
if (!is_dir($dir)) { $rc = mkdir($dir, 0755); でディレクトリーを作ったら所有者がwwwになります これをuserにして作ることはできないのでしょうか? よろしくお願いします
そんなことができたらセキュリティホールになるでしょう。 しかし、対応としては Webサーバーの実行ユーザーを変えるか root権限wで実行してchownもしくは、mkdirのオプションを買うか CGIモード+suexecで起動するか、 setuidした別のラッパーをかますか、 ま、そんなとこだろう。
パーミッション777にしとけば困ることないお^^
そんなことをしたらセキュリティホールになるでしょう。
212 :
nobodyさん :2008/12/13(土) 22:52:57 ID:6AnKxTPA
move_uploaded_fileでアップロードされたファイル保存するときに別ドライブを指定するパスの書き方がわからんorz
そうか
現在、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 要するに開発しているサイトによってディレクトリを分けたいです。
rewrite使えば?
216 :
214 :2008/12/14(日) 00:38:16 ID:???
ぐぐってみたところ 動的ページを静的ページにする (mod_rewrite) というページがトップに表示されたのですが、いまいち私のやりたい事は実現出来なさそうです。 私の認識が誤っているだけかもしれませんが、その「rewrite」というのは 一体何なのでしょうか? もし参考になうサイトをご存知でしたらお教え願います。
217 :
214 :2008/12/14(日) 00:52:09 ID:???
自己解決しました。 mod_rwrite という方法を使わなくてもディレクトリをもう一つ用意するだけで事足りました。
218 :
212 :2008/12/14(日) 01:50:36 ID:???
いいよorz
220 :
212 :2008/12/14(日) 03:24:13 ID:???
221 :
212 :2008/12/14(日) 12:58:16 ID:vrT8sAoj
(´・ω・`)
教えてあげようか?
223 :
212 :2008/12/14(日) 13:23:01 ID:???
D:/ とかじゃだめなん?Windowsでやった事ないから勘だけど
で、でぃーどらいう゛っ?
>>224 これでいけました!!
盲点だったorz
ほうほう,それで?
file_put_contents -- 文字列をファイルに書き込む 連続して fopen() , fwrite() , fclose() をコールすることと等価です。 この関数ってどうなの?
は?
短く書けるから便利といえば便利だがPHP4では使えない PHP5なら好きなほう使えばいい
PHP5つかってます。 youtubeみたいな動画共有サイトを作りたいのですが、動画のアップロードは出来るのですが、 アップロードされた動画をサムネイルで表示する方法がわかりません。どなたか詳しい方いらっしゃったら 教えてください。
>>232 それよりも作るのはかまわないけど公開するならインフラ周りのこと考えろよ?
まわりに迷惑かけるのだけはやめてくれな
>>233 インフラを考えずに作ったって糞遅くなるのは目に見えてるよw
しかも維持費にどれだけ金が掛かると思ってるんだろうね。
一流のエンジニアが集まって作られているYouTubeですらあれだけ
重いのに。
>>234 > インフラを考えずに作ったって
それを言うなら、考えて、では。
インフラはAmazon EC2、S3とかがオススメだな 回線速度の面で微妙かもしれんが
本職ではクラサバをメインに開発しているPGですが、 趣味で2年程前からphpでWEBシステムを作っています。 私は、実務でphpを使ったWEBシステムの構築は行った事がないのですが、 実務ではどういった開発環境でphpを使ったWEBシステムの構築を行っているのでしょうか? 因みに、自分はsakuraエディタだけです。 正直、画面のレイアウト等プログラミング以外の部分で時間を取られており、 ASP.net(VS)での開発と比べて無駄に工数が掛かってしまう感が否めません。 皆さんは、どういった環境でphpWEBシステム(サイト)を構築しているのでしょうか? 開発工数を大幅に削減出来るお勧めソフトがあればぜひお教え願います。
テキストエディタからレベルアップしてけ
>>238 という事は、画面の作成はデザイナに任せてシステム部分だけをphp(マ)が開発していいるのですか?
>>239 オススメのソフトはありますか?
VSのデザイナ画面は個人的に非常に使い易いです。
All-in-OneのPDTいれたらhtmlもデザイナでいじれるから楽チンや
デザイナーというのは、人のこと? それとも、デザイナーという、ソフトのこと?
人名
>>244 の意訳
ボタン配置とかして直感的にデザインしたものをコード変換する機能のことか、
職業としてのデザイナーのことかどっちなの?
248 :
nobodyさん :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を数字ではなく文字にしたい場合どう書けば同じように動作するか教えてほしいです
宜しくお願いします。
応用能力皆無なのな
>>248 function中の$a - $bのところ、strcmp($a, $b)に変える
>>250 ありがとうございます
説明不足ですみません。やってみましたがこれはアルファベット順で並ぶのでしょうか?
キー順でソートしたいのです。
一応自分なりに調べてはいるのですが
foreach ($url as $key => $value)
なんて文をどこかへ追加って感じで方向は合っているでしょうか?
応用能力皆無なのな
>>251 ちなみに並ぶけどさ、やってみたんなら並ぶかどうか確認できるでしょ?
配列の並べ替えが終わったら、foreachでもeachでも好きなループ組めば?
質問があります。PHP5でflvファイルの最初のコマを取得して、画像としてサムネイル化 する事って出来るのでしょうか?レベルが高いかも知れませんが、詳しい方がいらっしゃったら 教えてください。
なんかこないだからその質問を何回も見るんだけど。
とりあえず環境書いてないから適当に答えるけど ffmpegインストールしてphpから呼び出して使えば出来ると思う。
ググれば簡単に出てくるのに
教えてください。 PDOでPostgreSQLにアクセスしています。 ところが、全部PDOメソッドだけで実現できないことがあり、 PDOとpg_*関数を混在使用するハメになりました。 そこで質問ですが、 PDOオブジェクトで、pg_*を使うためのデータベースハンドル を得ることはできるのでしょうか? できないのなら、PDOでのDB接続とは別に、pg_connectで DB接続する必要があるということでしょうか?
実現できないことって何?
>>259 PDOで、PostgreSQLのbytea型に格納してあるバイナリデータを
読み出そうとすると、不具合があるようなのです。
(公式情報ではないので自分の勘違いかもしれませんけど)
そこでほとんどの処理はPDOで行い、bytea型のR/Wのみ
pg_*関数を使いたいと思っています。
(pg_escape_bytea()とか)
「PDO」つったら、普通はPECL::PDOの意味?
標準クラスのだろ
テキストボックスでセッションに入れた後、確認画面で表示させてみると 「ソ」と「\」を入力した場合には「\」がどんどん追加増加されるのですが 原因がわかりません。 以上の問題の解決の仕方や、検索でSQL文やPHP言語やHTMLを入力された場合の 表示にバグを発生させない方法をご存知の方、どうか教えて頂けないでしょうか
268 :
nobodyさん :2008/12/20(土) 22:06:37 ID:maii3k3G
pagerで 1 2 3 4 5 ではなく 0 1 2 3 4 とゼロから始めるにはどうすれば良いでしょうか?
>>268 何のpagerだよ
質問の仕方にも程があるぞw
PEARじゃね 俺なら迷ってる時間があったら丸ごと全部再実装する
全部再実装とか、よっぽど暇なのか。
結果を-1するかソースで-1すればいいじゃん
274 :
269 :2008/12/21(日) 01:06:19 ID:???
$naviの中かgetLinksメソッドの中
276 :
269 :2008/12/21(日) 01:37:38 ID:???
PEAR::Pagerの出力はHTMLタグだからいじりづらいんだよ。 入力はこっちでいじればいいが、出力はgetLinks()の結果を正規表現とかで置換するしかない。 どっちかっつーといじりたいのは変数の方じゃなくて画面表示の方だろうしな。 インターフェイスはおおむね決まってる(パクる)から、残りの作業は実装だけだしな。
別にソースいじればいいじゃん
HTMLからURLで変数をもらいその変数でrequireするtxtファイルを変え ページの管理を楽にしようと思っているのですが 馴れていない人がやると、まずいことはありますでしょうか
ぐぐれ
>279 txtをrequireする、の意味がまったく分からん。 ファイル名に「../../../」とか指定されると、ヤバいファイルを開かれる危険がある(ディレクトリ・トラバーサル脆弱性)。 総じて、予期しないファイルを開かれないような対策が必要になる。 数種類しかないなら、決まった文字列以外は許可しないようにする。 たくさんあってそうするのが面倒なら、「/」を入力されたらエラーにする。 hoge.txtを開きたいなら「hoge」の部分だけ入力させる、などの対策が必要。 ファイル名は自分で決められるんだし、[0-9a-Z-_]あたり以外の文字列が来たら問答無用でエラーになるようにするのが無難だな。
>>281 ありがとうございます
HTMLで記述したファイルの拡張子をPHPに変え、
任意の部分にrequireでtxtファイルを読み込むと
メニューなどの管理が楽になると某サイトで読みました
それをメニューではなく内容に変えれば、
外観や増えていくページの管理が楽になるのかなってことで
初心者ながら、勉強もかねて質問をさせていただきました
自分の決めた文字列だけを対象にするということで
switch ((string)$page):
case 'log1':
case 'log2':
略
break;
default:
echo "ファイルが見つかりません";
endswitch;
こういった記述でよろしいのでしょうか
勉強なら自分で調べろやボケ
caseを使えば、たぶん安全。 コードがないとなんとも言えんわな。 やってみて、動くコードができてから来たほうがいい。 何もやらずにいきなり聞く姿勢は歓迎されんし。
これでいいんでしょうか どう書けばいいんでしょうか じゃ勉強の糞の足しにもなりゃしねぇよカス
>>287 おまえなんでこのスレにいんの?
いやむしろ何のために生きてんの?w
>>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>
291 :
286 :2008/12/21(日) 21:01:57 ID:???
>290 それが動く事に少なからず衝撃を受けた。 requireやincludeは、基本的にPHPプログラムを読み込むためのもの。 それだとたぶん、txtの中にPHPプログラムとして解釈可能な文字列があると、実行されてしまう。 単純にテキストファイルの中身を読み込む場合、file_get_contents()を使ったほうがいい。 動くなら問題ないっちゃあないんだが…
って、ああそうか、よく考えたら動いて当たり前か。 「評価されると危ないので避けたほうがいい」という意見は変わんないけどな。 txtは自分が編集するから、安全といえば安全なのだが、無駄な危険の芽は摘んだほうがいい。 いつの日かうっかりtxtにexit();とか書き込んだらエラーになるし。
>>292 うっかりが起きないとも限らないので
file_get_contents()について調べてみます。
勉強になりました。
ありがとうございました。
>>290 まぁ、動いているので問題ないけど、
コーディングのマナーとしてはよろしくないかもね
・require等の中に変数は入れない方がいい
・比較するときにキャストして使う時にキャストしないというのは問題になることがある。
前者は設定によってはリモートでのコード実行につながるから
後者は比較が通っても、問題のある変数で実行する可能性があるから
>>294 参考になります
まだまだ馴れてない部分が多いので基礎から覚えるために
やはり、書籍を一つ買おうと思います
うむもう二度と来ないでくれ
プログラミング初心者だけどPHP難しすぎて投げそう(';ω;`) 2週間位で基礎を学ぶには何したら良いんですか(';ω;`)ウォウォ…
教えてくれそうな男に体でも売ればいいんじゃね
もうウンコして寝込むしかねぇ・・・
マニュアル嫁
どっかから小さめなスクリプト落してきて、 「なんで?なんで?なんでこうなるの?」と思いながら丁寧に読んだり、 チョっとした機能を追加してみたりして、 いろいろもがくといいんじゃないだろうか。
初心者が読めるようなちょっとしたスクリプトは大抵がPHP4時代の糞CGIで変な癖がついたりする罠。 グローバル空間にexplodeしてたりするスクリプトが多すぎる。
explode→extract
んなの読まなきゃいいだろ
>>299 初めてのプログラミングがPHPで、配列/連想配列でこけたけど、しばらくしてからやってみたらすぐ理解できた。
あんまり根詰めないで気楽にまったりやるといいよ。
読むだけじゃなくて手も動かすといい。
サンプル丸写しして、いろいろ自分で弄ってみるんだ。
エラー出ればメッセージ出て何が原因かすぐわかるしね。
309 :
299 :2008/12/22(月) 22:16:58 ID:W3OrxKsT
>>303 どっかから?
どっかから?そのどっかから?はどっかから?
つまり僕が言いたいのはどっかから?なんです。お願いします。
310 :
299 :2008/12/22(月) 22:39:19 ID:W3OrxKsT
>>308 ( ´_ゝ`)フーン
「どうもありがとう」って言っといてだってお兄ちゃんが
妹より
で、どう書いたら
>>304 さんに変な癖がついてると言われない書き方なのよん
正しい書き方教えてくりっ
PHPの公式マニュアルで「非推奨です」「危険です」と書かれている書き方を全て避ける。
変な癖が付いてると言われなければいいのか
>>304 みたいな奴には何を見せても重箱の隅つつかれるよね。
スルーでいいとおもう。
315 :
nobodyさん :2008/12/22(月) 23:15:14 ID:zcPu3Ss9
PHP4用の開発ノウハウってのがあって、これは今となってはバッドノウハウ。 PHP5のみサポートの有名なFWで開発してみて、動いたらソースを読むのが吉
ノウハウ以前のレベルだろうに
いまだに共用鯖じゃPHP4主流だもんなあ。
318 :
nobodyさん :2008/12/23(火) 03:56:34 ID:207JnJAg
JavaScriptの"for〜in"構文をPHPで書くとどうなるのでしょうか PHPはあまり分らないもので
>>299 漏れは先にperlを2ヶ月やってから
PHPに移動した。
>>318 $array=array('name'=>'aki','age'=>23,'karesi'=>'futsu');
foreach($array in $key=>$item) {
echo "$key $item\n";
}
単にforeach文て言えば済むじゃねぇかw
323 :
299 :2008/12/23(火) 17:39:32 ID:???
ご先祖様だから
ご先祖様はCだろw
そこまで戻る必要は無い ってか、Cは却って難しい
SQLite3ってPDOってやつを使ってアクセスするんですよね マニュアルにあるSQLite3ってやつとは何が違うんでしょうか
別にPDOじゃなくてもアクセスできるけど
なるほど ググってもPDOのことしか見当たらずそこからマニュアルに流れ着いて SQLite3文?って物があるのを知ったのでどういった違いがあるのかなと思ったのですが どっちを使っても構わないってことでしょうか
うん
わかりました どちらがいいのかはわかりませんが、せっかくなのでSQLite3も使ってみます
DBっていうのは、MySQLとかSQLiteとかPostgreSQLとかOracleとか、似たようなのがたくさんある。 元々はそのそれぞれに対して、よく似てるけどちょっとずつ形の違う関数がいっぱいあった。 で、それが不便だからって事で、「同じ書き方でどれにでもアクセスできるような仕組みを作ろう!」となった。 それがPDO。 PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、PDOクラスをnewしてるところだけ書き換えれば普通に動く。 また、PDOひとう覚えれば、どのDBでも使えるようになる、というメリットもある。
普通DSNを書き換えるんだろ
じゃあ自由度は下がるってことでFA?
ひとう → ひとつ これだけだとバランス取れないので、一応デメリットも。 全DBでなるべく共通の操作を提供する、という仕組みのため、一部のDBに固有の機能が使えなかったりする事がある。 よくある話だと、MySQLの持続的接続が使えなかったりな。あと、パフォーマンスでもPDOは若干劣る。 個人で使う最大のメリットは、プリペアドステートメントのサポートだと個人的に思う。 SQLインジェクションの危険性をほぼゼロにできる上に、プログラムの可読性も上がる。
> よくある話だと、MySQLの持続的接続が使えなかったりな。 それってパフォーマンスに影響するんだっけ?ベンチとった?
PDOは文字コード変更用の関数がないからなー……。 SET NAMES 危ないって聞くし。
338 :
335 :2008/12/23(火) 22:49:27 ID:???
>334 んな事いったら、sqlite関数やmysql関数を使ってしまえば、将来のDB変更の自由度が失われるわけだが。 俺は自由度や性能云々以前に、DB依存のコードがそこら中にあるのを気持ち悪いと感じる。そんなものはどっかで隠蔽されるべきだ。 (実際問題、DBを置き換えるなんて事態は普通ないだろうけどな)
>>339 335, 338の発言を理解できないなら発言するな。
339的な発言は、このスレの害虫。
>>PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、 >>PDOクラスをnewしてるところだけ書き換えれば普通に動く SQL文自体がDB固有になるだろうから、現実的にそれはあり得ないんじゃないか? (標準SQLだけで書かないでしょふつう) 俺的なPDOのメリットは、DB関連関数をどのDBにも共通で使えるため開発の学習量を 減らせること。これはソースコードの可読性の向上、メンテ性の向上にもなる。
標準SQLだけで書かないのが普通という前提なら、共通で使える部分の学習量なんてほとんど0じゃないか?
DBを変更する予定があるとき、 単純にPDOだけで実現できるわけじゃぁないが、 PDOで標準SQLだけを使うか、 PDOよりも抽象化したFWを使うわけで、 素の関数を使うよりは汎用性が高い。 どっちの言うことも大きく間違っちゃいないわな
344 :
nobodyさん :2008/12/29(月) 23:28:23 ID:hqhRjo69
オブジェクトのメソッド名とプロパティ名の一覧ってどうやって取得したらいいんでしょうか?
リフレクション
346 :
344 :2008/12/30(火) 12:21:58 ID:???
>>345 有り難うございます
おかげで3週間越しの問題が解決しました
本当に有り難うございます
phpの質問かJavaScriptの質問か迷ったのですが、ボタン(button)がクリックされた時に 確認用のダイアログを出すにはどうすれば良いでしょうか? 実行しますか? 【OK】 【キャンセル】 ※ダイアログを表示し【OK】が押された場合のみ submit処理を行ういたいです。
>>348 ありがとうございます。
でもお金ないです。。。
つI
つD 御縁がありますように。
っH
htmlかphpかわからないのでこちらで質問です。 formのプルダウンメニューの値を送信ボタンで渡すのはわかるのですが プルダウンで選択しておいてリンクをクリックしたときにその値を一緒に 送るような使い方はできるのでしょうか。 ようはメニューでレイアウトの種類を選択して、リンク先をそのレイアウトで 表示させるといったことをしたいのですが。
php関係無し
そうですか、phpで操作できたらよかったんですが。 その後ググってるとJavaScriptでメニューの値が取得できるようですので これとonClickだかでどうにかできるのかなってことでJSはわからないんですが 少し勉強してみようとおもいます スレ違い失礼しました。
JavaScriptのほうが最適ではあるだろうけど 工数増えるけどPHPでできないこともない まぁガンガレ
素直にやるならJavaScriptだろうな。 プルダウンを変更した時点でリンク先を書き換えるか、クリック時にフォームのsubmitイベントを呼び出すか。
>>353 リンクにonclickといれてsubmitさせてやればいい
俺ならselectが変更された時点でJavaScript経由でcookieに表示設定を放り込む。 一度選択したら2回目以降は覚えていて欲しいだろうからな。
httpのクエリストリングから調べろ
363 :
360 :2008/12/31(水) 20:14:49 ID:???
>>361 ヒントをありがとうございます。
>>362 詳しくご解説頂きありがとうございました。
早速「ガキ使い」を見ながらプログラミングしてみようと思います。
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
hosts にサイト名追加して、VirtualHost つかうとかもあるな。
俺はZF使ってるからmod_rewrite
使ってれば偉くなった気になるんですね。わかります。
お前は何を言ってるんだ
俺も毎日ちんこ使ってるので偉くなった気になっています。
>>370 べつにWindows環境だってIPベースでも名前ベースでもできるさ
Apacheの話題はスレ違い
おれは常にテキストエディタ(Vim)と過去の開発資源(ライブラリ)だけで事足りてる
んんんだこのgdgdはw 複数サイトをプロジェクト(複数人数)でやるんだから、ファイルのアップロード方式の方が重要。複数の人間がftpでアップするのなら、それを管理しやすい方法で あと、htdocs/aaa/bbb/ とかでやった場合、mod_rewrite の RewriteBase が後でアレな時あり プロジェクトを管理できれば良いので、エディタは何でもいい
複数の人間が更新するならCVSとか使うかなあ サイト側もcheckoutするのだ
checkoutじゃなくて、exportな
Subversionを使っているのに何故かデプロイがftp経由ファイル単位なうちのプロジェクトは滅ぼしていいと思う。 >370 同時にいじるなら、何も考えずにやってるとアクセスログが同じファイルになってしまうので、やりづらいと思う。 そのままでもできるけど、バーチャルホストの方がエラーログの切り分けが簡単。 あとは両プロジェクトで同名のクッキーを使った場合衝突が発生する点かな。セッション周りが特に危険。 あと、本番環境に持っていく際に、相対リンク/絶対リンクとか周りで絶対いくつかリンク切れが発生すると思う。 以上のような点を気にしなくて良いのならば、そのままでもいいんじゃない?
380 :
379 :2009/01/03(土) 16:44:44 ID:???
ああ、そもそもセッション変数が共有されてしまう点の方が問題か。 クッキーは発行パスを適切に指定すれば混ざらないが、本番環境への移行の際に適切な修正をする必要がある。
パール互換の正規表現についてなのですが、 preg_matchなど公式マニュアルに出ている内容については理解したのですが、 Perlとは微妙に違うリテラルやトークンの使い方について詳しく説明してある ドキュメント等はないでしょうか?
ありがとうございます! 参考にメモさせていただきました
くだらない事なんですが、一つ気になっている事があります。 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もそれに該当する操作が必要ないのか?と気になりましたので・・・・
マニュアル嫁
テキストファイルを読み込んで一行ごとに配列に入れ 配列を検索して特定の文字が含まれていた場合そのインデックスを返す っていうのをやりたいのですが、わかりません。よろしくお願いします。 インデックス1を返して欲しいんですが、何も返ってきません。 ***テキストファイルの中身******* 群馬県 栃木県 茨城県 埼玉県 東京都 **************************** <?php //ファイルを開く $filename="test.txt"; //配列に代入する $f1=file($filename); //特定の文字が含まれる要素を探す $word="栃木県"; $key=array_search($word,$f1); print($key); ?>
返り値 ファイルを配列に入れて返します。 配列の各要素はファイルの各行に対応します。改行記号はついたままとなります。 失敗すると file() は FALSE を返します
$word="栃木県\n";
>>387 >>388 レスありがとうございます。
この検索の場合は完全に一致するものしか検索できないんですね。
例えば
$word="玉";
とした場合に
埼玉県のインデックスの3を返すというのは無理なんでしょうか?
>>389 データーベースに入れて
「like」検索をすればできる。
>>389 DBなんて使わなくてもstrposでできる
>>391 strposって、最初に出てきた位置を返す関数じゃない?
「あるかどうか」を調べる関数のほうがいいんだけど。
最初に出てくる=ある
strposで位置取得 そこまでに\nがいくつあるか ウマー
俺なら何も考えず配列に格納→foreachでループ→中でstrpos >392 strposは文字列検索としては最速の部類。 他の選択肢はpreg_match位しかないが、preg関数とstr関数じゃお話にならんほど速度が違う。
説得力を持たせるためにベンチマークを載せてはどうかね?
自分でやれ
>>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()使う。
>>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_系使うように。
>>399 で書き忘れたが、大規模検索なら素直にDB使う。
>>384 気持ち悪いなら明示すりゃいい。というか、色んな意味で明示したほうが良いと俺は思う。
phpは、リソースのオープンは明示しなくても自動的に閉じてくれる。(ファイルであれDBであれ)
>>382 PHP5から鬼車。mb_ereg()系で。
preg_match()では使われてないのでは?
お前らJavaとPHPのスキルを比率で示してくれ。 俺の場合 Java : PHP = 5 : 5 ただ、レンタルサーバ代がJavaだと高いから力配分を 1:9程度に持って行こうかと思ってる。
>>402 $a = array('a', 'b', 'c');
foreach ($b as $k => $) {}
実行すれば分かる
405 :
400 :2009/01/17(土) 12:11:35 ID:???
>>384 あ、ひょっとしたらデストラクタで閉じてるのかもね。と一応
>>400 に付けたし。
連レスウザいだろうからこの辺で。
>>403 だったら普通初期化するかキャストするもんだよ
>>406 開こうとしているファイルが必ず開けるとは限らないわな。
>>407 foreach((array)file('〜') as ...)
phpごときで何細かいことウダウダやってんだかww
あと $ary = file('test.txt') or array(); $ary = file('test.txt') or exit; とか。もしくは例外使う。 何か関数からの出力を得る度にifで1ブロック使うなんてナンセンスすぎ。
399は最近学び始めてphpが分かってきたから答えたくてたまらないお子ちゃまか
413 :
399 :2009/01/17(土) 12:39:51 ID:???
>>411 が糞ウザくなってきたから一言。
あのな。
言っておくが、
>>399 みたいな処理は普通はクラスのメソッド通すなりするわ。
めんどくさいからはしょってるだけだろーが。分かるか?あ??
なんか
>>411 見てると、俺の会社の全然使えないカスPGにそっくりで殴り倒したくなるわw
いやお前のコードが使えないんじゃん
お前ら、質問があっても誰も答えないくせに 誰かが答えるとそれには文句つけないと気がすまないんだな。 どうしようも無いカスだなw
たかがPHPでしょ 動けばいいじゃん ばか?
能力ないのに見栄を張るとは恥ずかしい奴だなw
さすがPHPスレ。お前ら目糞鼻糞。
____ ) 『 実行すれば分かる 』っと、 /⌒ ⌒\ ) 『 開こうとしているファイルが必ず開けるとは限らないわな』っと。 /( ●) (●) \ )/⌒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┬-| ,/ .| | ノ:::::::: `ー'´ \ |
やぱりphpしか使えない奴ってバカっ事でOK? Java使いが一番
アホな奴もいるもんだなw
自演煽りのクオリティが低すぎて吹いた
書き込み時間と日頃のレスの伸びからして2名が暴れていただけらしいな PHPやってると頭だけではなく性格まで悪くなるらしいから気をつけようww 融通利かないやつやコミュニケーション能力無いやつは PGだろうが何だろうが使えん うちにも1名いて給料の査定も下がったはずだが、はやくその理由に気付いて辞めてくれ
一週間を表示する関数を作ってみたんですが、 どういうわけか土曜日だけ文字化けしてしまいます。 解決策はないでしょうか? <?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)); } ?>
>425 コードをShift_JISで書かないでUTF-8にするだけで解決。
>>426 一発で解決しました。ありがとうございます。
本当文字コードって難しい。
スクレイピングでサイト作る人とか超尊敬。
>>425 まったく関係ないんだけど
土曜日だけ()が付かないのはなんでなんだろうと思った。
>>428 土曜日だけどうしても文字化けで表示できず
いろいろと試行錯誤した結果わからなかったので
質問しました。
()除いたりといった試行錯誤の名残をそのまま
書いてしまいました。ごめんなさい。
プログラム経験無しで、今からPHPを勉強しようと思っています。 そんな俺に、一冊買うならコレ!っていうPHPの参考書を教えてください。
まずマニュアル嫁
435 :
nobodyさん :2009/01/18(日) 23:59:27 ID:542zz2rd
アンケートプログラムなんかでよくある、全部の項目が入力されているかを submitボタンが押されたときに調べて、それが通ればsessionに入力項目を追加して次のページへ ってことをやりたいんですが、 全部の項目が入力されているかを調べるのはonclickにJavascriptでチェック出来ますが、 そのあと動的に選んだ値をphpのsession変数に追加するのってどうしたら良いのでしょうか?
$_SESSION['hoge'] = $hoge;
437 :
nobodyさん :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>
こんな風な意味合いのことをする方法を聞きたかったのです。
PHPとJavascriptの違い分かってないの?
439 :
nobodyさん :2009/01/19(月) 00:21:05 ID:jnDZLn2z
>>438 あくまでニュアンスを伝えるために上記のような書き方をしているだけで、
サーバサイドphpとユーザサイドJavascriptの違いは分かってます。
ただphpではこういうチェックが出来ないのでどうしたものかと迷ったので。
よく分からんがGETで取れば?
いやPOSTでもいいけど
>>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を受けとってセッション変数に放り込むなり好きにするヨロシ。
ただのjavascriptの話になってるw
うわわわわ。。。 issetでもisSetでも書けるくさいなぁ(´・ω・`)
str_replaceよりpreg_replaceが速いのか
>>445 それはありえない
preg_replaceは正規表現の処理が入る分遅くなる
ついでにいうと、単純な置換ならstrstrよりstr_replaceの方が速い
447 :
445 :2009/01/20(火) 00:28:42 ID:???
うん
>>447 そのサイトは検証もせずコピペしてるだけだからあまり鵜呑みにしない方がいい
原文はこう書いてある。 str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4 PHPの勉強の前に、まず英語勉強しようぜ
>>447 記事がうそじゃないとしても、2年も前だとあまり当てにならないな。
5.1.x時代だっけ
454 :
nobodyさん :2009/01/20(火) 14:17:46 ID:auDP4Xko
sql文の中に多数の変数を入れるにはどうしたらよいのでしょうか?
普通に文字列連結じゃだめなの? 意図がいまいちわからない。 あ、エスケープはしっかりしろよな。
456 :
454 :2009/01/20(火) 20:16:30 ID:???
>>455 はい普通に . でした
6時間前の自分にゲンコツしときました
457 :
nobodyさん :2009/01/20(火) 23:14:20 ID:FkFXLWeK
問題の切り分けすべし
まずなにも入れないで計算してみて。 あとjavascript有効になっている?
460 :
nobodyさん :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 にあるとおりだと思います。
calc.htmlはどうなっているの? 最初に実行するプログラムはなに? calc.htmlだよね? そこからcalc.phpで処理してってことだけど、 form action とか大丈夫これどうり記述しているよね? jsも読み込んでいるよね。 パスもあっているよね?
462 :
nobodyさん :2009/01/21(水) 13:51:32 ID:ruw5pBd2
<input type="text" name="名前" size="20" /> <? $line = "==名前=="; $line = ereg_replace("==(.*)==", $_REQUEST["\\1"], $line); ?> 上記スクリプトで $line を name="名前" のフォーム値に置換したい のですができません。どうすれば置換できるでしょうか?
マニュアル見れ あとeregよりpreg
464 :
nobodyさん :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>
-------------------------------------
です。パスがあっているかどうかは、どこを見るとわかりますか?
>>464 のソースの中を見ればわかりますよ!( ^∀^)b
467 :
nobodyさん :2009/01/21(水) 16:23:54 ID:VkT7uFdT
>>465 さん
>>466 さん
コピペしなおしたらできるようになりました。
でもどこが悪かったのかわからに・・
考えられるのは、どっかに空白がはいってしまったこと。 なんか変な文字がどこかにはいってしまったか。 おれもコピペでそういうことになったことは よくある。 見たとこミスはないので、あのソースをきちんと理解 して次進んでいいと思うよ
469 :
nobodyさん :2009/01/21(水) 21:43:57 ID:VkT7uFdT
空白もいけないんですか 先生ありがとう
いやあくまでも想像だけど、でも間違っているところがないから。 以後もし動かったら再度コピペすることを望みます。
471 :
462 :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
preg_replace_callback じゃないのか
$line = "==名前=="; $line= preg_replace("/==(\S*)==/e", 'sprintf("<input type=\"text\" name=\"$1\" value=\"%s\" />", isset($_REQUEST["$1"]) ? $_REQUEST["$1"] : "")', $line); こうやりたいのか? キー文字は==全角==じゃなくて==半角==がいいと思うが
474 :
473 :2009/01/22(木) 13:16:38 ID:???
htmlspecialcharsも使わないとやヴぁいか。。。
475 :
462 :2009/01/22(木) 13:23:02 ID:PnoeEoeZ
>>473 すいません、解決しました。バカみたい・・・
$line = preg_replace("/==(.*)==/e", 'sprintf("%s", $_REQUEST["$1"])', $line);
476 :
nobodyさん :2009/01/23(金) 05:27:52 ID:L5uKYwrL
477 :
nobodyさん :2009/01/23(金) 05:29:33 ID:L5uKYwrL
日本語へたで申し訳ないですが、まあ両方見てやってみてください。 ほんとはphpの本のスレに行きたかったんだけどなくなってしまった みたいで。 すいませんが、よろしくお願いします
478 :
nobodyさん :2009/01/23(金) 05:34:48 ID:L5uKYwrL
オライリー本、 読んで理解できたためしがない
<?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':
$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 . ' '; }
$html .= '<br /><input type="hidden" name="m" value="1"><input type="submit" value="next">'; } $html .= '</form></body></html>'; echo $html; exit; ?> パソコンが今使えないので携帯で消化してしまってごめんなさい このプログラムのoneやtwoを別のファイルに記録したいんですが どうすればよいでしょうか? すごい初心者なので、良ければ具体的に教えていただければ嬉しいです スレチや失礼あればごめんなさい
484 :
nobodyさん :2009/01/23(金) 16:11:58 ID:Jr51+scJ
あと、これを一時間くらいでやらなきゃなので テンパってます… お待ちしてます
初心者とかじゃなくて、 「oneやtwoを別のファイルに記録したいんですが 」 日本語か?それ。
486 :
nobodyさん :2009/01/23(金) 16:40:52 ID:Jr51+scJ
すいません やはり分かりにくかったですか questionの解答がoneやtwoになっていて その解答を記録したいんです 解答した日付時刻などはanc.datに記録されますが なにを答えたかが記録出来てないと思うのですが
>>486 なんかエラー出てると思うけどねぇ。
エラーを確認するのが解決への近道だよ。
たぶん、原因は↓かと。
$param .= $v . '=checked! ';
$param .= "{$v}=checked! ";
に変えてみたらどうかな?
488 :
nobodyさん :2009/01/23(金) 17:08:51 ID:Jr51+scJ
>>487 あれ
paramじゃなくてそこはhtmlにではないですかね
僕の方では一応エラーは出てません
>>486 セッションが引き回せていないだけ、ってオチじゃないの?
case '2'のところで、print_r($_SESSION)ってやってみれば?
490 :
nobodyさん :2009/01/23(金) 17:27:13 ID:Jr51+scJ
>>489 すいません
どの辺りに入れたらいいかよろしければおねがいします
セッション引き回す?の意味がよく分からないのですが
…念のためお聞きしますが、このプログラムでは解答をファイルに書き込めないですよね?
>>486 もう少し頭を整理したら?
回答はどのファイルに書き込むの?
> oneやtwoを別のファイルに記録したいんですが
回答毎に別のファイルを作るってことかい?
//$_SESSION[$k] = $_REQUEST[$k]; //if ($_REQUEST[$k]) { if ($_SESSION[$k]) {
>>490 デバッグなんだから、どこでもいいよ。
とりあえず、聞く前に試したら?
セッションに代入した(はずの)後、
代入された(はずの)セッションを使う前
494 :
nobodyさん :2009/01/23(金) 17:58:15 ID:Jr51+scJ
>>491 これをwebアンケートのようにしたときに
これを解答した人が何を選んだのか記録するファイルを作りたいんです
今はanc.datをつくればそこに日付等が記録されますが
できれば加えてone,two,threeのどれにチェックをつけたかも記録したいということです
記録するのがanc.datファイルでなくてもよいです
>>492 ありがとうございます!
それで上記みたいな事ができるでしょうか?
今は分かりませんが、夜に試してみます
495 :
nobodyさん :2009/01/23(金) 18:00:35 ID:Jr51+scJ
>>493 自分でさっきいろいろ挿入してみました
どうしてもエラーが出てしまったので
あとで
>>492 を試してみます
ありがとうございます!
496 :
476です。 :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 でインストールしました。
すんまそん、どなたか教えて下さい ある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の動作がコロコロ変わるものなんでしょうか?
連投すみません、追記。 crypt の挙動が変わる辺りで Windows Update を挟んでいたかどうかは、情けない事にわかりません。 むしろ、 Windows Update で crypt の挙動が変わる可能性があるなら、どのHotfixが怪しいか教えてもらえるとありがたいです。
>>496 (
>>476 )
「 /var/www/html/login.php 」について、下の2つの確認まじおすすめ
・確実に存在しているのか
・Apacheを実行しているユーザが読めるのか(パーミッションを確認)
500 :
476です。 :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でだめでした。
>>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 とか入ってないっしょ。
ドキュメント見たらなんか、学習に沿って自分で作って配置するものらしいけど…そんなんわからんがな。
これじゃ相当なヒマ人かエスパーじゃない限りレスも何もでけん。
502 :
476です。 :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/ からダウンロードしてみてください。
ではすいませんでした。
もっかい自分が今扱っているコードと関連ファイル(ディレクトリ構成そのままで)をうpしてくれ
"Unknown on line 0" そのエラー、稀に文字コードの問題はあるにしてもソースの問題じゃないと思うけど。 サーバー設定で権限がなくて読みに行けないとか、だな。
元ファイルがUnknownなのにlogin.phpがincludeできないというのもおかしいな
なぜに?
Unknown on line 0
Unknownとは、読みに行く側のリソースが特定できていないということ。
Web経由のアクセスの場合、login.phpはあるが、権限が不足していたりすると404じゃなく、
phpハンドラーに渡されて、そのエラーになる。普通によくあること。
>>500 は「パーミッションもユーザーが読めるようにしています。 」って書いてるが、
読めなくなる原因はファイルパーミッションだけじゃないからね。
実際のところ、
>>501 のアドバイスの3つ目をやってみてないわけだな。
とりあえず、最初に叩くファイルの冒頭にecho "hoge";exit();これでどうなるか。
そっからデバッグしてけば別のエラーになるさ。
>最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++; だせぇw
511 :
476です。 :2009/01/25(日) 02:01:51 ID:esMzMmSN
513 :
nobodyさん :2009/01/25(日) 02:28:51 ID:esMzMmSN
login.phpとposts.phpです。
>>513 login.phpの中で/var/www/html/login.phpなんてincludeしてんの?
ダブルクォーテーションで囲んだ文字列に改行をいれてもエラーにならないのですが、 これって文章化されたPHP仕様に含まれてますか? てっきりヒアドキュメントを使わなくてはならないものだと思っていたのですが… $multiline = " LINE 1 LINE 2 LINE 3 ";
PHPだけじゃなくて一般の言語全てがそうだと思われます(pyなんとかは一般でないから除く)
>>516-517 VBだと改行で認識するよね。
だからVBからきた人だと、改行入れても
エラーにならない、という仕様のほうが
不思議に思うんでしょう。
519 :
516 :2009/01/25(日) 04:22:47 ID:???
ありがとうございます。
有名どころのフレームワーク等でも
$multiline = "LINE1\n"
. "LINE2\n"
. "LINE3\n"
と書いているものがほとんどなので、使ってはいけないのかなと疑問を持った次第です。
SQLとか埋め込む時は
>>516 の方が断然楽ですよね…
ヒアドキュメントはいらない子?
いる子
>>519 ヒアドキュメントは、"をエスケープしなくてすむのがいい。
多次元配列の要素数を返す関数はありませんか? 例えば $test['a'][1]; $test['a'][2]; $test['b'][1]; $test['b'][2]; $test['b'][3]; この配列で要素数5を返したいのですが countでは3が返ってきます。 何かほかの関数や手段はありますか?
>>522 array_merge_recursive
array_walk_recursive すまんこっちのほうだ
>>476 >>515 だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。
たとえば、お前らのサーバでも試せるからやってみ。
test.php作ってパーミッションを000にしたファイルにアクセス。
したら、
Warning: Unknown: Failed opening ・・・
になるから。
おいおい、マルウエアかよ
528 :
476です。 :2009/01/25(日) 11:45:32 ID:esMzMmSN
だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。 なんででしょうか?
なんでて、言う前に試してみた? login.phpの中身を空っぽにしてアクセスしてみ?
>>528 原因はパーミッション以外にいろいろあるよ。
パーミッションだってあってるのかどうか。
他にはopen_basedirとかsafe_modeとか、
CGIで動いてるレンサバなんかならそれに合わせた設定が必要だし。
>>526 上と被るけどそれじゃ単純なhello worldスクリプトも動かないってこと?
>>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:無理
こういうケースでよくあるのは パーミッションが間違ってる。 open_basedirの設定にtypoがあって動かない。 include_pathに問題がある safe_modeの設定に問題がある PHPがsuexecで動いてて、ファイルの所有ユーザーかグループに問題がある などなど。
>>533 いやお前さんに聞いてるだけじゃなくて本人に聞いてるんだよ
まぁ、login.phpの冒頭にphpinfo(INFO_CONFIGURATION); とでも書いて結果を貼ってもらうってのがいいのかもしれないね。この場合。
538 :
476です。 :2009/01/25(日) 13:36:25 ID:esMzMmSN
>>536 へ
phpinfo(INFO_CONFIGURATION);
かいたやつを入れましたのでよろしくお願いします。
539 :
476です。 :2009/01/25(日) 13:42:05 ID:esMzMmSN
source.zipの中にはいっています。
source.zipアクセスできなかったよ? ところで、login.phpでecho "Hello World!";はしてみたの?
てか、そのURL貼っちゃえw
え、シカトされて怒ってんの?
これは、マルウエアをインストールさせるための釣りだな。たぶん。
545 :
476です。 :2009/01/25(日) 14:46:06 ID:esMzMmSN
login.phpでecho "Hello World!"; はできました。 source.zipアクセスできるようになりましたので、よろしくお願いします。 >>マルウエアをインストールさせるための釣りだな。たぶん。 変なこといわないでください
>>545 そしたら、元のソースにして、エラーが出る個所を特定すればいい。
1行でも解釈できれば例のエラーにはならないから。
で、リダイレクトループとかで問題が出ているケースもあるから、
error_log(__LINE__);とかを怪しいところにはさんで行って、どこまで処理が進んでるかチェック。
547 :
476です。 :2009/01/25(日) 15:00:45 ID:esMzMmSN
error_log(__LINE__); の使い方がわかなんね。 どうやって使うの?
それ書いて、エラーログ見れば、行番号が出力されてくる。 コマンドラインが使えるならエラーログでtail -f /var/log/httpd/error_logとかで見張ってればよくわかる。 エラーログが見れないんならechoでもいいけど、要するにどこまで処理が進んでるかチェックして そのエラーメッセージを出せば、新しい情報がとれるでしょ?
なんで原因を特定しようとせんの? Hellow World→動く サンプルコードをそのまま挙げた→動かない これしかやってないでできないできない言うとかありえないっす
550 :
476です。 :2009/01/25(日) 20:01:42 ID:esMzMmSN
みなさん。ありがとうございます。 error_log(__LINE__); でいろいろ調べてみたいと思っています
551 :
476です。 :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 だそうです。 調べてみてもわからん。
552 :
476です。 :2009/01/25(日) 20:13:47 ID:esMzMmSN
ひとつ事例があり、SELINUXが原因かと思いましたが SELINUXは切ってありました。
553 :
476です。 :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'=>"*" // 他の列も取得可能にする のどこかにデータを入れなくてはいけないのでしょうか?
とりあえず、初期の問題は片付いたわけだな。よかったよかった。
>>553 聞きたいことをもう少し整理してくれ。
555 :
476です。 :2009/01/25(日) 21:24:21 ID:esMzMmSN
Member Area のサーバーにはユーザー名とパスワードが必要です。
とでるんですがユーザー名とパスワードを入れてもうごきません。
初歩的ですいませんが、
>>553 のどの部分に自分のデータを記載すればいいのでしょうか?
僕はdb_login.phpにデータが入っているのでなにもいれてなく
>>553 のままなんですが。
ここの部分がおかしいんですよね?
mysqlでしょ? usernameっていうユーザいるの?
まず、こんだけ色々アドバイスもらってんだから、動くに至った経緯を書け。 ここはお前専用の質問スレじゃないんだ。 で、login.phpが動かないとか、そもそも入力されたユーザ名・パスワードが間違ってた時の挙動が どうなるのかを把握してんのか? それと自分でうpした中のDB.txtの中身を理解してるのか? 具体的には62・63行目。 …もしかしてNG推奨だったのか
データベースのレコードに自分のユーザー名とパスワード、md5ハッシュを保存 db_login.phpにはそのデータベースにアクセスするための権限情報を保存
559 :
476です。 :2009/01/25(日) 21:38:41 ID:esMzMmSN
'usernamecol'=>"username", // ユーザ名の列 ←変更 'passwordcol'=>"password", // パスワード列 ←変更 すればいいですか? あ、mysqlに入っているusernameとpasswordはすでに試しましたが だめでした。 それがいまいちよくわからないんですよね なんでだめなのか
パスワードはちゃんとハッシュしてんの?
しっかし、よく釣れるなぁw
562 :
476です。 :2009/01/25(日) 22:23:02 ID:esMzMmSN
>>557 さんへ
マスまずパスが違っていました。
僕のパスはinclude_path = ".:/usr/local/include/php/libs"
なので、ここにpearとconfig.phpを入れてやりました。
そしたら動きました。
>>560 さんへ
パスワードはちゃんとハッシュしていますよ。
564 :
476です。 :2009/01/25(日) 22:43:40 ID:esMzMmSN
いや、pearのパスが間違っていました。
元はどこにあったの?
566 :
522 :2009/01/26(月) 01:07:02 ID:Ihgtqp1K
>>525 それだと、a・bという項目もカウントしてしまい、7を返すようです。5を返す方法はないですか?
568 :
522 :2009/01/26(月) 05:09:38 ID:Ihgtqp1K
>>567 すみません、バージョンが4なのでarray_walk_recursiveは使えないみたいです。
他にありませんか?
引き算すりゃいいでしょ。countとcountで
>>522 $count = 0;
foreach ($test as $value) {
$count += count($value);
}
echo $count;
571 :
570 :2009/01/26(月) 05:58:46 ID:???
ちなみに
>>570 の方法は2次元配列の場合で
それ以上になると再帰(リカーシブ)でやったほうがいい
(foreachのネストでも可能だが読みやすさに限界がある)
ただし再帰は頭の回転が速くないと何やってるかわからなくなるので
苦手なら無理して使う必要はない
自己紹介乙
>>570 わざわざそんなことしなくてもこれでいけるっぽ
echo count($test, 1) - count($test);
html拡張子でPHP5が動くように設定しつつ、 404エラーの際に自作エラーページを表示させるには どうすれば良いかご存知の方いませんでしょうか。 .htaccessで「AddType PHP5-script html」を指示してしまうと 「ErrorDocment 404 error.html」で指定したページが表示されません。 PHP4の時は両立できたんですが…
577 :
nobodyさん :2009/01/26(月) 10:41:26 ID:2xglnPYy
>>576 AddType php5-script .html
>>577 あー大文字で書いてしまったのはここに書き込む際の記載ミスです。
実際の.htaccessではご指摘のように記載してます。html拡張子でPHP5は動いてます。
でもそうすると404エラーで自作ページが表示できなくて困ってます。
AddTypeでやってもAddHandlerでやっても結果は同じで、
「AddType application/x-httpd-php .html」でPHP4の環境では両立できるんです。
エラーページが表示されないのならどんなページが表示されてる? まっちろ?
>>580 IEならIE、FireFOXならFireFOXのフツーの404NotFoundページが出ます
そのエラーのソースの中でheader("HTTP/1.0 404 Not Found");してみるとどうなる?
だったら例のあれじゃない? 自作エラーページのサイズが小さ過ぎるとか。。。
>>582 変化ありませんでした。
IEのHTTP 404 未検出の画面が出ます。
>>583 ファイルサイズは1Kbありました。
>>584 404header返せばいけるはずなんだがな。
どんなソースになってるよ。
>>585 単純なHTMLページの1行目に↓をぶち込んだんですが…
<?php
header("HTTP/1.0 404 Not Found");
php?>
.htaccessで拡張子指定しているのは今は.htmlだけなのですが
存在しない.htmファイルを探させると自作エラーページへ行くことがわかりました。
が、.htmlファイルだとIE規定のページになっています。
.htmlでPHPが動くように指定してしまうとErrorDocmentが
狙った動きをしてくれない、という事でしょうか。
ちなみに今、直接自作エラーページを指定したらIE規定のページが出ましたので
404headerはちゃんと返ってきているようです。
Apacheスレかhtaccessスレあたりで聞いたほうがいいぞ
htaccessスレが見つけられなかったのと PHPで何とか似たような事をやる技があったりしないかなーと 思ったりしたんですが、やっぱ無理すよね。スイマセンでした。 Apacheスレの方で聞いてみます。ありがとうございました。
589 :
nobodyさん :2009/01/26(月) 14:26:16 ID:7H1IWdV1
590 :
589 :2009/01/26(月) 14:27:55 ID:???
と思ったら関係ないな、すまん。
右から読んでもphp
左から読んでもphp なんて言うと思ったか
前から読んでも(ry
<?山本山 タケヤブヤケタ 山本山?>
なぁにこれ?
>>595 サイトの中身良く見りゃわかんだろ・・・
evalは、文字列の中身をphpのコードとして解釈して実行するもの。
base64_decodeしてからgzinflateしてるんだから
base64_encodeしてからgzdeflateすれば、期待の物が出来るんじゃね?
これでわからないんだったら、プログラミングやめた方が良いかもな
性格悪いな
>>597 最初と最後の1行ずつは要らんだろ常識的に考えて。
>>600 フイタww
淡々と技術情報の交換を2chでしたいってそりゃ無理だろw
2chってそういうとこだとおもうべきだな
質問です! サーバーがPHP5になってしまい 今まで使っていたフリーのメールフォームが使えなくなりました。 PHP5のフリーのメールフォームを探したのですが全然わからず ここにたどり着きました。 フリーのメールフォームのサイトを教えて頂けないでしょうか?
スレ違いで内科?
まともな人がいないのでこちらでも質問を //$_SESSION['abc']; は前ページで123を代入 //ここから $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 42000, '/'); } session_destroy(); echo $_SESSION['abc'];//123 と表示したいのですが何か方法はないのでしょうか?クッキーとか使わずに。
頭痛くなってきた。 要点をまとめてくれないか
$_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']; と表示できればいい。
>>604 ==
>>606 だよな?
「どうしても$_SESSION['abc']を使いたい理由」ってのがわからんと、普通のPGは他の手段を考えると思うぞ。
>>606 の中で $abc に入れてるんだったら、そのまま echo $abc; すりゃ良いじゃん、的な。
つーかsession_start()しなくて良いんかな。
長ったらしくない程度に、もう少し質問の背景を含めて、かつ要領良くまとめて質問すれば回答が返って来ると思う。
前よく出没してた基地外だろ
やりたいことは見えてる。
「ログイン・ログアウトとは別にセッションデータを引きまわしたい」ってことだろ。
で、普通は
>>604 みたいなソースにはならないのに、わざわざ教えてgooだか、
phpのマニュアルでセッション破壊用のソースをそれだと勘違いして質問してるだけ。
すでに回答ついてるのに、人の意見を聞けない困ったチャンか、単なる荒し
>>607 ログインログアウトとは別に、スタイルシートをセッションで持ち歩いていて、
ログアウト
>>606 で書いたようにログアウトとしたときセッションに保存してあるスタイルシート変数も消えてしまいます。
なので、セッション(ログアウト)を消す前に$abc = $_SESSION['abc']; として消した後再び、$_SESSION['abc'] = $abc; などにして再度セッションにいれればなと考えていますが、
うまくいきません。
そこで何かいいほうほうは無いものかと。
悔しいっ・・・でも・・・触っちゃう・・・っ(ビクビク
>>613 cookie使えよ。sessionなんかにそんなん入れんな。
sessionに入れるならログアウト=専用スタイルシート破棄として使え。
$_SESSION と session_*()を勉強し直して来い
615 :
nobodyさん :2009/01/30(金) 23:37:15 ID:gxYTwHzL
うん
617 :
nobodyさん :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に反映させる方法ってない?
エディットページで$_SERVER['PHP_SELF']にしなければいいのでは?
619 :
nobodyさん :2009/01/31(土) 00:41:31 ID:Zjr5MV5E
お!というとどういう風に記述すればいいですか?
ファイル名
なぜにhidden使う必要が?
623 :
nobodyさん :2009/01/31(土) 01:07:34 ID:Zjr5MV5E
>>621 説明足らずで すまん ありがとう。要は管理人専用ページでこのスクリプトを使用した時に$_SERVER['PHP_SELF']だと現在いじってる(管理人専用ページ)でスクリプトが実行されてしまうんではないかと。
あくまで表示したいのはindex.phpなので、そこんとこどうなんかなーと思いまして。
>>620 と、いうことは$_SERVER['PHP_SELF']を$_SERVER['index.php']にしたらいいってことですか?
お前は何を言ってるんだ?
625 :
615 :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);
?>
から、偶数行だけ表示するにはどうしたらいいんでしょうか?
626 :
nobodyさん :2009/01/31(土) 01:27:12 ID:Zjr5MV5E
すみません。ようやく分かってきました。 $_SERVER['PHP_SELF'] これ書かなきゃいいんですね。 じゃあそのかわりformのactionにはなんて書けばいいんですかね?
actionの意味知らんの?
628 :
nobodyさん :2009/01/31(土) 01:30:22 ID:Zjr5MV5E
正直なところform処理いじったことがありませんもので…。非常に申し訳ないんですが教えてくれると助かります…
629 :
621 :2009/01/31(土) 01:35:09 ID:???
630 :
621 :2009/01/31(土) 01:38:56 ID:???
>>623 やっと意味がわかった。管理人は管理人ようのページを作り給え
631 :
nobodyさん :2009/01/31(土) 01:46:56 ID:Zjr5MV5E
>>630 ありがとうございます。じゃあ$_SERVER['PHP_SELF']はいらないってことですかね?
>>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>
を作れ
いやindex.phpでいいだろ
色んなやり方あるけど初心者だそうだからいちばん新ぷりに
635 :
nobodyさん :2009/01/31(土) 13:18:26 ID:Zjr5MV5E
ありがとうございます!ようやくわかった気がします。actionって動作させたいファイル名を指定したらいいんですね。 これでなんとかなりそうです。ありがとうございました!
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が更新されるのですが、 どこかおかしいのでしょうか
すみません、環境書き忘れました。 php5,postgresです
>636 どのクラスのprepareだよこの馬鹿馬鹿まんこ! $this->dbが接続失敗か何かで初期化されていないように思われる。
レスどうもありがとうございます。 そのあたりを探ってみます。
いや$dbのnewしてるとこ見れば一発だろw
出来ました。どうもありがとうございます。 さっきのエラーは昔書いたクラスコピペして直したら出なくなったのですが、 dbが更新されなくて悩んでいたら文字コードの違いが原因でした。 mb_convert_encodingで挿入する値をdbの文字コードに直して解決しました。 お世話様でした。
642 :
nobodyさん :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); //データベースクローズ
644 :
nobodyさん :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になってしまうのはなんでですか?
おねがいします。
645 :
nobodyさん :2009/01/31(土) 20:33:43 ID:QDNvJIlq
>>646 おーできました
ありがとうございます!!
649 :
nobodyさん :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 ありがとうございます
質問です elseif (preg_match("/^\d{8}$/", $_GET["id"])){ $id = $_GET["id"]; } GETで8桁の数字のみ受け取るように↑のようにしましたが if文でマッチしてても変数に代入する際はpreg_matchなりで GET変数内を数字のみとなるように変換した方がいいものなんでしょうか
お前は何を言ってるんだ
>650 俺ならctype_digit($str) && strlen($str) === 8 まあそれはそれとして、別にいいんじゃね。その正規表現にマッチしてるなら間違いなく数字だけだし。
末尾の$は改行にもマッチするから数字だけとは限らないんじゃ?
655 :
650 :2009/02/01(日) 22:56:05 ID:???
よく考えたら\rが混じる時点で正常なデータではないので もとの"/^\d{8}$/"で問題なしな気がしますがどうなんでしょう
656 :
652 :2009/02/01(日) 23:22:37 ID:???
重視したのは分かりやすさ。正規表現だと、何を意味しているのか分かりづらい。 パターンがよほど複雑な時以外は正規表現は避けたほうがいい。 >653-654 改行とか忘れてたわ。 if(preg_match("/^\d{8}$/", "12345678\n")){ echo 'match'; }
半年ロムってろと言われてずっと見てきたが もうPHP諦めることにした。さっぱり分からん。 このスレのどこが超初心者用なんだ。
3年ROMってろ
もう、諦めたんだ放って置いてくれw プログラムなんて嫌いだ。
何が分かんないんだよ
放っておいてやれよ
なんか残念だな...。 このスレだけ読み続けても、超初心者が分かるようにはならないと思う。 このスレは、超初心者も質問していいというだけで、来る質問が全部、 超初心者向けというわけではないから。 もう見てないかもしれないけれど、入門書を図書館とかで借りてきたほうが いいと思うよ。
PHPなんってググって触ってみりゃ、どうにでもなるものを、 半年もROMってわからないなんて、ネタに決まってるだろ もしネタじゃないなら、10年はROMるべき。 そうして人生が終わるさ
人生も諦めたらスッキリするのに
>>664 全く原因が分からないのでお聞きしたいのですが…
$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy
上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません
phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします
>>664 全く原因が分からないのでお聞きしたいのですが…
$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy
上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません
phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします
image.jpgがないんでね?
ああそれだな
>>667 確かにファイルは存在しています・・・
>>668 MIMEヘッダーは
header("content-type: image/jpeg");
で出力できてますでしょうか?
ご指摘の後にこれを追加してやってみてのですがだめでした。
ただ、文字化けのような表示から画像を表示できていないマーク?
のような表示にはかわりました・・・
>>670 imagecreatefromjpeg
にしてみたら?
それで、$imがfalseになってないかチェック
それから、imageやheaderを出力する前に余計な出力をしないように、ソースの冒頭でob_startして、直前で破棄
ところで皆さんPHPとMYSQLは勉強し始めて どれくらいの期間で使えるレベルになりましたか?
使うだけなら書籍読みつつ1日でカバーできる範囲 使いこなすまでは相当かかったが
>>670 「image.jpg」→「"image.jpg"」
"imagejpg"になってたりするのか
そもそもcreateimagefromjpegなんて標準関数はないわけだが imagecreatefromjpeg(string $filename)ならあるけど
単純にサーバにGDライブラリがはいってないだけなんじゃね? phpinfoみてみれ
書いたとおりに載せないで情報小出しにしてる時点でもう答えようがない
要するに釣り
682 :
666 :2009/02/04(水) 20:04:43 ID:???
お騒がせ致しました 釣りではないのです 広告自動表示のレンタルサーバーを使用していたためにうまくいかなかったようです 広告無しのサーバーでは問題なく表示できました。 ありがとうございました
広告自動挿入のサーバーだと ヘッダー情報ってだめなの?
PHPの講師やりたいんだけど、 どこの学校がおすすめ?
学校行ってまでPHP学びたいと思うか?
>>685 だって一日で20万もらえるってよ
バカらしくてコーダーなんかやってられないよ
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)な感じにする関数てあるんでしょうか。
>>687 pdoとかMDBとかにあるよ
sqliteは知らんけど
>>688 ドキュメントの翻訳で「〜と思う」なんて普通使わない
>>689 ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。
$str = '4,980 円'; ↑みたいなフォーマットの価格データを整数値にしたいんだけど ↓よりシンプルにやる方法ってある? $str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);
$str = (int)str_replace(',','',$str)
ありがとうg
>>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"
}
}
となります。
サンプルのような結果と言われても、サンプルのような結果がどんなもんだかわからんからね。 とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?
まぁ、試しに PDO::FETCH_COLUMN|PDO::FETCH_GROUP じゃなく PDO::FETCH_ASSOC|PDO::FETCH_GROUP にしてみたら?
>>697 失礼、サンプルは
>>692 にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、
>>696 が正しいということはやっぱりなにか勘違いしてるのかなぁ
あぁそれか、fetchAllの第2引数に0が入ってるじゃん、だから、カラムが制約されてる それ、外したらどうなる?
array(2) { ["apple"]=> array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } ["banana"]=> array(1) { [0]=> string(6) "yellow" } } になったけど
ああすまん本人じゃなくて俺の環境でやったらってことね
>>700 あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701 も確認ありがとうございます。
fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0); で普通に取得できたが? 後進のために原因を明らかにしといてくれ
>>704 もし、第2引数に0が入ってても第2カラムを取得できたんならバグだと思うよ
お前は何をいっちょるんだ? 第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ
すまん誤爆した
>>706 デマ書いてすまん、よくわかってなかった。
そのはずだよねぇ。
<?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をなくすとエラーは出ません 何がいけないんでしょうか
定義が後でtry〜catchの中だからでは?
>>711 まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします
>>710 いったいどうしたらそういう書き方ができるのか知りたいわ
Perlから入った奴なんかはそういう書き方をする事があるな。 Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。
PHPだって、パース対象がグローバルなら、普通にfunctionの後置定義は有効だよ。
ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。
>>710 なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ
ツン?
PHPとMySQLで学習用のWEBシステムを作っているのですが ' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する にはどうすれば良いですか? 簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。
基礎中の基礎すぐる
>>717 mysql_real_escape_string
addslash
addslash ? syntax error
データーベースにデーターをつっこむ直前に データーベース専用のエスケープ処理をするのが普通
データー(笑)
htmlの<base>のようにユーザのトップディレクトリを指定したいんですが、 ユーザのトップディレクトリを調べる方法はありますか?
環境は?OSとか
>>725 ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…
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,"成功です。");
別にいいんでは?
関数はあくまで何かを返すだけにして、制御を握っているのは「メインのルーチン」ひとつにした方がいい。 あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。 同じ理由で、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()はスクリプトの末尾のみ、出力はこの文のみになる。
つうか、正しいjson出力とエラー出力を別の関数にするかな。 boolを渡すより、return_error_json()の方が分かりやすい。
実ディレクトリでいいのかな?ローカルでいえば /Applications/MAMP/htdocs/ となります。 実行ファイルがトップにあるわけではないので相対パスでのファイル指定より 基点からの絶対パスのほうがわかりやすいかなと。
>>733 dirname(__FILE__) とか getcwd() とか
そういうこと?
>>733 $_SERVER['DOCUMENT_ROOT']
ユーザー関係ないじゃんw
>>735 ,736
$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。
739 :
727 :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とか
740 :
727 :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文を関数外に出した方がいいのかもしれませんが
なんで「throw_except」←関数化してんの?
毎回throw new Exception($msg);と書くのがめんどくさいので
isError1()とisError2()側でthrowしろよ(まぁ関数名おかしくなるから変えて) try { isError1(); isError2(); return; } catch (isError1Excetion $e) { } catch (isError2Exception $e2) { }
isErrorをtryはせんだろうw
745 :
729 :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から呼んでもいい。
746 :
739 :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。
クライアント側でもチェックしてるのでそれをわざわざ変更して送ってくるのは上記にあてはまるかと。
初心者相手なんで一応言っておくと、後者のコードは検証ルールが変わっただけなら書き換えないといけない関数はひとつ(validate)。 グローバル空間の処理や他の関数は一切触れなくて平気。 グローバル空間の処理を書き換える方が、関数を書き換えるより簡単だって言い張るならもう何も言わん。ダイクストラ以前の時代に帰れ。 「メインルーチンがほぼ丸ごと関数化してる」のは、確かに設計としては甘い。 本来は、「100%すべてを関数化すべき」だしな。
748 :
746 :2009/02/13(金) 02:05:40 ID:???
あー、でもとりあえず作例他ありがとです。 参考にして勉強させていただきます。
質問です。 現在、PHP4を使って携帯サイトを作っています。 新規登録してログインして日記みたいなのを登録するシステムなんですが、 ログインした後の日記登録の部分は問題なく動作します。 ところが新規登録のところで動作がおかしい部分があるのです。 動作確認はdocomo,au,softbankの実機とPC上のエミュで行っています。 現象はsoftbankの実機のみで起こるのですが、スクリプトでは header("Location:xxxxxx.php?id=xxxxx")でページを飛ばすところで問題が起きます。 docomo,au実機、PC上の3キャリアのエミュでは問題なく動作、ところがsoftbankの実機のみ ページが飛ばずに「このページは開けません」みたいなエラーが出ます。 ソースレベルでは、その他の日記登録などとほぼ同じなのですが・・・。 softbank携帯だけ、何か仕様が違うのでしょうか?ちなみにセッションを使っています。
↑に追記です。 飛び先のphpスクリプトにダイレクトに接続した場合、問題なく動作する事は確認済みです。
さらに追記です。うざくてすいません・・・ header Locationで飛ばさずに、aタグを使って間にワンクッション置く(クリックさせる)と正常に動作します。 どのみち、その先でまたheaderで飛ばすところで駄目なんですが・・・。
>>749-751 > softbankの実機のみページが飛ばずに「このページは開けません」みたいなエラーが出ます。
このときの、サーバーに残るアクセスログは?
んで、Locationで指定しているURLはドメイン込のフルパスで書いてるよね?
サーバーのアクセスログは見る権限がないので、ちょっと頼んで調べてみます。 Locationには絶対ではなく、相対アドレスで指定しています。
サーバーのログを見ると、302が返ってきているようです。 要求しているURLは、変ではなくアクセス出来るURLでした。
302はLocationヘッダーを飛ばした時のログでしょう。 その直後に正しいリクエストが来てるかどうか。
同じリクエストを数回繰り返しているだけでした。
>754 PDFの資料、大変役に立ちました。 locationで指定しているアドレスを相対から絶対にしたところ、動作しました。 ありがとうございました。 でも、他の部分では相対にもかかわらず正常動作しているんですけどね・・・。 やはり携帯サイトは難しいです。
それをキーにしてどっかから引っ張ってきてるのでは?
前者は アカウント情報とそのキーを一緒にDBかなんかに突っ込んでおく アクセスがあったらアカウントを有効にしてそのキーを削除する とやってるだけ。 その文字列とあなたのアカウントIDやメールアドレスに直接の関係(例えば、メールアドレスを「暗号化」するとその文字列になるとか) はないと思うし、むしろあったら設計として不味い。 後者も、文字列と実際のファイル名なりデータなりを関連付けるDBを保持しているだけ。 ダウンロードさせるファイルの名前はヘッダで指定できる。Content-Dispositionでぐぐれ。
質問です。 皆さん、日記やブログを作るときどのような感じでスクリプトを組んでいますか? 例えばhtml文字をエスケープして、マジッククォートを取り除いて…といった形で教えてくださるといいんですが。
ぐぐれよ
>760 mod_rewriteを使ってるんだろうね。
それのどこにmod_rewriteが必要なんだよw
いや、hoge.co.jp/mail/CSDFG365 ←このアドレスの事をいったんだ。 暗号云々ではない。ズレてしまって申し訳ない。
769 :
760 :2009/02/19(木) 22:42:44 ID:???
みなさんありがとうございます。 パラメータをディレクトリとしていたんですね。 mod_rewriteを使って解釈しないといけないので、ズレていないと思いますよ。 使わずにすむ方法は思いつかないんですが・・・。 助かりました。ありがとうございました。
770 :
760 :2009/02/19(木) 22:50:42 ID:???
連続ですみません。もう一つ関連(?)でわからないことがありまして。 ダウンローダーとか、宅ファイル便とかだとファイルの公開日というのが 指定できるのですが、その指定した日時まで公開というのはどう実装するので しょうか。ユニークキーと期日を保存して、その期日にユニークキーを 削除すると思うのですが、「その期日」に動作される方法が解らないのです。 教えて君ですみませんが、どなたかアドバイスください。お願いします。
771 :
760 :2009/02/19(木) 22:54:01 ID:???
すみません。 ×「その期日」に動作される方法 ○「その期日」に動作させる方法 でした。何卒よろしくお願いします。
クラックとかでもなければDB内の改竄はできない気もするんですが データを信用するなとのことなので出力時にhtmlspecialcharsを挟んでます しかし装飾系のタグが使いたいので以下のようにしてみました 問題ありますか? $str = "@<b@>強調@</b@>@<span class=@”red@”@>赤色@</span@>"; //DBから取得したデータ echo str_replace(array("@<","@>","@”"), array("<",">","\""), htmlspecialchars( $str, ENT_QUOTES, "UTF-8" )); 検索文字はすべて全角、上はあくまでサンプルで実際の検索文字は違います
>>770 ファイルそのものを削除するならcronなんかを走らせておくのでしょうが、
ファイルを直接DLではなくCGI/PHP経由でのみDL許可にすれば
期日後はユニークIDをDBから取り出せなくするだけで実現できるのでは?
>>772 閉じタグ打たなかったら、ページの最後まで
適用されてしまうんでない?
<h1>おはよう
↑こんなの。ひろゆきがあめぞうを
つぶしたときに、「スタイルシート破壊攻撃」というのを
使ったのだ。「あめぞうウイルス」でググるとわかる。
775 :
760 :2009/02/20(金) 08:00:28 ID:???
>>773 アドバイスありがとうございます。
その期日後にPHPを起動(?)させる方法を知りたいのです。
だれもその期日(後)にPHPにアクセスしなければ、PHPは動作しないので。
あっ誰かがアクセスする時に、期限のチェックをすれば済む話ですね。
なんか自動的に削除処理しなきゃと思い込んでました。
超初心者ということで許してください。ありがとうございました。
cronでPHP起動できるやろ PHP内でcrontabを書き換えられるかどうかは知らんけど。
自動削除は1時間毎や1日毎みたく定期的にcron動かせばいいんじゃないのかな
>772 scriptタグを埋め込まれると、ページ内の全表示内容、クッキーを外部のURLに送信される可能性がある。 onloadなどのJavaScriptを実行されるものは全て同じ。 多くのシステムがタグを回避するのはこの脆弱性対策のため。 imageタグによる画像貼り付けや、objectタグによるFlash貼り付けなど、考慮しないといけない事は山のようにある。 脆弱性対策ってのは、猿真似してりゃいいってもんじゃない。 「何故」HTMLタグに警戒しないといけないのかを理解し、適切な対策を自分で考える必要がある。 勘違いするといけないのではっきり言うが、その処理を挟んでもセキュリティは一切向上しない。無駄だ。
779 :
nobodyさん :2009/02/21(土) 06:29:21 ID:wFQNH034
perlで300行程度の規模のプログラムを外注で打ってもらったらいくら取られますか?
780 :
nobodyさん :2009/02/21(土) 06:30:12 ID:wFQNH034
書き間違いました perl X PHP ○
500円
うちなら400円で良いよ
783 :
779 :2009/02/21(土) 10:59:46 ID:???
コメント行3万行入れて4万円上乗せするけどいいか?
785 :
779 :2009/02/21(土) 11:11:58 ID:???
だめぽorz
すみませんが質問させてください。 入場者名と退場者名を同じ1ページ内で、上下のスパン(上半分が入場者名、下半分が退場者名) にしてPDF出力したいと考えています。 プログラムはそれぞれ"nyuujyou.php"、"taijyou.php"が用意されています。 このように別々のプログラムの結果を、同じページ内でPDFで同時に表示させることはできますか? 共通の変数は日付$ymdだけです。
>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変換はライブラリを自分で漁れ。
788 :
786 :2009/02/21(土) 11:59:35 ID:???
>787 わかりました、丁寧にありがとうございました。
>>778 厳しいご意見どうも
前段に関してはセキュリティ関連のサイトとか見てるんで
scriptを仕込まれてとかはまあ理解してます(というかこんなことがあると把握してる程度というか)。
その上で
>>772 が全くの無駄となるとhtmlspecialcharsが意味を成さないんでしょうか
それとも関数の後に置換をしてるからダメになるんでしょうか。
これで100%対策してるとはもともと思ってませんが、htmlspecialcharsで
ある程度の対策になるという考えは間違ってるでしょうか。
>>772 も置換パターンが読まれたらアウトですが、どういった部分がだめなのか1例だけでも
教えてもらえないでしょうか。
@<b onmouseover=@"怪しい処理@" @>ボールドだよ@</b@> 自信ないけど、こんなの入れたらどうなるでしょうか。
>>790 つまり789の最後に言ってるように@<が<に変換されるのが
ばれているということが前提ですか?
ならば置換を行わずにhtmlspecialcharsのみなら問題ないということでしょうか。
当初の一部タグを有効にしたいというのはとりあえず置いときますが。
>>791 一部のタグだけ有効にしたいというのならstrip_tagsでいいでしょ
出力時に htmlspecialchars を挟むのは間違えてない。 万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。 # まぁ、SQLインジェクションが起こった時点でいろいろ見直すべきだと思うけど。 装飾のタグが使えるのは素敵な機能だと思うけど、自力で組むのは難しいんじゃなかろうか。 自分ではどんなに完全だ、と思ってても意外なところに穴があったりするし。 ここで「大丈夫でしょうか?」って聞くくらいならば、そんなものは実装しないのが一番。 少なくとも str_replace() とかの単純な手法で実装できるような機能ではないと思う。 置換パターンが読まれてなければ云々については、 攻撃するときは攻撃者はいろんなパターンの文字列をスクリプトに投げてみて、置換や変換のルールを推測した上で攻撃するんだろうから、 あんまり考える意味がない。
795 :
791 :2009/02/21(土) 16:08:04 ID:???
ありがとうございます。 ちょっと忙しくなったので夜に反応します。
>>783 設計はすでにできていてあとはコードを書くだけ?
それなら設計の読み方わかるニートがやってくれるかもね
普通の人に頼むならまぁ無理だと思ったほうがいいわ
時給換算して300行400円はわりにあわない
10分で300行かけるような超人がいたとしたら
人の○倍仕事量こなすから○倍よこせってなるのでますます無理
設計書くなら値段は跳ね上がるから設計書いらないっていうのが
PHPクライアントなわけだけど
それだとお金にならないからスルーするというのが業界の流れ
797 :
nobodyさん :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"; } ?>
<?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"; ?>
マルチは地獄に落ちろ
はわわ
801 :
772 :2009/02/21(土) 21:58:27 ID:???
strip_tagsは
>>794 なので自分で有効なタグのみ出力するよう考えてみたんですが難しいようですね。
wiki風なキーワード+対象文字っていうのも考えてたんですけど、それはそれで抜き出しのための正規表現とかで
>>793 でも言われているどんな抜けがあるかが想像つかないものでして。
とりあえず今回はあきらめることにします。ありがとうございました。
>>794 万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。
お前、いろいろと混同してないか?
803 :
nobodyさん :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された中身が保持されているからだと思うのですが、 送信を押したときにだけ表示するにはどうしたらよいでしょうか?
リロードした時に「再送信しますか?」って聞かれてるだろ? つまり、そういう事だ。
>>802 不正に注入されたデータがJSとかのスクリプトを含むもので、html..を噛ませてなかったら、出力時に実行されてScriptInsertionにならない?
そこで、データの出力時にhtml..を噛ませてあれば、JSの実行は防げるから多少は軽減できる、って意味。
別にSQLInjectionが防げるっていう意味のつもりじゃないよ。
質問です。 file_get_contents()って第一引数にファイル名を指定しなければならないと聞きましたが、ファイル名を変数に代入してそれを指定しても動きますでしょうか?
動く
>>805 いやそこでSQLインジェクションが出てくるのがおかしいよ。
意図したとおりのSQLが実行されて、意図したとおりDBに保存されるんでしょ?
文字型のカラムに入るデータがHTMLだろうとJavaScriptだろうと
DB的にはなにも問題ない。
それを取り出して表示するときにHTMLならHTML用の処理が必要ってこと。
。。。ほかのとこにいた人?
>>803 二重送信防止とかでぐぐれば結構出てくるよ
>>809 インジェクションが万一、起こってしまった場合の話。
html..が対策になるなんて思ってないよ。
データベースから引っ張ったデータでも信用せずに、出力時にhtml..をかけておけば万が一、JSとかの意図しないデータを混入させられても少しは安全になるだろう。
って言いたかった。
間違えたこと言ってたらすまない。
812 :
811 :2009/02/22(日) 00:34:57 ID:???
なんかわかりにくくなってる。
言いたいことは
>>809 と同じのつもりなんだけど……。
ぐちゃぐちゃにしてしまった、申し訳ない。
IDスレのほうも似た話題になってるけど別の人です。
失礼しました。
むしろ809が何に食いついてるのかがわからん 俺に読解力がないんだろうか
質問です。 配列の値をカンマで繋げたいんですがそういった関数はないでしょうか。 配列関数のところにはなさそうなんですがforeachでループさせるぐらいしかないんでしょうか。
implode
implode,explodeは覚えておいて損はない
>>815 ああstring関数でしたか。
ありがとうございます。
>>816 はい、しかと覚えました。
ていうか今回はこちらの調べ方不足だったけど
関数多すぎでいまいちマニュアルから探しづらい・・・
何でも自分以外の物のせいにする奴は駄目な子になるぞ
>>818 「php 関数 配列 つなげる」でぐぐったらすぐ出てきたぞ
キーワード php 配列 値 繋げる 今回は悪かったって たいていググルで見つかるけどマニュアル内検索でヒットしたらいいんだけどね とまた転嫁
PHPの関数は6500個あるから マニュアル全部読みとか無理
>>822 6500とかすげーなw
数えたお前もすげーよ
phpのレンタルサーバでオススメなところはどこですか? 私は、今のところサクラを考えていますが既に使われている方は 実際の使い勝手は如何でしょうか? 選択する上でのポイント ・月額料金が1000円未満 ・ローカルで作成したphpスクリプト+DB(MySQL)を簡単に使える(UI操作でOK)
最近引き継いだ案件のソースみたら、 PDOもPEARもmysqliも使ってなくて、 いまだにmysql関数使っててマイッタ。 インジェクションはエスケープ文字をあらかじめ 全部全角に変換することで対応してるみたい。 これってどうよ?
トリッキーな解決は風物詩
おれもmysql関数しか使わないよ どんな環境・設定でも対応できるからネイティブ関数だけで使いやすいようにクラス化しておけば使いやすいし
>>829 やっぱそういうことか。
たしかにどネイティブだからサクサク動いてるんだよな〜これが。
デグレ起こしたらいやだし、今回は実装あわせてサクッと終わらせよ。
Vistaにapacheをインストールしたのですが、 起動しようとすると、 「指定されたファイルが見つかりません。No Installed service named "Apache2"」 となって起動できませんでした。 UACはオフにしているのですが…、どなたか教えて下さい。
IISとかSKYPEが起動してないか要チェックですぞ
↑ PCにキックをすると直ったよ。
>>832 あ!skype起動してました!これオフラインにすると正常にインストールすることができるんですかね?
あとIISってのが分らないです。調べてみます…
ポート80の取り合いするからだよ
できました!skype閉じてインストーラ起動させてみたら正常にインストールできました。 皆さんのおかげです。ありがとうございました!
青いねぇ!すがすがしい!
PHPを拡張しようと思ってhttpdのAddModuleという欄をさがしてみたのですがありません。 apacheのバージョンは2.0、PHPのバージョンは5なんですが2.0には最初から書いてないんですかね?
LoadModule書けばよし
お!そうなんですか! じゃあAddModule mod_php4.cの記述はいらないってことですかね?
そらそうだ。 エスパーじゃないんだから、チミがAddModuleするかなんて アパッチ様が知るわけないだろ
エスパーじゃない...そうですね! アパッチ様がエスパーじゃないという前提で、LoadModule mod_php5.cと記述してみました。これで合ってるでしょうか
それじゃぁエスパーだという前提じゃないと動かないと思うぞ
えー!どうしましょう!じゃあもうコレ AddModule mod_php5.c いらないってことですかね?
845 :
838 :2009/02/22(日) 23:02:42 ID:???
もう!オレのバカバカ!こんな質問でみんなを困らせて! みなさんありがとうございました。自分で解決してみます
>>803 value をからにしておいて、ボタン押したら
document.forms[0].elements['insert'].value = 'insert';
document.forms[0].submit(); とか、phpじゃないけど、、
これからPHPを1から勉強しようと思っています。 初心者用でおすすめの技術書はありますか? できれば1行ごとに、「//変数を配列[a]にセットする」・・などといった解説がついているといいのですが。 おねがいします。
マニュアル
その段階ならマニュアルの言語リファレンス読んだほうがいいと思われ
PHPをイチからっつても、下地があるかどうかで変わってくると思うけど・・・ なんか他の言語でプログラムはしたことあるの?
PHPでfeedcreator.class.phpを使ってRSS出力をしています。 RSSのURLをIEでクリックすると、ちゃんとitemsを拾ってXMLにしてくれるんですけど、 RSSリーダーやFirefoxでクリックするとitemsを拾ってくれません<items>要素が空になってます。 IEとFirefoxでは挙動が違うのでしょうか?
↑の者です。 原因がわかりました。お騒がせしました。こちらのプログラム上のミスでした。
>>847 実践マスターPHP+MySQL
独習PHP
PHPによるWebアプリケーションスーパーサンプル
854 :
nobodyさん :2009/02/23(月) 16:23:08 ID:frx8oxrA
初心者ってレベルじゃないですがPHP+Apacheの最新版のインストール手順が載ってるサイト ってありますか? どこ調べても旧バージョンしかないんですが。
ここは超初心者用だから問題ないですよ。
>>855 それはありがたいです><もし心当たりのあるサイトがあれば教えてください
環境は?OSとか。 インストールはバイナリーから?ソースからビルド? 旧と手順変わらないと思うけどね。確実なのは添付されてるドキュメント
>>854 OSぐらい書いといた方がいいと思うよ。
WindowsとLinixがやり方違うし。
最新版は
Apache: 2.2系
PHP : 5.2.8
でおk?
859 :
nobodyさん :2009/02/23(月) 17:49:03 ID:frx8oxrA
運用でなく開発環境として+インストールの勉強自体が目的じゃないなら XAMPP入れた方が早いよ >>windows
863 :
nobodyさん :2009/02/23(月) 18:05:24 ID:frx8oxrA
XAMPPってすごいですね。私は学習用に必要なんでこれを使わせていただきます。 ありがとうございました。
XAMPPのよさがまったくわからない。
>>864 じゃあ秋葉原にいくな
CPUを買うときと、ハードディスクを買うときと、
ソフトを買うときと、マウスを買うときと、
それぞれ全部違う町にいけ。
それは大げさ
>>867 いや、そんなもん
わざわざ面倒な方を選んで何が楽しいんだろうね
じゃあなんでwampじゃなくてxamppなんだ
いいんじゃない?自分が使ってるWeb鯖やアプリ鯖の設定について何も知らんでプログラミングしたいならそれで。 八割がた後になってハマるんだがw 必要になったらそのとき勉強する?はいはい。
まったくだ。 どんだけものぐさなんだよ。
>>870 馬鹿か?
駄目なやつは何を使っても駄目
ようは使う人の問題だろ
それにXAMPPは何も設定できないと思ってんのか?これだから低脳は
うんお前を見てよく分かるよ
>>866 おまえはそれらを買う時に、常に全部一緒に買えよな。
既存のPCいじるときには一緒に買ったりはしないが、新しいPCを作る時は一緒に買うわな。 勿論、「ディスプレイとマウスは既存のものを使いまわすから要らないや」という事はあるが、全部必要な事のほうが世間的には圧倒的に多い。 マウスだけ使いまわすなら、ワンセット買って来てマウスだけ取り替えた方が楽だしな。 つうか、むしろBTOに近い気がする。 組み立てが面倒なので、多少コストで損をする事を承知でDellに頼むわけだ。 1台だけなら自作するだろうが、100台必要だと分かっているなら自作する馬鹿はいない。 webフレームワークは10台くらいの、自分でやるか頼むかちょっと迷うなってラインか。
あれ、いつの間にかフレームワークの話に逸れた。何故だろう自分でも分からない。 後半は思いっきり忘れてくれ。 とりあえず、初心者に買わせるならメーカー品にするだろ?って話。
全てソースから自分でオプション決めてビルドしてインストールするから xamppなんて思いつきもしないな。 初心者ならそれから始めてもいいけど、何かあった時に誰かに聞くしか能がないから 決まった使い方しかできないみたいだな。
最近PHPスキル伸び悩んでるんだけど、 クラスやった事ないのでやったらいいですかね? PHPマスターはオブジェクト指向ですか?
伸び悩んでるっていうかそれって皆無じゃん
PHPってオブジェクト指向になったんだろ?5から。 オレもまだ4ばかり使ってるけど、クラスはボチボチ使い始めてる。
オブジェクトなにがしがよりよい制作手法ならやればいいさ よりよい制作手法を実現するための手段ならこだわる必要ない
>>879 データベースは使えるの?
オブジェクト指向はPHPで最初にやるべきではない。
不完全なPHPで最初にやると、
PHPが一般的で他の言語は特殊だという間違った認識が身につくよ。
用語なんかも一般的な他言語のものとは意味あいが違ったりするし。
postgreです。
CSSなども基本的は事はOK
オブジェクト思考自体初めてなので
>>883 な言った様な
偏った認識もしたくはないですが、PHPのオブジェクト指向ができれば
他の言語もとっつきやすいですよね?
PostgreSQLをpostgreと言う人は初心者だと思うが。 せめてpostgres
すいませんgoogle検索の癖です。 PHPとPosgreをいつもセットで使ってますからsqlはできます。
885じゃないけどポスグレって言わね? postgreは記憶ないけど
PHPの本アマゾンでみたけど、 次はステップはデザパタ?ぽいですね。
四の五の言わずにJAVAやれ やっつけ案件はPHP
>>894 ほとんど小規模だからJavaの出る幕はあまりない
>>889 マニュアルに明記されてるならいいじゃん
よくねえよw なんでオーバーロードなんて名前つけたのかアホとしか思えん
なんでよくないの?
統一性がなくなって混乱の元になるだけだろ PHPだけがこんな状態ならまだいいけど 他の言語がこぞってオーバーロードはこういう機能です! って別々な実装していったらどうなるんだ? 乗り換えに苦労するだろ
オーバードーズなら一目瞭然なんだけどね。 飯島愛の死体を見せれば。 「これがオーバードーズという状態です」って。
分かりました。 仕事でPHPやりながら家でJAVAかじります。
Javaは、先に設計をカッチリ決め、100%それに沿って開発するようなシチュエーション向きの言語。 100人↑が絡むような大規模案件はどの道仕様をカリカリにfixさせるので、Javaのような静的言語と相性がいい。 ただし、型でガチガチに固められるから、仕様変更に異常に弱いという欠点がある。 まあ、だからこそちょっとした仕様変更でも追加料金を請求できて、だからこそ儲かると言われるわけだが。 仕様がポンポン変わるようなアプリケーションには、動的言語のほうが向いている。 例えばPHPは、メソッドさえ同じならどんなオブジェクトを渡しても動くような関数が簡単に書ける。 Javaでこれをやるには専用のインターフェイス書かなきゃいけないし、新しい機能を実装すると過去のコードにまで変更が波及しがちになる。 趣味コードでJavaとか、考えるだけで恐ろしい。 仕事でPHPを使うことの次くらいにやりたくないな。
趣味でぼっち開発の俺には、簡単お手軽どこでも動いてゆるゆるのPHP君で十分です。
>仕様変更に異常に弱い それは設計モデル次第だ
>>904 一人で100人のキャラを演じながら開発しろよ
>905 比較の話だろ。 そりゃJavaだってアセンブラよりは変更に強かろうよ。
>>1 を読んで思い切って質問してみちゃいまう
tp://hiroqli.blogspot.com/2007/12/keepass.html
にphpと書かれていたのでここで質問するんですが
これを自分のPC上で実行したい場合どうすればいいんでしょう?
IDMというアプリでエクスポートされたCVSをKeepass用に変換できるもののようなんです
よろしくお願いします
910 :
908 :2009/03/01(日) 00:45:47 ID:???
>>909 XAMPPというのをインストールして
tp://www.phppro.jp/school/phpschool/vol1/4
のところまでやりましたがそこから先がさっぱり。。
初心者ならxamppはやめとけ
教科書読んでたら、 「exitは終了時にメッセージを発生しない」 って書いてあるけど、 自分で実際に試したら、メッセージを表示できるんだけど、 教科書が間違っている? <?php exit('hello'); ?>
「質問」の人?
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 = "実際に表示させたい内容"; ?>
>>915 なんか色々変・・・
設計を見直したほうがいいよ
素直にテンプレートエンジン使いなよ
>>916-917 変なのは分かっているのですが
設計を見直そうにもphpを初めて1週間なので
何をどうしたらベストなのか計画を立てることさえできません。
現状はwindowsにApacheとPHPを入れて
表示されるかどうかを確認するのが精いっぱいです。
ならまだそんなことやる段階ではないと思われ
php file_put_contentsの排他ロックは 全然ロックされてないって本当?
嘘
内部的にfopenするときにw+で 開いてしまっているので、ファイルの内容が空になる。 そんときに第三者から読み込みにこられると 空のファイルを渡す それからロックをかける こういう仕様なので、append以外では使えない。 こういう理解にしました。
ロックが必要なのはwriteのときでreadはいらんだろ
>>922 空のファイルが渡されるっていう現象を検証できるソースある?
試してみたい。
(1)w+でオープンする (2)w+なので、自動的にファイルの中味が空になる (3)第三者が読み込みにくる (4)空のファイルを渡す (5)ここでようやくロック発動 (6)第三者が空のファイルを戻しにくる (7)カウンタがぶっ壊れる
検証したの? 別な理由でカウンター壊れてんじゃないの? カウンターにfile_put_contentsって手抜き杉で笑えるから別なところにもバグありそうだけど
file_put_contentsって fopen -> fwrite -> fclose って3つの流れを自動でやってくれるんだけど、 この中の fopenが、どうもw+でオープンしてるらしい。 だとしたら、ファイルの中味は問答無用で オープン時に空になるよね。 だからappend以外では使えない。
マニュアル見るのめんどくさいからみてないけど
file_put_contentsも第三引数あたりでLOCK_EX使えるでしょ
>>927 該当ファイルを読み込んで修正してファイルを空にして全て書き出すのが基本
追記も便利だけどね
LOCK_EXが信用できるかできないかの話かsorry ソース見てみないとどうなってるかわからないな
検証してみたよ。
コマンドラインで
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は正しい。
つまり、まじめにカウンターを実装するなら、file_put_contentsでfalseが返ったら、 リトライするなりなんなり、自分で実装しなきゃいけない。 そこを、ミスったのをPHPの仕様漏れにしたがったってことじゃねぇか。
$count = 0; counter: try { カウンター書き込み } catch(Exception $e) { while($count <= 試行回数) { $count++; goto counter; } こんなんか?
http://yp.xenophy.com/?p=23 誰も信じて疑っていないのか、PHP5.1.0からサポートされたという、第3引数のLOCK_EXによる排他ロック
file_put_contents( $path, $string, LOCK_EX );
これ・・・・・排他ロック・・・・・・できてません。。。
JMeterの負荷テストにて実証済みです。
具体的にどうなるかというと、書き込み時にロックがかけられないので、
書き込み時に、読み込みが行われた場合は、「空」で取得されます。
うーん。空なのか。。。
くだすれだが、くだらないブログのつぶやきを信じるスレじゃないからな。 検証してねぇだろそのブログ主
<?php print M_SQRT2; ?> で、スクエアルートが表示できると聞いて、 さっそくいろいろ試してみたのだが、 これって結局、2と3しか対応してないのな。
BASIC認証でログアウトするのってどうすればいいの?
アクセスしてきたユーザーのIPアドレスを crypt、またはMD5,またはsha1等で 暗号化してIDとして表示したいのだが、 安全性はどんな感じか。
固定IPアドレス前提? 複号されたところでどうなる? 暗号IPとREMOTE_HOSTで照合するわけだよね? だとしたら生IPとREMOTE_HOSTで照合するのとほとんど変わらないと思うが・・
>>943 違う。
アクセスしてきたやつのIPを
暗号化関数にぶちこんで、IDを生成して、
「今、この人達が見にきてます」
って表示するの。
表示するためだけに使う程度のIDなら見に来てる人に名前入力させれば?
>>945 それをサニタイズして表示するのがめんどくさい
入力させない方がセキュリティは上がる
でも見に来てる人たちのIDの中に自分のIDも確認できたほうがちょっとうれしくないか? 文字のランダムな羅列よりも・・
セッションって、一回セットすると、 破棄するのがすっごくめんどうなんだね。 <?php session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); session_destroy(); } ?> こんなに書かないと消せないなんて、、、
簡単に消そうと思えばセッションファイルをunlinkするだけで事足りるだろ ブラウザ側のクッキーの扱いなんてしょせんサーバ側でコントロールなんてできないし
>>939 5.3からceilとかfloorをroundで代替できるようになるんだね
ログインしてる、していない、を 判別するにはどうしたらいいかな?
ブラウザを開いていたら、ログインしてる。 ブラウザを閉じたら、ログインしてない。 これでいいのかな?
ログインしている = ログイン後ログアウトしていない
ログインしたらセッションを生成、ログアウトしたらセッションを破棄。 セッションの最も一般的な使い方。 自分で実装するならこんな感じ。 1.ユーザーがログインフォームにパスとIDを打ち込む 2.リクエストを受けたサーバーは、パスワードを照合。 あってたら、ランダム文字列をクッキーとしてユーザーに送りつける。 同時に、この値とユーザーのIDをセットにしてどこかに保存しておく。 一番シンプルなのは、クッキーの値をファイル名にして、中にユーザーID書き込んでおくとか。 ((((((10年後)))))) 3.ユーザーがアクセス時にクッキーを送りつけてくるので、そのファイルを探す。 あったらそいつはログインしているユーザー。 ファイルの中身を読み、ユーザーのIDを(=ユーザーが誰かを)特定し、処理を続ける。 この「クッキーを発行し、クッキーを送りつける」「ファイルがあるか確認する」をやってくれるのがPHPのセッション。 ファイルの中身がセッション変数に当たる。
955 :
nobodyさん :2009/03/05(木) 00:53:07 ID:Rp65yYdP
FlashDevelopみたいな補完機能が超強力なphpエディタってない??
出席簿みたいのを作りたいんですよ。 ブラウザを開いている間は、出席している。 ブラウザを閉じたら、退席した。 こういうロジックで、セッションを使って実装するのは どうしたらいいですか? フォームにIDとパスワード入れてログインするとかじゃなくてです。 IPアドレスだけで実現したいのです。
セッションが存在したら出席, セッションが存在しなかったら退席 でいいんじゃないの?
958 :
nobodyさん :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
学習1ヶ月程度の初心者です、よろしくお願いします。 入門本に、header("location:url")のみでリダイレクトされた先のスクリプトで、 $_GET["キー"]で値をとれていますが、GET送信の場合は値を ?で付けていかなければ駄目ですよね? 送り元は自身にPOSTでは値を送っています。 そして送り元も送り先もセッションでは値を送受信していますが。
意味不明なのでもう一度書き直してくれ
その程度の話、意味がわかるように書けたら答え出るだろ。 質問のふりして、入門本に文句つけてるだけじゃね?
意味不明なのでもう一度書き直してくれ
おれも、自分で書いた後そう思ったw
<?php $a=0.97075300; $b=0.97083700; $c=$b-$a; print $c; ?> これを実行すると、 8.4E-5 とかって、出てきます。 Eとか不愉快なんで、ちゃんと数字で 結果を表示したいのですが、どうすればいいですか?
なんで下スレから移動してんの?
966 :
959 :2009/03/05(木) 11:27:28 ID:???
書き直します。 header("location:url")でリダイレクトされた先のスクリプト内では、 $_GET["キー"]で値をとれています。 しかしheader内のurlの後に「?キー=値」は付けていません。 GET送信で値を送る時にはURLの後に値を付け足すとしか知識がありません。 headerで送り出す元となるスクリプトでは自身にPOST送信してあるのみです。
GETは環境変数QUERY_STRINGだから処理しても変数値は消えない POSTは標準入力だから一度読み込み処理したらお終い
<?php $a=0.97075300; $b=0.97083700; $c=$b-$a; $d=sprintf("%.f", $c); print $d; ?> これを実行すると、 0.000084 ってなるんだけど、 0.000084秒 かかった、って理解でいいの?
マルチかコピペか、どっちにしても無意味。 質問になってないしw
またいつもの基地外君か
971 :
959 :2009/03/05(木) 13:57:59 ID:???
>>967 調べるキーワードを教えてもらって有難うございます。
>956 ブラウザを閉じた事を検知する手段は存在しない。 無理やりやるなら、JavaScriptで10秒おきとかにリクエストを送って、それが切れたらブラウザを閉じた、という事にするくらいかな。 問題は誰かを特定するほう。一般論を言うと、IPアドレスと、それが誰かを紐付ける手段は存在しない。 つうかそんなもんあったらプライバシー上の大問題になる。 学校とかのどのPCを誰が使うか決まっている環境で、固定IPならば可能かな。 俺なら初回アクセスの1回だけログインさせてクッキー(セッション)を発行し、以降はそれで個人識別する。 成りすましが問題にならない案件ならこれでじゅうぶん。1月ごとに再ログインさせる必要はあるが。 (寿命が一ヶ月以上のクッキーは発行できないため。技術的制約)
1年以上のクッキーも余裕で発行できるだろ?
再読み込みの際にわかればいい程度です。 セッションの存在を検知するには、 どの関数を使えばいい?
セッション変数
jpgraph が使えない なんで?
JpGraph Error: HTTP headers have already been sent ってなる
header関数でリダイレクトした時に、元のスクリプトに送ってたパラメータ (例えばテキストボックスで送った値)はそのままで、locationの値だけが変わるのですか?
>>980 GET値なら、変えて記述すれば変わる。
何もしなければ、リダイレクト先には渡らない。
>>982 fopenでもしてるの?
freadなりfgetsなりすればok
でもjavascriptの代入文のような気もするけど
phpでスクリプトを組んでいるんですけど、一般のフォームのファイル選択フォームで2MB以上のファイルをOPENしようとすると サーバーがエラーを出します。2MB未満だと問題ないのですが・・・ phpinfoを見ると post_max_size 8M 8M upload_max_filesize 10485760 8M にはなっています。 どうすれば2MB以上のファイルをアップロード出来るようになるのでしょうか?
サーバエラーのコード番号が重要だろwwwwww なぜ書かないwwww
エラーコードは出ずに、単純に「ページを表示できません。」のエラーが出るだけです。 ちなみにIEです。 Firefoxでやっても同じ結果でした。
pearのモジュールをインストールするときに、 -aオプションと、-oオプションとあるじゃん。 これってどう違うの?
-a, --alldeps install all required and optional dependencies 必須モジュールとオプションモジュールまとめて全部持ってくる -o, --onlyreqdeps install all required dependencies 必須モジールだけもってくる ってことじゃない? オプションモジュールが無ければ、どっちでもかまわないんだろうね
>>991 オプションモジュールってのは、
つけても、つけなくても、大差ないけど、
できればあったほうがいいモジュールって意味かな?
教科書でHTML_QuickFormってのを発見して、 試してみたら、すでに時代遅れで、 今は、HTML_QuickForm2になっているんだと。
セッションというのは、IPアドレスに対して 発行されるもの?
違うということだけ言っておく
セッションを取得して、IPを変えたら、 そのセッションはどうなるの?
どうもならん
NAT環境で別のPCが同じIPアドレスの場合のほうが気にならんか?
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。