【PHP】下らねぇ質問はID出して書き込みやがれ 85
質問者はまず
>>1 を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
次スレは
>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 84
http://pc11.2ch.net/test/read.cgi/php/1240835951/ ◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
いちおつ スパム行為目的と判断できる質問には原則答えませんと追記願う
> 4. 記号の意味がわからないけどググりようがない なんですが、&= ってなんですか?
論理積
えっ
なにそれこわい
>>8 マニュアルの代入演算子参照
$a &= $b
↓
$a = $a & $b
>>12 ありがとうございました。
+= とかですね。
モダン Perl 的に モダン PHP みたいのはありませんか。 認証や日本語処理、 セキュリティ対策はこうしとけ、みたいな。
暇人が纏めてくれたブログ記事を読む 何て手抜きをすると大嘘記事を真に受けたりするので素直にマニュアルを 隅から隅まで読んでみる
16 :
nobodyさん :2009/06/16(火) 19:14:46 ID:37ReaO1g
execメソッドなどでコマンドラインを使って、phpを実行したいのですが コマンドがされたときにだけ実行するようにしたいです。 どういった方法が普通なのでしょうか? ・apache関係でローカル以外からアクセスのときはエラー ・実行したいphpに簡単なパスワードフォームをつけて、コマンドラインで認証通す ・phpのファイル名を予想付かないような長い名前にしたり、そういった名のフォルダに入れる これらを全部組み合わせてもいいのですが、 特に二番目の認証のあるものだと、コマンドで実行したい以外にも利用できてうれしいのですが 例えばpostメソッドでパスワードフォームを作っているとき、○○.phpに接続はできても exec(コマンドライン)だけで、postができるのかよくわかりません。 なのでapacheで接続されないようにするのと、ファイル名も個性的名ものにしようと思うのですが もっと賢い方法はありますでしょうか よろしくお願いします。
17 :
nobodyさん :2009/06/16(火) 19:16:32 ID:37ReaO1g
windowsとlinux両方か、今試せるのがwindowsだけなので windowsのコマンドだけでもよろしくお願いいたします
>>16 言いたいことが俺にはよくわからん。
わかりやすく書き直すか、16が理解できるスーパーな人が来るまで待て
せっかくだからエスパーしてみる。 要するに、実行中のphpからさらに別のphpを実行したいんだろ? 違うなら日本語でおkとしか言えない
20 :
nobodyさん :2009/06/16(火) 19:55:46 ID:q26JNoUY
mysql_num_rows()って、該当する行がない場合-1を返すんじゃなかったですっけ? 勘違いかな?? サンプルつくってみたところ、-1も0も返さないんだけど以前-1が返ってきた気がするので 念のため聞きました。下質ですがひとことアドバイスお願いします
21 :
nobodyさん :2009/06/16(火) 21:25:50 ID:37ReaO1g
>>18-19 すいません、じぶんで見直してもわかりにくかったです
実行と適当に言ってしまいました。
>要するに、実行中のphpからさらに別のphpを実行したいんだろ
そんなかんじです。phpを実行して、このphpの中の処理にも手を加えたいという感じです。
test.php
<?php
echo <form method='post' action='text.php'〜〜
.<input type='text' 〜〜〜
.<input type='submit'〜〜</form>的な入力フォームがある
入力フォームからpostされた値が正しければ、
以降処理をする。値が間違っていればここで処理終わり、以降何もできない。
?>
これを普通にブラウザで表示すれば、textに入力してsubmitおして、という流れ
なのですが、これをexecで外部ファイルとして開くときに、formの処理もしてみたいのです。
別のツールを組み合わせればpostを飛ばせるのもわかったのですが、
レンタル鯖などでも汎用性の高い方法でできるのならやってみたいということです。
できなければform無しphpを別に作ろうかなと思います
>>20 マニュアル
>>21 Pear::HTTP_Requestでも使えばいいんじゃない?
>>14 フレームワークを使ったほうがいいんじゃね
24 :
21 :2009/06/17(水) 10:01:40 ID:???
>>22 ありがとうございます
さっそくやってみて、postさせることができました。
require_once 'HTTP/Request.php';
$req = new HTTP_Request( "URL" , array( "timeout"=>2 ) );
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData( "key" , "pass1" );
$req->addPostData( "key2" , "pass2" );
$req->sendRequest();
という風にしてみたのですが、sendRequestだと、
ttp://sandman.s6.xrea.com/nucleus/index.php?itemid=48 にも書いてあるように、送った先の処理が終わるまで、こちらは待っていなければならないみたいなのです。
sendだけするようなものはないのでしょうか・・
もしくはsendして数秒たってから、Requestをまたずに中断して先に進めるようにしたいのですが・・
もう少し勉強してみますありがとうございました。
>>8-13 の便乗ですが
$this->foo =& bar();
の =& はなんでしょうか。
>>25 $this->foo = &bar();のほうが見やすいかな。
参照渡し。
27 :
21 :2009/06/17(水) 10:12:24 ID:???
度々すいません。 さきしらべていたら、timeoutのところをreadtimeoutでできました・・ ありがとうございました。
28 :
25 :2009/06/17(水) 10:18:12 ID:???
29 :
nobodyさん :2009/06/17(水) 11:22:30 ID:PMErRJxc
こんにちは、変数について質問です クラスを使わない場合で function hoge() { $name = $_POST[ "form_name" ]; } function mail() { $_hogehoge = mb_substr( $name .............. } ユーザー関数間で、変数を取り扱うにはどうしたらいいのでしょうか? globalはユーザー関数の外で有効ですよね? $_POSTを使い回せば良いとは思いますが 任意の変数名に入れて持ちまわすことは出来ないのでしょうか?
>>29 globalを使うと保守性が悪いので、引数に渡せばいいのでは?
function hoge($name)
途中で送信されてもうた。 function hoge(){ $name = $_POST[ "form_name" ]; return $name } function mail($name){ $_hogehoge = mb_substr( $name..... } //main $name = hoge(); mail($name);
32 :
nobodyさん :2009/06/17(水) 14:09:24 ID:QWeUGdqP
>>32 「PHP」を「勉強」したらよいです
自分でやってどうしても出来ない分からないところだけここで人に聞きなさい
「読めないからかわりに読んで」なんてのは論外です
>>32 お前の質問はくだらない以前にクズ質問だ。
1年間ソースコード凝視してからもう一度質問しろ。
説教厨はどっかいけ。 そうやって空気悪くなって過疎って行ったスレだらけじゃねーか。 答えたい奴だけが答える、答えたくない奴はスルー、それが出来ない奴はこのスレに2度と書き込むな。
なんじゃこいつら
39 :
32 :2009/06/17(水) 16:01:36 ID:???
すいませんでした とりけします
そもそも、スレ違いだからしょうがないわ
41 :
nobodyさん :2009/06/17(水) 17:24:45 ID:tSVJeFRV
PHP関係あんの?
44 :
nobodyさん :2009/06/17(水) 22:42:05 ID:7VboH98i
だれか助けて mysql5で mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | eucjpms | | character_set_connection | eucjpms | | character_set_database | eucjpms | | character_set_filesystem | binary | | character_set_results | eucjpms | | character_set_server | eucjpms | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) でちゃんとEUCになっていると思うんだけど phpから mysql_client_encoding() ってしたらlatin1ってかえってくるの・・・ my.cnfにもいたるところにeucjpmsってかいたのに。 もう3日も悩んでいるので、助けてほしい・・・
>>44 MySql良く知らんが、
>character_set_system | utf8
のままだよ。
また、
http://jp.php.net/manual/ja/function.mysql-client-encoding.php のコメント欄に、
> if you think "set names utf8" for each connection is too
> trouble, you can modify my.cnf of MySQL to solve the problem
> forever. In my.cnf, add the line "default-character-set=utf8"
> in both [mysqld] and [client] sections:
>
> [client]
> default-character-set=utf8
> [mysqld]
> default-character-set=utf8
> The MySQL will use utf8 after you restart it.
って、書かれてるけど試してみた?
>>44 skip-character-set-client-handshake
>>43 だろうね。
三点リーダーの使い所もおかしいし。
高校でレポートとか小論文ぐらい書かされなかったのかな。
学校で習わなくてもビジネス文書の書き方は入社時に叩き込まれるはずなんだが。
49 :
44 :2009/06/18(木) 08:29:04 ID:+GbpfhSz
>>46 ありがとう
utf-8にしてもダメだったんだ
>>47 [mysqld]には
default-character-set = eucjpms
skip-character-set-client-handshake
init-connect=SET NAMES eucjpms
って入れてるんだけどなぁ。
mysql_client_encoding()がなんでlatin1になるんだろう
その値はエンコーディングを指定してmysqlをソースからコンパイルしないと変更されないと思うよ。 それかPHP内でmysql_set_charsetを使用するか でも実際には今の設定で文字コードがらみは問題ないと思うけど、文字化けとかするの?
51 :
44 :2009/06/18(木) 11:43:41 ID:+GbpfhSz
そうなんですか。 おっしゃる通りphp内でコネクトするたびに mysql_set_charset("eucjpms"); ってすると化けません。 しないと???となって化けてしまうんです。 化けるってことは何か設定がおかしいのかな?と思いまして
>>49 show variablesはシステムの設定ってだけ。
文字コードはテーブル毎や、カラム毎に設定できるので
そっちがlatinになってるだけだと思う。
SHOW CHARACTER SET
とかでググるとよいと思う。
53 :
44 :2009/06/18(木) 12:30:55 ID:+GbpfhSz
ヒントありがとうございます! 結局 ALTER TABLE hoge.hogehoge DEFAULT CHARACTER SET eucjpms; ってすると化けなくなりました。 …ということはこれは、すべてのテーブルに対してしなきゃいけないってことですね。 そもそも、my.cnfでEUCで指定してたから大丈夫だと思ってたんですけど、 実は、そうではなかったということでしょうか。
普通DB作る時に指定しないか?
55 :
nobodyさん :2009/06/18(木) 13:37:45 ID:gqLHvinH
create databaseでデフォルトキャラセット指定したんだけど ダメだったんすよ しかもmy.cnfに指定してるから大丈夫だとタカを くくってしまってました。
PostgreSQL なら日本語簡単
58 :
44 :2009/06/18(木) 20:38:57 ID:+GbpfhSz
みなさんありがとうございます。 おかげで解決できました。
59 :
nobodyさん :2009/06/19(金) 01:53:03 ID:h2rW+CLw
スミマセン、超基本の質問ですがよく使う関数って外部化してincludeして利用してますか? <?php function fc1(){} function fc2(){} function fc3(){} ?> て感じで そういう例をマニュアル本で見たことないので、何となくClassの体裁をとって外部化したものの クラスにする理由がない代物を作ってしまったことがあります あと、クラスと関数の違いって値を保持できるかどうかってだけなんでしょうか? あるサイトを見るとそう書いてあったんですがそれだけじゃ今イチありがたみがないというか。。
オブジェクト指向設計を実装するのがオブジェクト指向プログラミング
継承とか全くしないしそもそも1個しかクラス使わないようなコードでも 何となく格好良く見えるのがオブジェクト指向プログラミング
62 :
59 :2009/06/19(金) 03:01:01 ID:h2rW+CLw
>>60-61 ありがとうございます
難しいなあ、クラスの使い方ですが
例えば同じDBから同じユーザとパスワードで、複数のテーブル固有の情報を引き出すのに、
DB設定に必須の部分(ユーザ名とパスワードなど)をメンバ変数としてもたせて、
「個別の情報を引き出す処理」をそれぞれ専用のメソッドとして動かせば良いんでしょうか?
Class GetData{
var $db = ****;
var $userName = ****;
var $password = ****;
function __construct(){
//DBに接続処理
}
function getInfo1(){
//個別の情報1を取得する
}
function getInfo2(){
//個別の情報2を取得する
}
}
こんな感じでしょうか。
こんな例だと重複する処理を省けるくらいしか単独のfunction関数と比べたメリットない気が…
やり込んだらわかるんですかねー
先にJavaやったら?
64 :
59 :2009/06/19(金) 03:14:48 ID:h2rW+CLw
javaってオブジェクト指向が厳密で良いらしいですね 本読むだけでも読んでみようかなぁ
1000行ほどの会員情報ファイル(会員ID,メールアドレス,ポイント数\n という書式)から会員IDの一致する行を取り出したいのですが 情報の抜き出しに時間がかかっています。 for () { array_mapで会員IDのみにしてarray_searchやin_arrayなども試してみましたが相変わらずで訳あってDBも使えないので困っています。 何か良い方法は無いものでしょうか?
66 :
nobodyさん :2009/06/19(金) 05:15:41 ID:1u+RZNQN
すいません、
>>65 は途中で送信してしまいました。
コードは以下の通りです。
$mfile = file("id.dat");
$count = count($mfile);
for($i=0;$i<$count;$i++)
{
if($id == substr($mfile[$i], 0, 10)){
$data = $mfile[$i];
break;
}
}
>>65 $fp = fopen("id.dat", "r");
while (!feof($fp))
{
$line = fgets($fp, 1024);
if (strstr($line, $id) === 0) {
break;
}
}
fclose($fp);
echo $line;
早くなるかしらないけど。
なぜstrstr? >haystack の中で needle が最初に現れる場所から文字列の終わりまでを返します。 しかも >注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。
69 :
nobodyさん :2009/06/19(金) 09:35:21 ID:jp3LKqpN
【OS名】XP
【PHPのバージョン】php4
【連携ソフトウェア】oracle
【質問内容】
http://www.spencernetwork.org/memo/tips-5.php を参考にボタンを押してダウンロードする処理を作成しました。
ダウンロードは行えるのですが、その後に何か処理をしようとすると
HTMLがくずれて?ソースだけが表示されるようになります。
表示されたソースは 処理前のHTM L+ 処理後のHTML になって
いるようです。
おそらく最上記の処理内でHTTPヘッダをいじくってるので
その関連だとは思うのですがどうもうまく行きません。
回避策をご教授願えますでしょうか?
そんなの参考にするのはやめれ ファイルに/etc/passwdとか指定される恐れあるから結局指定されたファイルのチェックを自前で書く必要がるし
71 :
69 :2009/06/19(金) 10:46:30 ID:jp3LKqpN
>>70 そうですか・・。
全く素人なのでどういったものが参考になるか分からないです。
なにかよい方法はありますか?
>>70 このfunctionに渡すファイル名をどう扱うは考えないといけないけど。
このfunction自体は問題ないだろ?
74 :
69 :2009/06/19(金) 17:45:11 ID:jp3LKqpN
ブツをどっかにうpって添削してもらえ
76 :
nobodyさん :2009/06/19(金) 17:57:33 ID:dM+wXKpC
何が原因かわからずたまにFirefoxで、 「自動転送設定がループしている」 のようなメッセージが出るのですが、これは何が原因なのでしょうか? 一度前の画面に戻って再度リクエストすれば元に戻っていたりもします。
>>74 レスがつかないのは情報が少ないから
何をやりたいのかもうちょっと具体的に書いてよ
>>69 というかダウンロードさせて、その後にhtml出力しても無理
ダウンロードファイルの一部になる
>>62 >こんな例だと重複する処理を省けるくらいしか単独のfunction関数と比べたメリットない気が…
そのクラスを使う人が、「$dbとか$userNameっていうのを意識しなくてもいい」
っていうのはどうだろう。
var → private
にするとどうなるか、って考えてみるとか。
。。。一回作って終わりっていうんなら、あんまりメリットは感じないかもね。
そのクラスを使いまわしたりするようになるとなんとなく納得するかもしれない。
>76 文字通りの意味。header()とかで何度も同じページにリダイレクトするとそうなる。 FirefoxにLiveHttpHeader拡張でも入れてアレコレ試してみたら?
>>62 クラスとかオブジェクト指向ってのはいわゆる整理整頓みたいな事だし
感覚としてはそんな感じじゃないかな
一言で言うとメンテのしやすさかね。
ステップ数が膨大になってきても
$user->getInfo();
$article->getInfo();
みたいにシンプルな命名ができるし
$a = new Hoge();
$a = new Hage();
と違う2つのクラスがあっても呼び出すところでは
$a->getInfo();
と、重複する処理をfunctionにまとめたように、インスタンス化すれば
呼び出す所の処理の重複もまとめられるわけ。いわゆるポリモーフィズム
あとは、
>>79 の言う private とかでクラス外に存在を隠せるということ。
privateなメンバーはクラス内だけのグローバル変数的な扱いもできるし
クラス内からしか呼ばれないという保証があるので
変更が加わる際でも調査する手間がかかりにくい。
実装を隠蔽することで責任の所在も明確になるからバグがあっても
原因を特定しやすい。
デメリットはクラス数が増えてIDEがないとしんどいとかかな。
と、うちの一年生に説明する練習。
一言以外で言うと?
一言以外っつってんだろーがカス
>>84 この状況の中、政府自民党は外交的になすすべなく、
しかも、景気を冷ます増税路線を打ち出しています。
かたや、民主党は、北朝鮮を増長させるだけの「友愛外交」を主張し、
経済に関しても将来の増税が避けられないバラマキ政策を打ち出しています。
86 :
nobodyさん :2009/06/20(土) 15:02:26 ID:9LLAIagy
sql文でそのデータベースにある全てのテーブルを削除することってできますでしょうか? データベースの中を空にしたいです。 やはり検索してからphpで文を組み合わせてdrop table テーブル1,テーブル2,・・ という具合にしなければいけないですかね。おねがいします
drop database hogeやってからcreate database hoge
88 :
nobodyさん :2009/06/20(土) 16:10:09 ID:9LLAIagy
>>87 すいません書き忘れてしまいました
レンタル鯖でdrop databaseが禁止されていてその方法が使えなかったんです・・
create databaseもむりでした。drop tableだけはいけました
じゃ show tables してそれぞれdropすればいいじゃん
90 :
nobodyさん :2009/06/20(土) 16:56:06 ID:9LLAIagy
>>89 それでいけそうです
やってみます
ありがとうござました
誰か知ってる人いませんか?
今Linux上でphp5.2.5をインストールして下記のように記述してます。
$rssurl = "
http://dailynews.yahoo.co.jp/fc/rss.xml ";
$rssdata = simplexml_load_file($rssurl);
print convert($rssdata->channel->title);
でも、simplexml_load_fileの部分で
Fatal error: Call to undefined function simplexml_load_file()がでます。
PHP5だとsimplexml_load_file()が使えるはずなんですけど
なんで呼べないのかわからない状態です。
知ってる人いませんか?
ロードして無いからじゃ?
93 :
nobodyさん :2009/06/21(日) 19:30:41 ID:eYkB7H28
質問です。 phpの関数名や引数に「&」を付けているのを見かけたのですが、 これはどのような意味なのでしょうか? function &fetch( ObjectFetcher &$objects); ご教授下さいm(__)m
おれのヘタな説明よりもマニュアル読むことおすすめする
参照渡し
96 :
nobodyさん :2009/06/22(月) 16:45:51 ID:HPmTjla5
【OS名】Fedora Core 8
【PHPのバージョン】php5.26
【質問内容】
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20080508/301027/ にあるコードを使って
同じ内容のメールを返させるのとファイルに保存するようなのを書き足したPHPファイルをつくったんですけど
メールが返ってくるところまではうまくいったんですけど(内容もちゃんと)
ファイルに保存がうまくいきません
mail($mail_address,,$diary_subject,$diary_body);
write("dat/test.dat",array($diary_subject,$diary_body));
------------------------------------------------
function write($filename, $input)
{
$input=serialize($input);
$fp=fopen($filename,"w");
flock($fp, LOCK_EX);
fputs($fp, $input);
flock($fp, LOCK_UN);
fclose($fp);
}
ちゃんとdatはchmod 733してあります。
何が原因になりそうでしょうか?
dat/test.datをフルパスにしてみそ
98 :
nobodyさん :2009/06/22(月) 16:57:00 ID:HPmTjla5
>>97 でけたw アリガト♪
けど、なぜフルパスなのかがわからん(´ェ`)
その関数のファイル置いてある場所が違うんでしょ
いや 全部一緒のところにまとめました。
じゃ何てエラーが出るの?
102 :
97 :2009/06/22(月) 18:17:23 ID:???
恐らくだけど、メール処理時にPHPスクリプトを起動させてるユーザってのが別にいて、 そのユーザのホームディレクトリから見てdat/test.datに書き出す処理をしている
その場合、フルパスで書く、って以外の 対処法は無いの?
104 :
97 :2009/06/22(月) 20:20:25 ID:???
chdir()で予め移動しておけば相対パスでも当然いける はず
105 :
nobodyさん :2009/06/22(月) 20:26:05 ID:EjMUz/ox
どなたか助けてください。 微々たるもんですが、Perlを少しいじった事があったので PHPの勉強の為、Perl→PHPへ移行しています。 で、その中でどうしても分からない部分がありましたので質問させて頂きます。 read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); このPerlをPHPに変換するとどうなるのでしょうか? お手数ですがよろしくお願いいたします。
106 :
nobodyさん :2009/06/22(月) 20:38:05 ID:HPmTjla5
>>101 /etc/aliasesに書いたコマンドラインのエラーメッセージを
ファイルに出力させようとしたけどなんかうまくいきませんでした
(foo: "| /usr/bin/php /home/foo/mail.php >/tmp/error.log")
ので、エラーがなんなのかわかりませんでした><
>>102 そうみたいですね
メールでgetcwdの結果を返させたら
/var/spool/postfixになってました。
で、違う問題が浮上したんですけどよろしいですか?
これで作ったファイル(test.dat)の所有者・所属グループがnobdy nobodyになってるんですけど
これってどうやったら設定返れますか?><
(たぶん、自分が聞いてるのはaliasesで設定したコマンドを実行してるユーザーは誰なのか?)
自分がしたいのはapacheが作ったファイルに メールででも書き足しできるようにしたいんですが。
107 :
nobodyさん :2009/06/22(月) 20:41:07 ID:HPmTjla5
あ、そっかそのファイルにchmodさせてotherもwrite可能にすればいいんでしたね><
108 :
96 :2009/06/22(月) 21:09:32 ID:???
やっぱり 所有者がnobodyってのが問題>< これってどうにかできないですかね?
>>104 なるほどね
chdirってそういう時に使うんだ。
教科書では見たが、使い道がわからなかった。
112 :
97 :2009/06/22(月) 21:42:50 ID:???
>>108 nobodyユーザでchmod("/path/to/file", 0777);を実行させればできると思う
>>105 URLデコードはPHPでは自動でしてくれるから$_POST['key']みたいにアクセスできる
113 :
nobodyさん :2009/06/22(月) 22:36:12 ID:iiTIgfBL
91だけども 誰か解決策わかる人いませんか? 92>> ロードしてないからって何をロードです? できれば具体的な方法を教えて頂けると助かります。
114 :
nobodyさん :2009/06/22(月) 22:37:21 ID:JP1gh/Oz
PHPプログラムでMySQLのデータを処理、前と次のページ の送りボタンを作成したいんですが、どう作ればいいのでしょうか。 答えのサイトどっかしりませんか。 例では、35件データがあった場合 最初の画面が20件、次は15件表示されます。 pearありとなしで作り方お願いします。
goto 宿題スレ
117 :
105 :2009/06/22(月) 23:00:28 ID:EjMUz/ox
>>112 早速ありがとうございます。
ちなみに質問方法が悪かったですね。
$_POST['key']のkeyにあたる部分の数が多い、または決まっていないなどで指示できないのです。
で、たとえば$_GET['key']のkeyが不確かな場合は
$_SERVER["QUERY_STRING"];でクエリから抽出すればいいのですが
POSTの場合はどうすればいいのかなぁ?と思い
質問させていただきました。
お手数ですが再度、よろしくお願いいたします。
foreach ($_POST as $value) { echo $value; }
119 :
105 :2009/06/22(月) 23:18:00 ID:EjMUz/ox
>>118 ありがとうございます!
無事にできました。
また何か分からない事がありましたらよろしくお願いいたします。
本当にありがとうございました。
>>118 そんなコード書いてだいじょうぶなの?
見たことないんだけど。
えっ
$_POSTは単なる配列に過ぎないから、関数に引数として丸ごと渡そうがforeach()で回そうが普通に動く。
foreach ($_POST as $value) { echo $value; } まじですかwwwww こんなの初めて見ました
アップデート時の質問 サーバー1台で運用中で、できるだけダウンタイムを短くしたいと思ってます。 ・configure ・make ・make test (一応) ・httpd stop ・make install ・httpd start こんな感じかと思ってますがどうでしょう
echo '<p>メンテナンス時間は1時間を予定しております</p>';
128 :
105 :2009/06/23(火) 01:59:17 ID:eAPItn6A
>>124 私もです。
調べても分からない事は、素直に聞くべきですね。
本当に勉強になりました。
130 :
nobodyさん :2009/06/23(火) 05:20:28 ID:fbX2StFR
inc.phpに $hoge = "abc";など複数の変数や定数が定義されてて、 それを別の.php内のクラスの中で読み込むとします class myClass{ require 'inc.php'; } ここで、このクラス内に読み込まれた変数・定数にprivate属性?を設定するには どうしたらいいですか? DBの接続情報などが書いてあるので、インスタンスから見られる可能性は消したいんです 考え方がおかしかったら、それについても一言もらえると嬉しいです。
>>118 を見て驚いてるって、foreachを初めて見たってことか!?
133 :
nobodyさん :2009/06/23(火) 10:57:26 ID:hM5iLPbb
リンクに自動的にセッションIDを付加する設定にしているのですが、
http:// 〜の場合は付加してくれません。(たぶん、外部リンクへの配慮かと思うが・・・)
SSL通信をはさむ場合、セッションIDは手動で付加するべきなのでしょうか
foreach ($_POST as $key=>$value) { echo htmlspecialchars($value, ENT_QUOTES); } しないとセキュリティホールになるよ。
135 :
nobodyさん :2009/06/23(火) 12:24:13 ID:26Ndjc+C
php暦2日だけど質問してよか? 【OS名】CENTOS 【PHPのバージョン】わかんね、4.xだと思う 【連携ソフトウェア】mysql 【質問内容】 テーブルAにはお店のIDとお店の名前とか、テーブルBにはお店のIDと販売アイテムとかが入ってる んで $test = "SELECT `SHOPID`, `ITEMS`, FROM `TABLEB` "; $test2 = mysql_query($test); $test3 = mysql_fetch_assoc($test2); echo $test3['SHOPID']; って書くと当然1とか2とかで表示されちゃう これをテーブルAを参照してお店の名前を表示したいんだけどどうすればいい?
136 :
135 :2009/06/23(火) 12:25:59 ID:26Ndjc+C
あぁ、一番上にあったから書き込んだけど初心者向けのスレあったのかすまんこ マルチするわけにもいかないんで多めに見てくだしあ
SQLはココじゃないしな SELECT a.shopid,a.shopname,b.items FROM tablea AS a,tableb AS b WHERE a.shopid = b.shopid
結合使え
今からやるなら PHP5 使え
でっお花屋さんでも開くの?
141 :
nobodyさん :2009/06/23(火) 14:25:30 ID:hM5iLPbb
PHP5.3つかえ
142 :
135 :2009/06/23(火) 14:47:09 ID:26Ndjc+C
$obj = &Log::factory();
144 :
143 :2009/06/23(火) 18:53:44 ID:w/0G3XQg
143は途中で書き込んでしまいました。 質問なんですが、クラスのインスタンス生成時、 $obj = &Log::factory(); $obj =& Log::factory(); アンパサンドの位置が異なることで処理はどのように変わるんでしょうか? 同じですか?
145 :
nobodyさん :2009/06/23(火) 21:31:14 ID:KCXdMJjN
HTMLソースを改行コードをすべて<br/>に変換してDBにぶち込んであります. これを取り出す際に<pre>〜</pre>の中身を\nに戻して取り出したいです. <pre>〜</pre>が複数ある場合や,入れ子になってる場合にも使える方法ありませんか? よろしくお願いします.
変換しないべき
regex
preが入れ子って、確かHTML的にダメだろ。 面倒くせえから、丸ごとDOMにぶち込んでXPathで処理。
149 :
nobodyさん :2009/06/24(水) 00:21:17 ID:QqjFg27f
入れ子の内側<pre>を外す処理をする必要があるな
150 :
nobodyさん :2009/06/24(水) 02:58:42 ID:O6/z8sKK
phpの入門書に書いてある奴をそのまま写したつもりなのに上手くいかないです <html> <head> <title>PHP TEST</title> </head> <body> <?php echo"<p>Hello World</p>"; ?> </body> </html> って書いたのですが、IEで開くと Hello World "; ?> と表示されます アドバイスください
151 :
105 :2009/06/24(水) 02:58:57 ID:21wDpb5Z
>>134 なるほど。
特殊文字を変換しないと直接入力されたら、そのまま命令を実行されてしまうのですね。
親切にありがとうございます。
また、何かありましたらよろしくお願いいたします。
152 :
nobodyさん :2009/06/24(水) 03:10:23 ID:QqjFg27f
よくあるパターンだ サーバーがPHPとして認識してないんだよ ファイルの拡張子を確認 .php ファイル名が正常ならサーバーに問題がある
153 :
nobodyさん :2009/06/24(水) 03:22:07 ID:O6/z8sKK
>>152 サーバーに使うのとは別のPCで作っているのでサーバーを介さずにその場で開いてます
とりあえず動作確認だけしたいのですがどうすればいいのでしょうか?
154 :
nobodyさん :2009/06/24(水) 03:29:08 ID:QqjFg27f
{ ?> フリーのスクリプトで という書き方をよくみるんですがこれはどういうことなんでしょうか? 例えば <?php if ($page == 'unko') { echo "test"; ?> <a href="index.php" class="text">Images</a> <?php } else { echo "bgcolor=\"#0099FF\""; ?>> <a href="<?php if ($page == 'chinkof') {?>../<?php } ?> のように。 <?php } ?> はヒアドキュメント末尾のような意図でつかわれているのでしょうか? エラーは返さないようなのですが。
重ねて質問なんですが、 SQLのクエリや、ヒアドキュメントで $var を {$var} にしているのを見るんですが、 これをしないとエラーになるんでしょうか? SQLクエリの中でも $var のままだったりするコードもよく見るんですが、 {$var} と $var をどのように使い分けているんでしょうか?
質問でunkoとか例示する人って・・・
>>155 <?php と ?> の間は PHP と解釈され、それ以外は HTML と解釈される。
>>156 配列の場合は {} が必要。
変数の場合は必要ないけど、
統一のためや、見やすくするために {} を使う人いるね。
配列は変数じゃないと?
160 :
nobodyさん :2009/06/24(水) 14:40:53 ID:XDFiYdla
>>158 さん
ありがとうございます。勉強になります
<? ?> 内でステートメントが完結していなくても
問題ないんですね
ステートメントが寸断されてたらそりゃ問題あるよ 問題ないのはブロックだろ
MacとWindowsを識別して別のページに飛ばすことって可能ですか? 携帯・PCは識別出来たんですが、OSの識別はぐぐっても出てこない。 見落としてたらすんません。誰かご教授お願いします。
UAでわからなかったっけ? Mac?Windows?みたいに質問するって方法もある あとやったことないけどJavaScriptで改行コード"\n"を展開させてそれを受信してみるとか。。
>>163-164 ありがとう!
WindowsかWindowsじゃないかで、やってみようと思います。
166 :
nobodyさん :2009/06/24(水) 18:54:57 ID:O6/z8sKK
>>154 ローカル環境という言葉自体をはじめて聞きました
ググってみたのですが、説明が抽象的でよくわかりませんでした
ローカル環境を構築したPCはサーバーになるということですか?
だとしたらサーバーにしないで動作確認だけする方法はありますか?
ずれた質問をしてるかもしれませんがご教示願います
まず「ローカル」と「サーバ」の違いを理解したほうがいいよ Webアプリケーション製作の基礎中の基礎。っていうか根本概念。 プログラム書くのはまだ早すぎる。
$lastという変数をvar_dumpしたところ string(1) " " と返ってきました これは変数に半角空白が入ってると 思い if($last == ' ')echo 'true'; と書いてみたのですがtrueが帰ってきません string(1) " "をもっと詳しく調べる方法はないでしょうか?
ord()
どうせ改行コードだろう
171 :
nobodyさん :2009/06/24(水) 21:13:51 ID:O6/z8sKK
>>167 ローカルはオフラインのこと
サーバーはオンラインでデータをやり取りするためのもの
・・・と解釈してるのですが間違ってますか?
172 :
sage :2009/06/24(水) 22:24:39 ID:QqjFg27f
Apache と php のインストール
176 :
nobodyさん :2009/06/25(木) 00:57:46 ID:Niw+Ve6P
【OS名】XP 【PHPのバージョン】php5.2 【質問内容】 HTMLでinputボタンを下記のように6個作ってあります。 A0 B0 A1 B1 A2 B2 A0のボタンが押された後、B0のボタンが押されたら「1」 A0のボタンが押された後、B1のボタンが押されたら「2」 と言うようにボタンの組み合わせによって数値を作り 3桁のパスワードを作る画面を作りたいと思っているのですが、 PHP1日目故、どこをどう作っていいのか分からず途方にくれています。 何かヒントでも頂ければと思い書き込みさせてもらいました。 レス頂ければ幸いです。
パチスロでも作ってんの?
>>176 要は3桁の数字をボタンで入力させて、サーバーに送ればいいんでしょ?
それだったらJavascript使って、ボタン押した時にhiddenなinputに一桁ずつ入れて、三桁目が入ったらphpファイルにpostすればいいんじゃない?
でもパスワード入れる画面なら、普通にinput type=textのほうが操作性いいと思うよ!
179 :
nobodyさん :2009/06/25(木) 02:31:59 ID:Niw+Ve6P
>>177 パチスロではないです。課題で出された問題なんです。
>>178 そうです。ボタンの組み合わせで3桁の数値を作って111の様なパスを設定し、
それをログイン画面の入力欄に入力されたパスワードと比較して、
正しければOKのページ、間違いならエラーメッセージと言うような
処理にしたいと思っています。
Javascriptで上記が満たせる処理が作れるんでしょうか?
色々調べてみようと思います。
>>179 これってPHPの課題?
画面の遷移無しでって話ならjs使わないと無理だろ。
画面の遷移ありならPHPだけで出来るけど。
どうせなら課題の問題全部伝えないと答え出ないよw
>>179 >>180 の言う通りでPHPで実現するにはどうしても画面遷移が必要だし、そうするメリットは何もない。
だから数字の入力と、サーバーに送る動きは別物で考えるべき。
前者はJSで、後者はPHPでやればいいよ。
暇だから書いてあげるよ!課題は?
本人のためにならんことを
183 :
nobodyさん :2009/06/25(木) 06:41:54 ID:HSbLKHIx
>>180 PHPの課題です。
画面の遷移の有無でも違いがあるんですね。
知りませんでした。
>>181 >>176 で書いた処理を使ってパスワードを設定した後、
そのパスワードをどこかに保持した状態でログイン画面に遷移します。
ログイン画面から入力されたパスワードと設定したパスワードを比較して、
正しければOKのページ、エラーならメッセージの表示と言う風に
処理を分岐させたいと考えています。
javascriptとPHPを上手く使わないといけないのですね。
奥が深いです。
184 :
sage :2009/06/25(木) 07:29:23 ID:utUUg4I/
関数の前に & がつくのは、つかないのと何が違うのでしょうか? function &test() { } function test() { }
>>186 ありがとうございます。
変数のリファレンスは分かった気がします。
関数のリファレンスは
どんなときに使うと便利か誰か教えてくれませんか。
関数の返り値を参照にしたい場合だよ だから変数と同じ
>>188 ありがとうございます。
どういう時に返り値が参照渡しだといいのでしょうか。
だから変数が参照渡しだと嬉しいときと同じ
変数も分かった気がするだけなので(^^;; どういう時かよく分からんのです。。。
動けばいいっちゃ
誰か具体例教えてくださーい
たい焼きの作り方かな?
まずは、たい焼きくんを釣る
SQLクエリに対して何もヒットしなかった場合を判別したいときって、sqlite_num_rows()で 行数を見るしか方法無い? sqlite_queryの結果ハンドルがFALSEを返すかと思ったけど、よく読むとクエリが失敗した 場合にFALSEを返すので使えない。 今はこんな風に書いているけど、何かこう美しくないというかもっとスマートな方法が あるような気がする。 $sql = "SELECT ...."; $res = sqlite_query($db_con, $sql); if (sqlite_num_rows($res) == 0) { //0件の時はSQL投げ直し $sql = "SELECT ..."; $res = sqlite_query($db_con, $sql); } while ($row = sqlite_fetch_array($res, SQLITE_ASSOC)) { }
197 :
nobodyさん :2009/06/25(木) 20:23:47 ID:utUUg4I/
mysql_affected_rows();
198 :
nobodyさん :2009/06/25(木) 20:31:04 ID:4KEfnuyb
>>184 javascriptでどういう風にプログラムを組めばいいか
何かヒントを教えて頂けないでしょうか?
199 :
nobodyさん :2009/06/25(木) 20:55:26 ID:utUUg4I/
<script type="text/javascript"> // <![CDATA[ function test(n) { document.getElementById("out").innerHTML = n; } // ]]> </script> <div id="out"></div> <input type="submit" value="1" onClick="test(1)">
>>197 やっぱり行数で見るしかないのか…
イメージ的に、boolで返してくれそうな関数があっても良さそうなんだけど。
クエリは正しく通ってるんだからfalseじゃおかしいだろ
>>198 <?php
if($_POST["pass"]=="成功の場合の数字")
echo "成功";
else
echo "エラー";
?>
203 :
nobodyさん :2009/06/26(金) 01:44:34 ID:m+lfcOij
<form action="write.php?data=○○" method="post"> ○○の部分にphpの変数を入れたいのですがどうしたらいいでしょうか?
'〜〜' . $var . '〜〜';
205 :
nobodyさん :2009/06/26(金) 01:57:52 ID:m+lfcOij
>>204 phpの外のhtmlのタグの中に入れたいのです
>>203 省略表示が使えるなら
<form action="write.php?data=<?=$hoge?>" method="post">
って感じ。使えないなら
<form action="write.php?data=<?php echo $hoge;?>" method="post">
って感じ。あんまり美しくないけど。
207 :
nobodyさん :2009/06/26(金) 02:08:36 ID:m+lfcOij
気持ち悪い書き方だな
209 :
nobodyさん :2009/06/26(金) 03:56:41 ID:eh6qHIVY
cakephpなんですが コントローラのメソッドで function add($id) { と function add($id = null) { の違いがわかりません。 後者でもURLのパラメータ値がidに入ってくるのに、 nullで初期化する意味はあるのでしょうか?
Apacheがうまくインストールできません、プロンプト画面が出て\Program Files でシステムエラーのようなものが表示されます。
212 :
nobodyさん :2009/06/26(金) 07:50:16 ID:vbul8rC5
XAMPPとかいったセット使えよ 名前違うかも
213 :
nobodyさん :2009/06/26(金) 07:51:56 ID:vbul8rC5
214 :
nobodyさん :2009/06/26(金) 10:23:56 ID:TMhnu1Td
>>176 if($_POST['A0']=="A0"){
$b=str_rplace=("B0","1",$a);
$b=str_rplace=("B1","2",$a);
print("パスワードは".$b);
}else{
print("操作が間違っています");
}
えっ
216 :
nobodyさん :2009/06/26(金) 11:22:27 ID:Ht+rgjYH
class Test { function a() {} } $t = new Test(); のように new Test() した後に Test クラスに b メソッドを追加することってできますか?
不可
ぐぐったらpeclのrunkit使えばできるらしい
>>219 ありがとうございます。ですよね。
runkit は凶悪なツールですね。
pg_query() は try で捕まえられないのでしょうか? pg_query($db, 'begin;'); try { pg_query($db, $sql); // ★エラーが発生 } catch (Exception $e) { pg_query($db, 'rollback;'); } pg_query($db, 'commit;');
それ例外投げるの?
ですよねー
Warning: pg_query(): Query failed: ERROR: が捕まえられるわけじゃないんですね。。。
set_error_handlerかPDO使えばできるよ
>>225 ありがとうございます!
set_error_handler でうまくいきましたー。
try のブロック内にいるかどうか判定できませんか?
なんで?
>>228 既存プログラムである
>>221 に
一部 try を入れて、
>>226 のように
function error_handler($no, $message, $file, $line) {
throw new Exception("[$no] $message at $file:$line");
}
というのを用意しました。
try 外のエラーが error_handler のために
おかしなエラーになっているので、
function error_handler($no, $message, $file, $line) {
$message = "[$no] $message at $file:$line";
if (try 内部か) {
throw new Exception($message);
}
else {
die($message);
}
}
にしたいなと。
普通ラップするクラス作って begin commit rollback prepare execute とかで まとめるもんじゃね? そこで例外投げればいいわけだし。 素直にPDO使えばいいのに。
231 :
nobodyさん :2009/06/27(土) 04:15:49 ID:+RIsncnI
セッションファイルを直接読もうと思ってunserialize()したんですが、セッションってserialize()と同じ形式で保存されていないようで(デリミタが微妙に違う?)セッションファイルを直接読む場合どうすればいいのでしょうか?
232 :
231 :2009/06/27(土) 05:06:52 ID:+RIsncnI
自己レスです。こんな感じでできました。 $session_file = "/tmp/sess_5f660455a0c309d48c04b0597144a9fa"; $data = preg_split('/([A-Za-z_][A-Za-z0-9_]*)\|/',file_get_contents($session_file), -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); for($i=0;$i<count($data);$i+=2) $_SESSION[ $data[$i] ] = unserialize($data[$i+1]);
the requested operation has failed とエラーが出て、apacheとphpの連携が取れない。 システムファイルを修正する前はapacheがちゃんと起動できたのに、誰か助けて〜〜〜〜〜〜!
php4だったと思います。
GoogleのHTMLを取得して、別に用意したlog.htmlに上書き
という処理をしたいです。
<?php
$lines = file("
http://www.google.co.jp/index.html ");
foreach ($lines as $l) {
$html .= $l;
}
$inc = fopen("log.html","w");
fwrite($inc,$html);
fclose($inc);
?>
上記コマンドで文法ミスがありますでしょうか?
別問題としてcronを使っているので、cron側の問題でしょうか?
つスレタイ
236 :
nobodyさん :2009/06/27(土) 12:33:20 ID:+txMHXQ4
234,IDだします
文法ミスがあったらfatal errorが出るんじゃね?
238 :
nobodyさん :2009/06/27(土) 16:34:23 ID:nkgcVTu2
質問です データベースから取り出した文字列を、textやtextAreaの形でブラウザに表示をさせ、 もし変更があれば、変更を入力してもらい、変更があった場合と変更がない場合で 処理をかえるプログラムを作っています。 ここでphpの文字列比較がうまく行かなくって悩んでいます。 データベースから取り出した文字列をセッションで保存(この文字列を以下「A」とします。) それをブラウザで表示させ、再度入力をしてもらった文字列(以下「a」とします。) 「a」はもちろん入力された後、すぐにhtmlspecialcharsを通しています。 if(strcmp(A,a)==0){ //処理1 } else { //処理2 } とすると、何の変更もないのに処理2を行ってしまいます。 なにかうまい方法はないでしょうか? 「A」をhtmlspecialcharsで変換してみてもだめでした。 どなたかご存知でしたらお教えください。 よろしくお願いいたします。
入力してもらった文字列をhtmlspecialchars通す必要あるの? 表示しないでしょ?
比較がおかしいなら両方の変数をvar_dump()して見比べればわかるだろうにと 脊髄反射してみる
241 :
nobodyさん :2009/06/27(土) 20:56:19 ID:nkgcVTu2
>>239 一応確認のために、入力してくれた値を再表示するので、通してます。
>>240 見比べても、全く違いがないんだけど・・・・
htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
243 :
nobodyさん :2009/06/27(土) 21:39:09 ID:nkgcVTu2
>>242 とりあえず、試しにhtmlspecialcharsをかけないで試してみた。
でも、変わらず・・・。
ただ、htmlspecialcharsをかけてもかけなくても、文章によっては正常に「同じ」と評価する場合もある。
なんか、だめな文字とかあるのかな?
244 :
nobodyさん :2009/06/27(土) 21:57:17 ID:nkgcVTu2
追加 評価している両方の文章の見分けは、やっぱりつかない。 でも文字列にmd5をかけてみたら、違う数字になった。 やっぱりどこかが違っているみたい。
じゃ問題が再現するコードを出してくれ
246 :
nobodyさん :2009/06/27(土) 22:35:53 ID:nkgcVTu2
すみません。自己解決しました。 macの改行文字「\r」を評価するもの同士から削除すると、再現されなくなる。 どうやら昔macで入力したデータは、文字列評価で誤作動を起こすらしい。
改行コードが違っただけじゃん
rtrim()は普通やるよな
DBに入れる時は mysql_real_escape_stringを使うみたいですが、 前にこんな風に使ってる方が居ました。 mysql_real_escape_stringを使ってさらにhtmlspecialcharsも使ってました
mysql_real_escape_string()はMySQLが正しく受け取れるSQL文になるようエスケープするもの。 htmlspecialchars()は表示するときに無用なゴミを取るもの。
無用なゴミ・・・?
んじゃ、HTMLエンティティに変換可能な特殊文字を変換する、で
それがどう無用なゴミと繋がるの・・・?
254 :
nobodyさん :2009/06/28(日) 16:04:22 ID:04jk16zQ
ログイン認証のidとpassをsql使えない鯖なのでdatファイルで管理してるんだけど 他の人から丸見えなんで、隠す方法ってありますか?
>>254 basic認証が使えないってことは.htaccessも使えないのかな?
使えるならそれで隠せるし
てかパーミッションいじればいいのでは?
256 :
nobodyさん :2009/06/28(日) 16:35:43 ID:04jk16zQ
>>255 basic認証で隠せました!
ありがとです
257 :
nobodyさん :2009/06/28(日) 18:07:47 ID:P1lH7m+s
mysqlで テーブル1 a b c d e 1 0 -10 -2 1 とある場合、abcdeの値全部に 値が0より上の場合だけ -1を足してやりたいのですが、 今まで、phpで値を参照して、0以上なら〜 という風に最低でも5回調べていました。 何かもっと効率的な方法はありますでしょうか よろしくおねがいします
それ何のデータ?
259 :
nobodyさん :2009/06/28(日) 18:31:00 ID:P1lH7m+s
いやどういう用途?
261 :
nobodyさん :2009/06/28(日) 19:14:05 ID:P1lH7m+s
>>260 特に今のところ詳しく考えていませんが、
例えば、eの全ての値の0より上に-1を足す
ならwhere e > 0 で参照して簡単にできていたのですが(縦の値?)、
ふとこれが257の例のように、横の値(1 0 -10 -2 1)が0より上の場合だけ-1を足して
とした場合どうやればいいんだろう、と気になったのです。
で、今まで通り縦の方法をわけてやる方法しかないのかな、と質問してみました。
MySQLだとSQL文中でifが使えるとかあったような
UPDATE table SET a = IF(a >= 0, a - 1, a), b = IF(b >= 0, b - 1, b), ..... つーかPHP関係ないな
264 :
nobodyさん :2009/06/29(月) 10:14:56 ID:fNGZfwgv
PHPUnitを導入してみたんですけど テストをブラウザでするにはどうすればいいでしょうか? コマンドラインだと文字化けした時にコンソールが死んでしまうので ブラウザでテスト結果を見たいのですが。 ネットで検索しても古いドキュメントばっかりで 3.3でやり方知っていたらお願いします。
265 :
nobodyさん :2009/06/29(月) 11:21:55 ID:Q/RyyZ0F
【OS名】WindowsVista 【PHPのバージョン】 【連携ソフトウェア】 【質問内容】 すいません、プログラムの事はよく分からないのですがエラーの内容にPHPと記述されていたのでここにきました、質問させてください 「萌えた体験談コピペ」という2chまとめ系のサイトの記事を開くと Warning: require_once(Net/Socket.php) [function.require-once]: failed to open stream: No such file or directory in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47 Fatal error: require_once() [function.require]: Failed opening required 'Net/Socket.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47 このような文が出てサイトが開けません、時間を空けたり再起動したりしましたがまったく変わりませんでした 最近ネット関係でいじった事といえばFireFoxをインストールした位です、ちなみにFireFoxでもIEでも同じ症状がでます どうすればようでしょう、よろしくお願いします
>>242 のような
| htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
というサニタイズするな意見がよくあるけど、
表示する前の htmlspecialchars を忘れるセキュリティホールを本当によく見る。
人間だから 100% は無理だからね。
なのでサニタイズしたほうがバグになっても
セキュリティホールにはならないと思うのだけどどう?
>>265 あなたのせいじゃないから気にするな
管理者がちょっと恥ずかしい状態になってるだけ
>>266 ありえない
268 :
nobodyさん :2009/06/29(月) 13:36:35 ID:fNGZfwgv
>>266 出力の時、全てサニタイズするようにして、HTML出力したいところだけ
明示的にOFFにするようにすればOKだと思います。
それでも100%じゃないというなら、DBに入れる前にサニタイズだって100%とは言い切れないと反論させてもらいます。
269 :
266 :2009/06/29(月) 13:56:17 ID:???
>>268 そういうことです。>出力の時、全てサニタイズ
「表示する直前」の定義によるのですが、
まさに表示する直前に
print htmlspecialchars($var, ENT_QUOTES);
は危険だなと。
array_map() は配列に対してですが、 ハッシュ ( 連想配列? ) 用の関数はないでしょうか。
272 :
nobodyさん :2009/06/29(月) 14:36:11 ID:lu8+BB9Z
array_map() は配列に対してですが、
ハッシュ ( 連想配列? ) 用の関数はないでしょうか。
(
>>271 指定ありがと )
>>272 array_mapで使えると思うけど?どういう使い方してる?
あとphpの配列は全てハッシュだよ
274 :
272 :2009/06/29(月) 14:45:07 ID:lu8+BB9Z
>>273 $hash = array(
'a' => 'x',
'b' => 'y',
'c' => array(
'm' => 'o',
'n' => 'p',
),
);
$hash = array_map('foo', $hash);
function foo($argv) {
print_r($argv);
}
a や b, c が取得できなくて。
つarray_walk
276 :
272 :2009/06/29(月) 15:01:24 ID:???
>>275 ありがとうございました。
callback の引数が逆なのには面喰いました。
ん?
>>274 で示したサンプルでは
array_map も array_walk も変わらなくないか?
array_walk_recursive を求めてるんだと思ったんだが。
278 :
nobodyさん :2009/06/30(火) 03:41:24 ID:DIe+JQtV
下記のコードなんですが、4重エスケープしてると思うのですが・・・ どういう仕組か説明お願いします function clean ($str){ $str = strip_tags ($str); $str = htmlspecialchars ($str, ENT_NOQUOTES); $str = stripslashes ($str); $str = mysql_real_escape_string($str); return $str; } if(isset($_POST['submit'])){ $username = clean($_POST['username']); $password = md5(clean($_POST['password']));
入力された文字列に対して strip_tagsかけてhtmlspecialcharsかけてstripslashesかけてmysql_real_escape_stringかけて 返しているということ
280 :
nobodyさん :2009/06/30(火) 11:57:57 ID:91azNsAM
MySQLの処理で記述ミス等で正常にqueryが実行できなかった場合、 エラーメッセージを出すようにしています。 (例えば「登録できませんでした。管理者にお問い合わせ下さい」的な) しかし、記述ミスは設計者の問題ですから、そういうメッセージを見せられても ユーザはわからなですし、他に良い方法が無いのかと思い質問しました。
日本語でおk。
282 :
nobodyさん :2009/06/30(火) 14:53:51 ID:Y8wbyR8h
>>280 「システムの記述ミスです。申し訳ありません。」
>>280 クエリやエラーの内容にもよるけど「エラーが発生しました。もう一度お試しください。」とか書くしかないじゃん
なるべく客が納得いく表現にケースバイケースで書き換えてさ。
あとはそのエラー画面に管理者宛にエラー内容書いたメール飛ばすプログラムでも組み込んで。
ユーザに「問い合わせてね♪」なんて今時みたことない
apacheのデフォ設定とか、未だにそんなんだけどな。 英語だけど
285 :
nobodyさん :2009/07/01(水) 05:29:44 ID:gkTQFvwH
5.3.0age
286 :
nobodyさん :2009/07/01(水) 11:26:09 ID:fkYaARDw
ちょっと質問させてください。 チェックボックスで選択された商品の情報をDBからPHPで取得して その情報を商品ごとに配列にしてそのままダウンロードする処理を作成したのですが 複数選択された場合のダウンロードはできませんでした。 Javascriptを使わなければならないというところまでは 調べたのですが、どういう記述をしたらいいか分からなくて 困っています。 よろしくお願いします。 JSのスレかPHPか迷ったのですがここに書かせて頂きました。
mysql_fetch_assocをwhileで回せば複数取れると思うけど?
288 :
nobodyさん :2009/07/01(水) 11:52:55 ID:4mfkCgDj
>>286 つまり、1商品データを1ファイルとして扱い、
複数選択の場合は複数のファイルをダウンロードさせたいわけ?
289 :
nobodyさん :2009/07/01(水) 11:55:24 ID:fkYaARDw
290 :
nobodyさん :2009/07/01(水) 12:23:50 ID:4mfkCgDj
>>289 俺もやったことがないから正確なことは言えないが、ちょっと難しい
商品それぞれにダウンロードボタンを付けるのが妥当だと思う
お役に立てなくてごめんなさい
複数ファイルを一気にDLさせたいなら、一時ディレクトリに対象ファイルを展開したあとに ZIP圧縮してそれを、適当なHTTPヘッダつけて送ればいいんじゃね?
>>287 なんでMYSQLやねん
>>289 もうあれだ。商品ごとにwindow.openしとけw
293 :
nobodyさん :2009/07/01(水) 16:59:02 ID:/Z34wosi
wモードでfopenを使って新しい作成をしようとしたところ、 failed to open stream: 許可がありません というエラーが出ます。 おそらくアクセス権限のエラーと思い、ディレクトリのパーミッションを0755にしましたが、 まだこのエラーが出てしまいます。 他に何か原因があるのでしょうか
じゃあエスパーしてみせようか 0755ってことはウニックス系鯖だな で、パーミッション変更はFTPで行ったと・・ つまりFTPユーザとPHP実行(ウェブ)ユーザが別であると したがって書き込むためには、0777にすればいいんじゃないかと
その場合はPHPスクリプトがユーザー権限で動いていると? あるいは、アパッチ権限で動いている? どっち?
>>294 氏の推測通り、パーミッション変更をFTPで行った前提だと
パーミッションを0755にしたのだから、(ftpユーザと同じ)ユーザ権限で動いていれば
0755の「7」に該当するわけで問題無い。
それで問題あるという事は、PHPはapacheの権限で動いていると思われる。
それをいきなり確認する方法ってある?
phpinfo()の表示で User/Groupみりゃいいだろう
環境の情報が無さ過ぎてなんとも難しいクイズだが もしサーバー自前でphpをはじめて動かすとかならフォルダのパーミッションも関係あるぞ /home以下のユーザーフォルダのパーミッション/home/*/public_html のパーミッションが700になってる可能性がある、これも755にしてやらないと動かない そもそもhello worldが動いているのか?何はできるが何になると出来ない等、問題の切り分けをしていかないと解決しないぞ
300 :
nobodyさん :2009/07/02(木) 17:04:14 ID:0lGL3Sc9
複数あるlinuxサーバーで1台だけ5.2.10をソースからインストールし、
その他のマシンではdebianのパッケージ(PHP 5.2.0-8+etch15)を入れているのですが、
ソースから入れたマシンだけ、
filter_var('
[email protected] ', FILTER_VALIDATE_EMAIL);
がfalseにならず、
[email protected] を返す。
configureはこんな感じ。
./configure --with-apxs2=/usr/bin/apxs2
--enable-mbstring
--with-ldap
--with-imap
--without-mysql
--with-libmbfl
--with-pgsql
--with-pdo-pgsql
--with-zlib
--with-curl
--with-gd
--with-kerberos
--with-imap-ssl
php5のchangelogには仕様が変わったというような記述はないようですし、
何が原因か判る方いますか?
php.iniのどこを確認すべき、とか。
それはサーバの問題だと思う。RPMから入れれば良かったのに。
302 :
300 :2009/07/02(木) 18:00:44 ID:???
>>300 自己解決。
いや、解決してないけど。
debパッケージ版のソースと見比べたら、
php_filter_validate_email内の正規表現が変わっていました。
実際に両者の正規表現で直接マッチするか試したら、
5.2.10のソース版の方だけ'
[email protected] 'がマッチすることを確認できました。
Cはよくわからないのでこれ以上追えませんでしたが。
>>302 debianパッチとか見てみた。
> + - CVE-2007-1900/MOPB-45 ext/filter Email Validation Vulnerability
これじゃね? どうもタイムスタンプとか見る限り、debianのメンテナが、
PHPの新版が出るのを待って、そこからバックポートのパッチを作る時間を
惜しんで自分で作ったパッチと、PHPの中の人が作ったパッチとが違うようだ。
危険度highのセキュリティフィックスだし、本家の更新を待たずに独自パッチ作るのは
良いと思うけど、振る舞いが本家と異なるのはダメダ
さぁDebianメンテナにケツを持ち込むんだ。
304 :
300 :2009/07/02(木) 19:24:29 ID:???
>>303 サンクス。
どうも修正原因は2009-02-02のこれっぽい。
http://bugs.php.net/bug.php?id=47282 内容がちょっとおかしいですけど。
[email protected] や
a@com
が通るように修正されたらしい。
自分的にはdebin版(というか5.2.8以前の版?)の動作を期待していました。
> This bug has been fixed in CVS.
と、バグとして処理されているので、それが本来の振る舞いってことでしょうか。
単にFILTER_VALIDATE_EMAILが自分の期待していたものとは違ってたってことですかね...。
lenny版(5.2.6)のソースから件の正規表現を持ってきて使うことにします。
php 5.3.0でphp_phar.dll使おうと思ったらextにbundleされてないやんけ
>>305 標準に組み込まれたから見えないだけ。使えるよ。
>>306 了解。
iniの項目に残ってて紛らわしいわ
php.ini の記述にしても、php_pgsql や、go-pear.bat が動かなかったりと、回帰テストとか全然やってないねー。
>>308 そうそう、go-pearがpharでこけてるから質問してみた訳よ。
310 :
nobodyさん :2009/07/02(木) 23:03:27 ID:FF1NZIiG
先輩方に、ご質問です。 毎日、午前8時に自動的にmail関数を実行する事は 可能でしょうか? もし、不可能なら、どんな言語・技術が必要でしょうか?
>>310 環境は?
>>1 のテンプレ位見てよ。
windowsならタスクスケジューラ
Linuxならcron
↑が使えないなら、ファイルに時間を保存しといて、ごにょごにょするとかね。アクセスが少ないと無理だけど。
313 :
nobodyさん :2009/07/03(金) 01:42:59 ID:O2VxaChr
function TEST(){ global $config; } とすると関数外の変数をグローバル変数にして取得することが出来ます。 では、classの場合はどう書けばいいのでしょうか?
314 :
nobodyさん :2009/07/03(金) 01:47:49 ID:DH30LmcY
アドバイス、ありがとうございます なんとか出来そうです @メールを送信する度に送信日付をdat書き込み ↓ Aアクセス毎に送信日付と現在の日付を比較 ↓ B一致しなければメール送信 ↓ @へ戻る
>>313 おんなじように、globalでいけるんでは?
てか、それってあんまりクラスな意味がないような気もする。
316 :
nobodyさん :2009/07/03(金) 02:08:04 ID:O2VxaChr
>>315 クラスの関数内でglobalを宣言すればいけます。
ただ、それだとクラスの意味はないと思い質問しました。
メンバ変数をグローバル変数にするような事が出来ればいいのですが・・。
317 :
313 :2009/07/03(金) 02:12:24 ID:O2VxaChr
自己レスですが、以下のようにすると良いかもしれませんね class class1{ function class1{ global $config; $this->config = $config; } }
良くねぇよw
むしろ何でそんなにグローバル変数にしたがるんだろう。 普通に受け渡しすりゃいいのに
320 :
nobodyさん :2009/07/03(金) 09:17:30 ID:0BOHJIMn
RESTサーバー作ろうとしてんだけど、 これってGESTパラメータを受けてXMLを返せばOKってことよね?
321 :
nobodyさん :2009/07/03(金) 09:18:49 ID:0BOHJIMn
GESTって何よ…GETです
322 :
313 :2009/07/03(金) 14:10:56 ID:O2VxaChr
>>318 ですよねw
>>319 $configはサイト設定に値する配列なのですが、
普通に受け渡しをすると、毎回、$obj->config = $config
のような指定を書かなければいけないし、クラス内の関数じゃなくて
普通のユーザ関数内で使いたいときもあります。
その時にグローバル変数化しておくとどのページでも参照できて便利なんです。
なので、もう一つ上の書き方・効率の良いソースはないかと思い、質問しました。
327 :
nobodyさん :2009/07/04(土) 01:11:23 ID:LBMY5xnE
echoとかいっぱい使ったあと、 同じページの最初にジャンプって 出来ますか? headerは何も書いてないときしか 使えないんですよね?
そんな君に5.3.0からgoto文がサポートだ!
goto やっても出しちゃったヘッダは戻らないだろ・・ 出しちゃったらあとはできちゃったのを待つしかないように・・ ページの途中で、<img onload="やりなおし関数"> を仕込むとかw チラっとページが見れたと思ったらまたリロード。img の中身はエロ画像な。
最初にじゃんぷっていうのは、 リロードさせたいって意味?
331 :
nobodyさん :2009/07/04(土) 09:07:22 ID:tI0ECBzn
同じページの最初にジャンプするならechoする必要ないんじゃね
出しちゃっても取り返しがつくようにヘッダを最後の出力まで溜めておく関数と 最終出力する関数をつくって、その中で最終的なヘッダを操作するようにすればいい 関数名はコンドームで
販売か生産管理システム用のフレームワークってありますか?
そもそも複数箇所でechoするって設計が致命的にダメ。 プログラムの構造化で真っ先に取り組むべきは、画面出力箇所とロジック部分の切り分け(VとMCの分離)なわけだが、そこからしてできていない。 最低でも、echoする箇所は1つの関数内にまとめろ。 んで、その中ではループ処理とisset($var)やif($var)レベルの処理以上のロジックを扱わないようにしろ。 >333 そこまで限定されるとフレームワークっつうよりパッケージソフトだな。もしくはコンサルウェア。 PHPにあるかどうかは知らんが、あったら書いた奴の根性を尊敬するわ。
336 :
nobodyさん :2009/07/04(土) 20:33:01 ID:LBMY5xnE
327>です。 いろいろな助言ありがとうございます。 説明が下手でしたね… echoというか、本当はソケット関数で 通信を行って、5秒後に再度同じ処理を 初めから行いたかったんです。 その場合もheader_removeでいいんでしょうか?
3MBのテキストをexplod()してuniqarray()で同一の配列値を消して、implode()して テキストとして保存するという処理を行うとメモリ容量エラーで終了しません。 50KBぐらいだと普通に処理できるので設計の問題ではないと思われます。 なにか別の方法があるでしょうか?
338 :
337 :2009/07/05(日) 03:44:06 ID:S+gPtyj7
↑IDだすの忘れました
php.iniのmemory_limitの値は? 通常、8Mだから、そんなことやってるとメモリ制約に ひっかかる可能性がある。php.ini の値を自分で変更 できない環境なら、小出しに中間ファイルなど使って やっていくしかないかも。
340 :
nobodyさん :2009/07/05(日) 14:59:44 ID:7afKnISw
変なことを聞きますが、1つのPHPファイルに集中してアクセスがあるのと 複製した同一ファイルにアクセスがあるのとでは 前者の方が負荷は高くなりますよね? 前に、「PHPでのアクセスならファイルを分けても負荷は変わらない」 と言うようなことを聞いたので、どうだったかな?っと思い質問しました。
てst
え・・・?
343 :
nobodyさん :2009/07/05(日) 15:51:45 ID:eOwA/AWQ
$contents1 = "abcde\n"; $contents2 = "ABCDE\n"; file_put_contents(file.txt,$contents1); file_put_contents(file.txt,$contents1); とやると、file.txtにはABCDEしか入ってないんですが、 なんでabcdeは入っていないんでしょうか?
上書きしてるから
345 :
nobodyさん :2009/07/05(日) 16:12:10 ID:eOwA/AWQ
上書きですか・・・? 自分では、\nで改行されているので、 上書きされないはずと考えてしまうのですが?
違うよ
RTFM >filename が存在しない場合はファイルを作成します。 >存在する場合はそのファイルを上書きします。ただし FILE_APPEND フラグが設定されている場合は別です。
348 :
nobodyさん :2009/07/05(日) 16:36:03 ID:eOwA/AWQ
僕の勘違いだったんですね・・・ わかりました、ありがとうございました!
>340 前者のほうが僅かに軽くなる。 ただ、体感できるレベルの差ではないので気にしなくていい。
350 :
nobodyさん :2009/07/05(日) 23:44:16 ID:eOwA/AWQ
またまたすみません。 |a|a |a|a 見たいな感じで、 文字の前に'|'を入力したら表になるようなプログラムを作りたいのですが、 <table></table>をどう処理していいかわかりません。 なにかいいアイディアはないでしょうか? ちなみにexplodeでtxtファイルから一行ごとに取り出し、 正規表現を使って先頭の'|'を判断し、それをexplodeで分割して、 <td></td>の間に表示するというやり方で作っています。
なんで|で区切る必要があるの? なんでそんな入力になるの? なんでもいいなら、FCKやMCEエディタ入れて、 ユーザーにHTML入力させればいいじゃない。
preg_replaceでいいんじゃないの。
353 :
nobodyさん :2009/07/06(月) 00:52:20 ID:MPcI6fKX
>>351 web上で使えるメモ帳みたいなものを作りたいので
>>352 preg_replaceですか?
確かに使えそうですね!やってみます!
ありがとうございました!
はじめに<table><tbody> で、行頭に<tr><td> パイプに</td><td> 行端に</td></tr> 終わりに</tbody></table> explode でいいんじゃねーの? 何が難しいのか分からん。
355 :
nobodyさん :2009/07/06(月) 16:41:05 ID:qPA0wc5K
鯖上のファイルが*.phpも含めて権限が0777になってるなんでだ・・・。 何か問題あったりする・・・よなorz
その質問には答えかねる
chmod でディレクトリのパーミッションかえるつもりが-Rオプションつけちゃったんだろう
358 :
nobodyさん :2009/07/06(月) 17:07:03 ID:qPA0wc5K
>>357 しまったそれだwwww
とりあえず
find ./ -name *.php | xargs chmod 0775
で一括変換してくるよありがとう
対象が / は大丈夫なのか
一応 '.'が前にある、、見づらいがw
361 :
nobodyさん :2009/07/06(月) 17:24:37 ID:qPA0wc5K
>>359 ./(ドットスラッシュ)なので大丈夫です><。
見えづらくてごめんよー
362 :
nobodyさん :2009/07/06(月) 19:30:04 ID:Zv6if7ao
>>362 他にjavascript、能力、やる気なども必要。
ちなみに、何か「できないかも」と思う機能があるの?
そういう懸念があるのならそれも併記すべき。
そういうことすら判らないのでとりあえず聞いてみた、
ということなら、あなたには難しいんじゃないだろうか。
364 :
nobodyさん :2009/07/06(月) 20:29:52 ID:Zv6if7ao
>>363 ありがとうございます
javascriptも勉強してみます
>>364 ・コンテンツごとのユーザーアップロード・コメント管理
→CMS全般・RDBMS
・動画コンテンツの再生制御
→主流はFlash。ただFlashだとツールが高いので、
SilverLightを勉強するとよろし。FLVは使えないけど、
WMVが使える。
CMSをPHPベースのものにすれば、カスタマイズする
ときにPHPが使えるよ。MT等、静的HTMLを出力する
タイプのCMSだったら、ベースがPerlでもPHPでのコン
テンツ開発ができる。
SilverLightてwin鯖以外でも動くの?
既存のCMSをカスタマイズするより、自分用のCMSを作った方が 早いしわかりやすい気がするのは僕だけですね
>>367 開発ツールと同期させたり、WMVストリーミングと組み合わせると
MSのサーバー製品が必要になる。けど、Flashみたいな使い方なら
Win鯖なくてもおk
>>368 お決まりのテンプレートが自分の手中にあればいいけど。
ゼロから開発ならCMS使ったほうがいいでしょ。製品によっては、
コーディングを最小限にしてテンプレートと設定だけで実現できるし。
370 :
nobodyさん :2009/07/07(火) 12:09:35 ID:YRT2t6kR
how much?
372 :
nobodyさん :2009/07/07(火) 12:59:47 ID:2bX5okbx
mod_rewriteで /hoge/fuga.php?id=5 で、 /hoge/fuga/id5.php を表示させたいのですが(動的URLで静的ページを表示) RewriteRule ^/hoge/fuga\.php?id=5$ /hoge/fuga/id5.php [L] としても表示してくれません 記述方法が間違っているのでしょうか・・・
? はエスケープすべきだろう あとRewriteCondは正しいかとか、そもそもRewriteLogはどうなってんのとか。
374 :
nobodyさん :2009/07/07(火) 13:44:40 ID:2bX5okbx
RewriteCondは設定していません。 ?もエスケープしてみましたが同じでした。 RewriteLogはどこで確認すればよいのでしょうか?
えっ
376 :
nobodyさん :2009/07/07(火) 21:30:03 ID:q2UkOan/
PHPでセッションをブラウザを閉じるまでは無期限にする方法が 知りたいです。 session.cookie_lifetimeの値を0にすればブラウザを閉じるまで セッションが継続することは分かったのですが、どうもこれだけ ではダメなようです。 session.gc_maxlifetimeの値も関係しているようですが実際どうすれば 永続化できるかが分からないです。
えっ
セッションとブラウザの開け閉めはあまり関係ないんだが……
タイムアウト関係のパラメータが幾つかあった気がするけど、ユーザ側からしてみたら いつまで経っても処理が完了しないページなんて糞以外の何者でもないよな。
>>376 >session.cookie_lifetimeの値を0にすればブラウザを閉じるまで
>セッションが継続する
session.cookie_lifetimeはクライアントが保持するセッションクッキーの生存期間。
session.gc_maxlifetimeサーバー側に保管されているセッションデータの生存期間。
※サーバーがsession.gc_maxlifetimeでごみ掃除するよう設定されていれば、だが。
なお、セッションは永続化すべきでない。
セッションハイジャックのリスクについて調べてみよう。
session_regenerate_idも忘れるな。
セッションハイジャックされても困らないようなものなら、単に寿命を長くしたクッキーに保管すれば良い。
381 :
nobodyさん :2009/07/08(水) 17:40:20 ID:Y5N6FZ0y
本当にくだらない質問で申し訳ないんだが %%って何?
PHPの話?
383 :
nobodyさん :2009/07/08(水) 17:58:01 ID:Y5N6FZ0y
だと思うのですが… 拡張子phpのファイルで%%の表記を見たので気になりました
printf系関数で%%と書くと%を印字できる
385 :
nobodyさん :2009/07/08(水) 18:29:58 ID:Y5N6FZ0y
うーん…違う感じです データベースとなにか関係がありそうな感じのコードになっているのですが… 伝わりにくい説明で申し訳ないです
DBならLIKEのパターンで%は使うけどな
今日、使ったよ。 mysql と php で、mysql 内の日付関数使うのに。 sql文の条件更新は sprintf でやっているから。
質問です。 mb_send_mailでメールを送り、メールアカウントが存在せずに送れなかった、 等の細かいエラーステータスを取得することはできますか? もし、PEARやZend Framework等でできるのであれば、それでも構いません。
389 :
nobodyさん :2009/07/08(水) 19:20:20 ID:Y5N6FZ0y
>>386 ひょっとしてSQLの命令文てphpに直接書いて問題なく通るんですか?
>>387 日付関数とは違うと思います
なんというか…
DBから読んだ情報をそのまま表っぽく出力させていた感じでした
その部分のコードを書けば話が早かったのにね
391 :
nobodyさん :2009/07/08(水) 19:25:35 ID:Y5N6FZ0y
>>390 今それが出来る環境ではなかったので…
申し訳ないです
HTTPやSMTPなんて枯れたプロトコルの資料は腐るほど転がってるだろうに、 どうして目を通そうとは思わないんだろうな。
393 :
nobodyさん :2009/07/08(水) 20:45:39 ID:foGDI8Y6
<?php $str1 = "a,b"; $str2 = "a"; $str3 = "b"; $arr1 = array( $str1 ); $arr2 = array( $str2 , $str3 ); echo var_dump( $arr1 ); echo var_dump( $arr2 ); ?> $arr1を$arr2のようにarrayするにはどうすればいいかアドバイスください
394 :
nobodyさん :2009/07/08(水) 20:48:23 ID:foGDI8Y6
>>393 結果
array(1) {
[0]=>
string(3) "a,b"
}
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
>>393 $arr1 = explode(',',$str1);
396 :
nobodyさん :2009/07/08(水) 21:03:17 ID:foGDI8Y6
397 :
nobodyさん :2009/07/08(水) 22:28:52 ID:E0xRJmX/
windowsの5.3のpackageってどこにあるのでしょうか? 5.2.10はあるのですが、5.3が見つかりません。。
パッケージって?
PDOで、 SELECT * from TableName where Cullum1=? and Cullum2=? のようなクエリ文から、プリペアドステートメントを使いながら、レコード数(行数)を取得する方法はないでしょうか? PDO::prepareを使うと、PDOStatement->rowCountから、SELECT文の行数を返さなくなってしまい、 PDO::queryを使うと、プレースホルダが使えないため、SQLインジェクションに対して弱くなってしまいます。 やはり、PDO::queryとmysql_real_escape_stringを使って、行数を取得するしかないでしょうか?
fastcgiで動かした場合にapacheモジュールと比べて制限ってありますか?
>>399 PDOStatement::rowCount() は 相当する PDOStatement オブジェクトによって
実行された 直近の DELETE, INSERT, UPDATE 文によって作用した行数を返します。
関連する PDOStatement によって実行された直近の SQL ステートメントが SELECT 文の場合、
いくつかのデータベースは文によって返された 行数を返すかも知れません。
しかしながら、 この振る舞いは全てのデータベースで保証されていません。
さまざまな場所で使用するアプリケーションでは、 これに頼ってはいけません。
http://www.php.net/manual/ja/pdostatement.rowcount.php mysql で LIMIT なら calcfoundrows() かな。
全部持ってきてるなら php でカウントの方が早いんじゃね
>>401 なるほど。PDO::prepareを使って、countするって言う方法もあるんですね。
--------------------------------------------------
$TableName_sql = $dbh->prepare('SELECT * from TableName where Cullum1=:Cullum1 and Cullum2=:Cullum2');
$TableName_sql->bindParam(':Cullum1', $Cullum1);
$TableName_sql->bindParam(':Cullum2', $Cullum2);
$Cullum1 = 1;
$Cullum2 = 2;
$TableName_sql->execute();
$TableName_array = $TableName_sql->fetchAll(PDO::FETCH_ASSOC);
count($TableName_array);
//$TableName_arrayから欲しいデータをforeachなどで取得する
--------------------------------------------------
これで、行数を取得することができました。
クエリがlimit 0, 1であれば、fetchAllをfetchにしてもいいですね。
calcfoundrows()はググってみたのですが、よく分からなかったので(Zend Frameworkの関数?)この方法でやってみようと思います。
ありがとうございました。
403 :
nobodyさん :2009/07/09(木) 13:34:46 ID:zxpsDuOP
5.3.0のphp5isapi.dllってどこにあるのでしょうか?
組み込まれたからなくなった
PHP4でユニットテストするにはどうしたらいいですか。 phpunitはPHP5が必要でした。
simpletest
PHP4で、staticメソッド中からクラス名を調べることはできますか。 たとえば class Foo { function f() { // ここでクラス名を取得したい $classname = current_class_name(); echo $classname; } } Foo::F(); //=> Foo のような感じです。
__CLASS__
昨日 %% について聞いた者だけど ひょっとしたら <? ?> の代わりに使っているのかもと思った
前後のコードを xxx とかで消す機転があればいいのだけど
置換して自前のテンプレートエンジンチックなことやってるんじゃないの? まさかjspというオチじゃないとは思うが
414 :
nobodyさん :2009/07/10(金) 02:50:37 ID:HEyAts5C
ユーザーがフォームに入力した文章をテキストファイルに保存しようとしています $data=$_POST["form"]; $time=date("Ymdhis"); $filename=$time.".txt"; $fh=fopen($filename,"w"); fwrite($fh, $data); このような感じに書いたのですが、特定の字(表など)の前に勝手に\が追加されてしまいます どうかご教示ください
>>414 的外れかもしれんが、
・PHPスクリプトの文字コード
・フォームが記述されているHTMLの<meta>で記述された文字コード設定
が一致しているかい?
magic_quoteでしょうが
417 :
nobodyさん :2009/07/10(金) 06:48:06 ID:i3ltcwt5
んだな if(get_magic_quotes_gpc()){ $date = stripslashes($date); }
sjis ソ \ で検索すべし
419 :
nobodyさん :2009/07/10(金) 16:24:36 ID:umZSlYAS
重複しないランダムIDを振りたいんだけど、どうするのが一般的でしょうか? ・あらかじめ大量のランダムIDを配列に入れるなりファイルに書いておいて順番に割り振る ・動的にrand()か何かを使って既に割り振ったかどうかを調べて、重複してればもう一回ランダム生成を繰り返し 他にいい方法はないでしょうか? 雰囲気としては無料HPとったときに勝手に割り振られるIDとか、 短縮URLのtinyurl.comみたいに動的な振り方を考えています
>>419 uniqid() ってあるけどユニークの保障がないので、重複をチェック。
正規表現で特定の文字列を無視して取得する方法ってあるのでしょうか? $text = 'aaabcc'; preg_match('/aaa(.*?)c/',$text,$array); とすると、$array[1]には「b」だけが入ります。 例えば「cの前にbがついていると無効」みたいな設定が出来て 「bc」のみを取得したいのですが、そう言う事って出来るのでしょうか?
422 :
421 :2009/07/10(金) 16:56:37 ID:68PKUhMI
すみません。sageのままでした
423 :
419 :2009/07/10(金) 16:59:33 ID:umZSlYAS
>>420 ありがとうございます、そういう関数があったんですね
>>421 何度読み返してもやりたいことが理解できなかったヨ...
先読みや後読みのことだと思うけど
427 :
421 :2009/07/10(金) 19:32:39 ID:68PKUhMI
正規表現で「この条件の時、この文字は読まない」 的な設定が出来るのかという質問です。 アルファベットの間を取得したいと思った時、 正規表現の文字区切りをどうすればいいか悩み、 「それなら無効にする条件があればいいのでは?」と思って質問しました。
その条件ってのが正規表現で書けるものか、そうでないものかの判断が付かないと 何もいえんだろう
429 :
nobodyさん :2009/07/10(金) 22:14:22 ID:6BztVKYK
ふと気になったのですが $_FILES["hoge"] のファイルのtypeだったり、sizeって どっから読み取っているのですか? 例えばイメージファイルで、hoge.jpg というファイルで、inputのタイプがfileのフォームから ポストされたときに、一体どこから判断しているのでしょうか。 考えたのが、ファイルそのものにそういう情報が埋め込まれてる? ということなんですが、これだと簡単に変更が可能なような気もするのです。 例えばsizeに関して言えば、本当は1GBのファイルだけど、 (埋め込まれている(仮 情報は)1MBにしてしまえば 間違って1MBとして判断して処理してしまう、ような感じです。 なのでこれはないような気がするのですが、それだとどこから判別しているのかなぁ、と。 よろしくお願いします
>>429 HTTPプロトコルを勉強しよう。
具体的にはPOSTという処理を行う際に、どのような
データがブラウザからサーバーに送られているか。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro01/netpro01.html ファイルつきでブラウザからサーバーにPOSTが行
われると、HTTPのBODYという欄に画像のバイナリ
データ(ファイル内容)そのものが記入される。
その記入方法がいろいろあって、ファイル種はブラ
ウザによって記述されたり、記述されなかったり。
430さんの仰る Content-Lengthも、multipart という
方法(form内の複数パラメータを送信するときによく
用いられる)では任意になる。
なので、基本的には、ブラウザからの通知があれば、
ブラウザからの通信メッセージでもらったファイル長さ、
ファイル種を適用する。
そうでない場合もあるし、ブラウザが嘘ついてることも
ある。なので、画像ファイルとして正しいか、画像ファ
イルとして掲載していいかなどを検査するには、一度
アップロードファイルを一時ディレクトリに展開してか
ら、GDなどでチェックするのがいいんじゃないだろか。
433 :
nobodyさん :2009/07/10(金) 23:10:33 ID:3xLtfsMq
GD?
434 :
nobodyさん :2009/07/10(金) 23:32:10 ID:6BztVKYK
>>430 ,431-432
なるほど、リクエストメッセージに、
ファイルの概要みたいな情報も乗せることができて、サクサクっとやりとりする
みたいな感じでしょうか。
>その記入方法がいろいろあって、ファイル種はブラ
>ウザによって記述されたり、記述されなかったり。
たしかに、このままだとクライアント側のファイルやブラウザ次第になってしまいそうなので、
おっしゃられるように受け取った実際のファイルを
チェックすることが確実だとわかりました。
まだまだ理解が不足しているのでじっくり掲示してもらったサイトをみて
勉強しようとおもいます
ありがとうございました
435 :
nobodyさん :2009/07/11(土) 03:08:18 ID:ktZCccmb
ファイルが同じものかを判定し、違う場合はその行を出力しようと思ったのですが同じファイルを使っても全て違うと判定されてしまいます。 以下のコードで実行すると。 while(!feof($filepointer)){ $fileline = fgets($filepointer); $fileline2 = fgets($filepointer2); if(strcmp($fileline,$fileline2)!=0){ echo strcmp($fileline,$fileline2); echo "[".$fileline."][".$fileline2."]"; } } 1[abcdefg ][abcdefg ] 1[hijkl ][hijkl ] 1[mno ][mno ] 1[p ][p ] 1[q ][q ] このようになります。 なにが原因なんでしょうか?
読み込んでるファイルは?
437 :
435 :2009/07/11(土) 03:40:25 ID:???
abcdefg hijkl mno p q テキスト形式でこんな感じです。
再現できるだけのコード出してちょ
439 :
435 :2009/07/11(土) 03:55:48 ID:ktZCccmb
440 :
435 :2009/07/11(土) 04:02:10 ID:ktZCccmb
アップローダーのCGIに手を加えて、アップロードしたファイルが所定のファイルと合致するかを調べる仕様にしています。 違った場合にはその行を出力しています。 ですね、日本語おかしくてすみません
--log.txt-- abcdefg hijkl mno p q --test.php-- <?php $fp1=fopen('log.txt','r'); $fp2=fopen('log.txt','r'); while (!feof($fp1)) { $line1 = fgets($fp1); $line2 = fgets($fp2); if (strcmp($line1, $line2 ) != 0) { echo strcmp($line1, $line2); echo '[' . $line1 . '][' . $line2.']'; } } で実行してみたけど同じと判定されるよ
442 :
435 :2009/07/11(土) 04:12:15 ID:ktZCccmb
色々試行錯誤して $fileline = rtrim(fgets($filepointer)); $fileline2 = rtrim(fgets($filepointer2)); としたら期待した動作になりました。 勝手に入れられたスペースが怪しかったのかも・・・ こんな時間にありがとう御座いました。
>>442 ファイルの同一性を比較するならMD5のハッシュ値で比較する方が簡単だよ。
ああ、比較するだけじゃなかったね。
>>443 は忘れてくれ。ヌマヌ
446 :
nobodyさん :2009/07/11(土) 14:24:39 ID:MrwFrSXN
フォームのボタンが押されたら、もしくはリンクをクリックしたら、 現在のファイルに記述されている関数を呼び出すことって出来ますか? やりたいのは、ユーザーが操作したら、現在のページで作った変数の値のデータを そのまま、自身のURLにPOSTして、現在のページを再読み込みしたいのです。
>>446 Hiddenに埋め込んで値を引き継ぐか、
セッション変数の中に値を保持するようにすればいい
448 :
nobodyさん :2009/07/11(土) 15:33:50 ID:MrwFrSXN
>>447 Hiddenしりませんでした、ありがとうございます。
【OS名】CentOS 【PHPのバージョン】php5.26 【連携ソフトウェア】なし 【質問内容】 PHPで画像を表示するWebページを作っているのですが、質問があります。 目次のページを作り、見たい画像の一覧を作って、一覧から画像を選択すると そこにジャンプし、ジャンプ先には画像とその画像が載っている本の表紙が表示されるという ページを作りたいのですが、どうもうまくいきません。 考えているのは、目次のページのリンクでは、クエリ文字配列で、以下のように設定をし、 ※擬似コードっぽくなってます。 # imgid 画像名を読み込み、格納 <a href="gazou.php?imgid=$imgid">$imgid</a> ジャンプ先では、 # 表紙画像 hyousi.$imgid.jpg <img src="$imgid.jpg"> <img src="hyousi.$imgid.jpg"> といった風に、目次ページの$imgidを読み込んで、 ジャンプ先の画像表示ページでは$imgidに沿った画像を表示させるというページを作りたいです。 どのようにすれば、目次ページでクエリ文字列とIDを設定でき、ジャンプ先のページに値を渡すことができるのでしょうか? 長文失礼致します。
450 :
nobodyさん :2009/07/11(土) 16:07:09 ID:BAvUHxXp
>>449 新参乙
まぁ
>>1 でも読んで落ち着けよ
動的に画像を読み込みたいってことね
451 :
nobodyさん :2009/07/11(土) 16:07:13 ID:EDbsXnZV
【OS名】CentOS 【PHPのバージョン】php5.26 【連携ソフトウェア】なし 【質問内容】 PHPで画像を表示するWebページを作っているのですが、質問があります。 目次のページを作り、見たい画像の一覧を作って、一覧から画像を選択すると そこにジャンプし、ジャンプ先には画像とその画像が載っている本の表紙が表示されるという ページを作りたいのですが、どうもうまくいきません。 考えているのは、目次のページのリンクでは、クエリ文字配列で、以下のように設定をし、 ※擬似コードっぽくなってます。 # imgid 画像名を読み込み、格納 <a href="gazou.php?imgid=$imgid">$imgid</a> ジャンプ先では、 # 表紙画像 hyousi.$imgid.jpg <img src="$imgid.jpg"> <img src="hyousi.$imgid.jpg"> といった風に、目次ページの$imgidを読み込んで、 ジャンプ先の画像表示ページでは$imgidに沿った画像を表示させるというページを作りたいです。 どのようにすれば、目次ページでクエリ文字列とIDを設定でき、ジャンプ先のページに値を渡すことができるのでしょうか? 長文失礼致します。
452 :
nobodyさん :2009/07/11(土) 16:07:56 ID:EDbsXnZV
>>450 専ブラのsageチェック外すの忘れていました。
すいません。
453 :
nobodyさん :2009/07/11(土) 16:11:56 ID:BAvUHxXp
おkk 何か質問の意味がわかるようでわからない 目次で <a href="image.php?imgId=1">1</a> <a href="image.php?imgId=2">2</a> <a href="image.php?imgId=3">3</a> <a href="image.php?imgId=4">4</a> <a href="image.php?imgId=5">5</a> 表示で <img src="<?php echo $imgid; ?>.jpg" /> <img src="hyousi.<?php echo $imgid; ?>.jpg" /> じゃだめなん?
454 :
nobodyさん :2009/07/11(土) 16:22:16 ID:EDbsXnZV
>>453 レスありがとうございます。質問分かりにくくてすいません。
画像ファイルの数が多いため、目次ページでは
テキストに別途まとめた画像ファイル名の一覧を読み込んで、
それを単純に出力表示させるようにしています。
なので、目次ページで
<a href="image.php?imgId=1">1</a>
<a href="image.php?imgId=2">2</a>
番号続く
という風に書くことができません。
所有しているPHPの教本では、クエリ文字列を使って値を渡すのは
formじゃないと無理的な事が書かれているので…。
このWebページみたいに、
ttp://php.thm.jp/index.php ひとつのPHPでコンテンツだけ色々変わるという風にしたいのですが。
<?php
$dir = "/home/erosuke/images/";
$mode = $_GET["mode"];
if(strcmp($mode,"index")){
目次HTML出力コード
}
if(strcmp($mode,"showimage")){
if( $_GET["ファイル名"] があったら){
画像データ送信
}else{
エラー処理。ブランク画像送るとかでも
}
}
よくわからんけどこんなの?
クエリ文字列の渡し方は、URL欄のパラメータと
して表示されるGETという方法がある。
POSTでも、画像参照元のHTMLにForm書くだけ
だからそれほど難しくないぞ。
つーかHTTPは勉強しとこうぜ。
http://www.studyinghttp.net/
456 :
nobodyさん :2009/07/11(土) 17:08:21 ID:EDbsXnZV
>>455 レス、ありがとうございます。
参考にしてやってみます。
Webプログラミングは最近始めたもので、HTTPの知識皆無で申し訳ありません。
参考になるWebサイトの紹介もありがとうございます。
また何かありましたら書き込みをしたいと思います。
457 :
nobodyさん :2009/07/11(土) 17:16:51 ID:MrwFrSXN
また質問させていただきます。 今ローカルで動くかテストして、アップロードしてみたんですけど サーバ上では上手く動かないみたいです(途中から何も出力されなくなりました) file_get_contents unserialize mb_strimwidth mb_convert_encoding こういった関数を呼び出している部分です、このような関数は対応していないというか 許可していないレンタルサーバって多いのでしょうか?
458 :
nobodyさん :2009/07/11(土) 17:19:44 ID:BAvUHxXp
>>457 何も表示されないのはエラー処理がOFFになってるだけ
あとレン鯖に入ってるPHPのバージョンとかも確認汁
>457 PHPのバージョン情報とかは絶対レン鯖のFAQだからまずそっち調べろカス
460 :
nobodyさん :2009/07/11(土) 21:41:38 ID:EDbsXnZV
461 :
nobodyさん :2009/07/11(土) 23:25:33 ID:EDbsXnZV
すいません。できました。 皆さん、ありがとうございました。
462 :
nobodyさん :2009/07/12(日) 05:19:16 ID:wh3eRKvy
if($hoge) echo 1; displayerrorOFFでこういう場合issetを使う必要はあるのでしょうか? 見えなくても警告が出ないように書いておいた方が速度も早いのでしょうか? よろしくお願いします。
変数はきちんと初期化して使うのがくだらないバグを避ける一つの手
isset使わないと、E-Noticeが出るよね?
issetを使わないからじゃなくて、undefinedだからでしょ?
if(isset($hoge)) if(!empty($hoge)) if($hoge != "") if($hoge <> "") どれが一番良いの?
そういう書き方をすると、Noticeを切らざるを得ない。 ($hogeが初期化されていない事がある、という前提で) そしてNoticeを切っていると、もっと複雑な場所のバグに気づかなくなるかもしれない。 エラーメッセージなしでコーディングするのは、懐中電灯だけで暗闇を歩くようなもの。 電気のスイッチが壁にくっついてるなら、点けておくに越した事はない。 速度は気にしない。 バグを未然に防ぐ事と、0.1msにも満たない処理速度の向上を天秤にかけて、後者を取るのは無能なアマチュアだけ。 つうか、そんな細かい処理の速度が気になるような状況なら、そもそもPHPを使う、という事自体大間違いだしな。 書き方で迷った時は、基本的に常に「速度が速いか」じゃなくて「バグを見つけやすいか」「コードを読みやすいか」で判断するべき。 >466 そもそも意味が違う。 $hogeに0、null、空文字列("")を代入した場合、$hogeを初期化しない場合、の4パターンで実行結果がどう違うか試してみれ。
早いからという理由で三項演算子をネストしまくってバグを入れたり、書いてるうちに 訳がわからなくなったとか言ってたりするのはもう見てらんない
469 :
nobodyさん :2009/07/12(日) 16:05:02 ID:D+DGjsUg
documentrootの外にあるjpgを出力させるプログラムを書いたんですが動きません(画面真っ白になります)
どこがおかしいのでしょうか。。
<?php
include_once "config.inc.php";
i18n_http_output("pass");
header("Content-type: image/jpg");
echo "<html><body>";
echo "<img src='";
readfile(_HOGE_DIR."123.jpg");
echo "' />";
echo "</body></html>";
?>
定数_HOGE_DIR は保存用ディレクトリ /var/www/hoge/を出力 します
画像のパーミッションは644でも755でもダメでした
よろしくお願いします
参考にした情報はここの一番下です
http://www.stackasterisk.jp/tech/php/php02_01.jsp
> header("Content-type: image/jpg"); > > echo "<html><body>"; お前は何をやってるんだ
472 :
nobodyさん :2009/07/12(日) 17:14:16 ID:eWzEgYjh
>>471 ホントすみません。今、変だとおもって
imgOutput.php
---------------------------
<?php
i18n_http_output("pass");
header("Content-type: image/jpeg");
readfile("/var/www/hoge/123.jpg");
?>
img.html
---------------------------
<html>
<body>
<img src="imgOutput.php" />
</body>
</html>
に分割しました。が、画像欠けマークが出ます
なんででしょうか
imgOutput.php を開いてみ
474 :
nobodyさん :2009/07/12(日) 17:24:01 ID:eWzEgYjh
>>473 何も出力されないです。。
パスがおかしいのかなぁ
ソースも真っ白だし、 パーミッションの問題でしょうか?
hogeディテクトリは755です
とりあえずi18n_http_output("pass"); を外せ
476 :
nobodyさん :2009/07/12(日) 17:49:29 ID:eWzEgYjh
>>475 どひゃー! うまくいきました!
これで作業が進みます、ありがとうございました!
あの一行は何だったんでしょうか、意味もわからず書いてましたが
自分で意味のわからない関数を書く男の人って……
もうさ、いい加減テンプレにdisplay_errorsとerror_reportingについて載せようぜ
>>424 文章の流れからするとそれっぽいんだけど、
>例えば「cの前にbがついていると無効」みたいな設定が出来て
>「bc」のみを取得したい
って、「bcがないときにbcを取得したい」って読めるんだよ。
俺が馬鹿なだけだったらすまん。
482 :
nobodyさん :2009/07/13(月) 12:35:32 ID:YQaPJde3
GD側でBMP対応させてないと無理だろう 別にユーザー関数でいいじゃない?
クラスのメソッドに、標準関数と同じ名前は定義しちゃいけないの? 動作はするのにEclipseがエラー吐くのでキモイです…。 $user->list(); みたいな。
485 :
484 :2009/07/13(月) 14:41:02 ID:dllOgc2X
sageてしまいたいへんうんこでした申し訳ないです。
自宅鯖にphpブログを設置して設置できてるかの確認までは問題なかったんですけど 管理者画面に入ろうとすると真っ白なページが一瞬読み込まれてその後トップページに戻ってしまいます。 ここで質問することなのか分かりませんがどなたか助けてくださいませんか?
487 :
486 :2009/07/13(月) 15:49:20 ID:OhNG2SXC
すみませんID出し忘れました ちなみにDLしたのはPHPウェブログシステム3.1です
webサーバのログに何かでてない?
使ったことないしソース読まないから勘だけど 管理画面ってことはクッキーまわりとかじゃないのかな クッキー発行できなかったらトップに飛ばす処理とかしてそう ((まぁ普通はクッキーONにしてくださいって出すだろうから違うかもしれないけど) ブラウザの設定は問題ない?
490 :
486 :2009/07/13(月) 16:06:28 ID:OhNG2SXC
返信ありがとうございます
>>488 見てみたら 「CGI TerminateProcess 4856 error 5」とエラー出てました
調べてみたらエラーコード5はアクセス拒否らしいんですが心当たりがないです・・
>>489 クッキーはONです。
>>484 設定でどうにかなるか知らないけどEclipseの設定でどうにか汁
とりあえず定義しちゃいけないなんてことはない
ただ避けたほうがいいとは思う
何をするメソッドか知らないけどlistってメソッド名はちょっとどうかと思う
set get add append remove clear findとか前になんかつけたほうがいいんじゃないかと思う
492 :
484 :2009/07/13(月) 16:54:04 ID:dllOgc2X
>>491 ありがとうございます。
どうにかしてみようとしましたが、たぶんどうにもならないようです。
いろいろ検証したところ、
microtime()などのメソッド名ではエラーにならないので、
どうやら「標準関数と名前が重複しているからエラー」ではなく、
「(標準関数と誤解した上で、)代入先なし&引数なしの文法エラー」のようです。
(かといってmicrotime()の場合になぜ誤解しないのか不明ですが)
というわけで、PHPではなくEclipseのQ&Aになってしまいました。
すみません。
// list()という名前については、
// まぁ本格コーディングの前のプリコードなので実際には変えると思いますが、
// 今後、本番で遭遇しないとも限らず、きもちわるいと思って質問させていただきました。
>>490 見慣れないメッセージとおもってググったらAnHTTPDでWindowsかい。
環境詳しく書いてくれ。
494 :
nobodyさん :2009/07/13(月) 17:47:02 ID:OhNG2SXC
>>493 winXPSP3+AnHTTPD+PHP5.3です
winでの鯖運用はトラブルが多いと言われているのは知っていたんですが、
気まぐれではじめたものでしたので、、それにまさかこんな小さなことでもトラブるとは思ってませんでしたorz
ブログはレンタルサーバではじめようと思います これ以上はスレ違いになりそうですし、、
PHPでCGIエラーというのがよくわからんがAnHTTPDだとそういう動作なのかなあ まあレンタルサーバではすんなり動くと思うし使い方、設置の質問だとスレ違いな気も。
496 :
nobodyさん :2009/07/13(月) 18:14:17 ID:OhNG2SXC
>>495 ですよね。スレ汚し申し訳なかったです。
レスしてくださった方々ありがとうございました。
どこのサービスでもやってる、メアド入れてユーザー登録→確認メールが届く→一定時間内にメールに書いてあるURLをクリックすると登録完了→ユーザー名&パスワードでログイン というのを簡単に実装できるライブラリみたいのないでしょうか? ぐぐったらありそうだったけど見つからなかったので
>>497 CMSならそういうの実装しているものが多い。
自分で実装してみるのも勉強になるよ
>>497 そういうのを楽にやりたいならフレームワーク(CMS含む)
>484 listは関数ではなく言語構造。
502 :
nobodyさん :2009/07/13(月) 22:43:39 ID:aQVGItnX
$var = "hoge.php?width=100&height=100" $var2 = "<a href=\"".$var."\">link</a>"; print $var2 というような処理をしてて、htmlとして$var2のaタグを出力してるんですが そのhtmlが hoge.php?width=100&height=100 となって正しく処理できないことがあります (期待通り hoge.php?width=100&height=100 となることもある) どうしたら良いですか?
503 :
nobodyさん :2009/07/13(月) 22:54:48 ID:aQVGItnX
あ、書き間違えてました、 間違えてる方の表記は width=100 &.a.m.p.; height=100 ってなります (勝手にserializeがかかった状態?になってる) *ampの間の「.」は無視してください どうしたら良いんでしょうか?
>正しく処理できないことがあります 何回かやって違う結果が出るということならなにか勘違いしてるか壊れてるかだろうね
505 :
nobodyさん :2009/07/13(月) 23:11:56 ID:aQVGItnX
>>504 どうもありがとうございます
もう少し確認してみます
どっかで htmlspecialsharとかやってないのかな
507 :
503 :2009/07/14(火) 01:43:49 ID:+BJ8SPET
解決しました、ありがとうございました
どのように解決したのさ
&が&になるなら、&amp;amp;と書けばいいのだよw
510 :
nobodyさん :2009/07/14(火) 12:02:12 ID:lTtAPwXi
質問です。 某管理システムの作成を依頼されました。 しかし、そのシステム自体はスタンドアローンのみで使用するということでした。 後DBもフリーのもの(未確定)を使用して欲しいとのこと。 技術的には可能であるけど、導入する際の手間もありますし スタンドアローンならPHPじゃなくて、VBAでも良さそうに思えます。 依頼先にそう伝えたいと考えているのですが、私の見方はおかしいでしょうか?
>>510 客が何の目的でフリーのシステムを要望しているのかわからんじゃないか。
ある程度LinuxやBSDのインストールや設定ができる人が客先にいて、必要
とあらば規模拡張が自分でできる、ということなら、フリーのツールで揃える
のは悪くない。
MSのツールの方が開発効率がいいなら、初期導入に必要な機材、ソフトの
コスト、開発コストを上げて比較して先方に提案するのがいいんじゃないか。
スタンドアロンなら、OOoのDBを使うって手もあるぞ、要件が合致してるなら。
512 :
510 :2009/07/14(火) 12:25:39 ID:lTtAPwXi
>>511 返信有難うございます。
依頼先とは長い付き合いですが、Linux、BSDのインストール、設定が出来る人はいません。
また、管理システムを提供する先にいるかは後ほど確認してみようと思います。(多分居ないと思います)
513 :
nobodyさん :2009/07/14(火) 12:52:46 ID:pcPGspml
腕試しにyoutubeのような類似サイトを形だけ作ってみたいのですが 動画の変換というプロセスに関しては コマンドラインで動作する外部プログラムを使用してexec関数などで変換するのでしょうか? PHPで何か簡単に変換できるようなマルチメディア関数みたいのってないですかね? 動画形式はflvかoggあたりがいいのですが
ffmpegでシェル経由でやってみたら? タイムアウトあると思うから、一時ファイルなり、DBなりを使って、 別プロセスで変換プロセスをキックするのがいいんじゃないかな。
515 :
nobodyさん :2009/07/14(火) 15:23:52 ID:bh9ZWFGS
$db = sql_connect("hoge_db"); $query = "select * from foo_bar_table"; $res = mssql_query($query, $db); $row = mssql_fetch_row($res); mssqlを使ってるのですが、取得した文章が途中で切れてしまいます。 なぜでしょうか? 300文字くらいあるのが、150文字くらいで切れてしまいます。
516 :
nobodyさん :2009/07/14(火) 15:50:50 ID:ToMbC0F2
>>515 tinytext(256バイト)のカラムが日本語128文字くらいで切れてるとかじゃなくて?
>>515 ひとまず思いつくのは
・実際はカラム型の文字数が足らなくて150文字くらいしか入ってない
・なんか途中に特殊な文字が入っていて切れてる
ぐらいしか思いつかなかった。
役に立ちませんかすいません。
まずはそこから確認してみては・・。
書いてるうちに
>>516 さんが書いてるわ。
>>516 も言っているがカラム型からチェックを進める。
300あることと、150で切れてるのはどうやって確認した?
519 :
515 :2009/07/14(火) 15:57:50 ID:bh9ZWFGS
返信ありがとうございます。 nvarchar(4000) でテーブルにはちゃんと文字列が入ってます。 php.iniにもそんな制限ないです.デフォルト値を用いています。
>>520 横やりだがこんな原因もあるんだなぁ
eclipse使ってないけど
522 :
513 :2009/07/14(火) 16:24:44 ID:???
>>514 アドバイスどうもありがとうございます。
早速簡単な実装して実験してみたいと思います。
523 :
515 :2009/07/14(火) 16:39:52 ID:???
>>520 違います
今分かったのはテーブルにinsertするのも115文字しかできません。
windows server 2003 SQL server 2005 php ver 5.2.x
>>523 518 名前: nobodyさん [sage] 投稿日: 2009/07/14(火) 15:55:34 ID:???
300あることと、150で切れてるのはどうやって確認した?
バイト数と文字数の違い? 「あ」は 2byte だけど 1 文字、みたいな。
526 :
515 :2009/07/14(火) 16:48:28 ID:???
エディタで文字数カウントしました。
527 :
nobodyさん :2009/07/14(火) 16:57:52 ID:ToMbC0F2
>>526 の書き込みによって、
>>515 氏の直面している問題以上に
>>515 氏本人が手強い相手であることがわかった(笑)
1. insertでも115文字しか入らないなら、300文字あるはずの既存データはどうやって入れたの?
入ったのは日本語で115文字?既存の300文字は日本語?ちなみに文字コードは?
全部半角のASCII文字でも115文字?2倍の230文字?ひょっとして256文字?
2. selectで150文字程度、insertで115文字の意味するところは?
毎回115文字?文字列の中身(全角半角比率など)によって誤差がけっこうある?
誤差があるとはいえselectのほうがたくさん文字が入るのは確かだったり?
投げたselect文とinsert文を差し支えなければフルで見せてほしい。
とか。
>>526 ID出したほうがいいよ、混乱するし。
あと
nvarchar(4000)
であることをどうやって確認したのかも一応聞いておきたい。
529 :
nobodyさん :2009/07/14(火) 17:02:21 ID:NN1hGdEX
昔自分が作ったプログラムを直す時、 糞過ぎて泣きそうになると気ないですか?
530 :
nobodyさん :2009/07/14(火) 17:06:17 ID:ToMbC0F2
select文は
>>515 にフルでシンプルなのが書かれてたね、すまん。
可能なら、$rowをその後どう扱って「150文字くらい」を表示させたのかまで書いてほしい。
- いつか alter table したつもりなだけで実際には256だったりするのではないかと疑ってみたり…
- 4000じゃなくて400だったり…
SHOW COLUMNS FROM foo_bar_table;
を試してみてほしい。可能なら。
phpmyadmin でも入れて、そこからテーブル定義とか、
SQL文の応答とかみてみてはどう?
>>515 >>529 いやぁ、作ったものは、なんだか愛着あって嬉しいよ。
実装がひどいってのはあるけどなw
逆に、こういうところ苦労してたんだ、と知ることで、
もっと堅実な、またはもっと効率のいい設計や、製作方法
を勉強する機会になったりもすると思う。
532 :
515 :2009/07/14(火) 18:42:20 ID:bh9ZWFGS
DBのデータ型をnvarcharからtextに変えたら直りました。 みなさんありがとうございました。
原因は何なの?
534 :
nobodyさん :2009/07/14(火) 21:09:07 ID:O9yJ0RDj
>529 半年前の自分のコードを見直して糞だと思えないなら、その方がよほど問題。 なんとかしたいなら、ファウラーの『リファクタリング』でも買って読め。
536 :
529 :2009/07/15(水) 00:11:00 ID:VnFaQFKD
みなさん、ありがとうございます! 2〜3年前に作ったプログラムが糞過ぎて涙目でしたw テンプレート(HTML部分)と処理するPHPが混雑してて見難かったり 変数名や表示名がわかりづらかったり、色々あります。 とりあえず、修正する上でセキュリティ向上を意識して 直せる限り直したいと思います。
何でもクラスにしたがる奴と自作クラスは作らない奴では、どっちが好き?
関数好きな奴
何でもクラスに入れたがる人って、クラスが好きなのかOOPやってんだぜという 満足感が欲しいのかどっちなんだ
windows + lighttpd + fastcgi + php 5.2-nts なんですが virtual host毎にinclude_pathを設定したいので vhost毎に php-cgi.exe -b 127.0.0.1:%PORT% -d include_path="." とかやってますが、これ以外に方法ないでしょうか。 起動はバッチですればいいんですが、vhostが増えると保守も面倒だし その分だけ起動されちゃうのでイマイチ感が満天です。 PHPRC環境変数にphp.iniのパスを設定しても読んでくれないし、 -d include_path だと複数パスの指定に問題があるしで。 apache でいう php_value include_path とかできれば幸せなんですが どなたかいい方法ご存じでしたらお願いします。
>>539 オブジェクト指向パラダイムを理解しているやつはそんなこと思いもしないよ
自然と書いてるもの
そもそもオブジェクト指向でしか設計できない言語もあるわけで
そういうところから来た人間はわざわざ手続き型でやるなんてことはしないでしょ
設計思想を理解していないやつが無理に書いてるという話ならば
オブジェクト指向を理解するには通らないといけない道だから
熟練者には失笑ものでも生暖かく見守ってやらないといけない
543 :
nobodyさん :2009/07/15(水) 13:50:45 ID:yniO2VZr
includeで外部のphpファイルを読み込んでいますが、 この外部phpファイルが構文エラーでも停止させない方法はありませんか? requireと違いincludeはファイルが無くても停止しないけど、 それでも構文エラーだと停止してしまいます。 構文エラーで停止させたくない理由は、この外部phpファイルは、 システム稼動中に例外的な理由で修正する必要があるが、 その修正にミスっても完全停止まではさせたくないからです。
include先で try ブロックつくればいいじゃないの
545 :
nobodyさん :2009/07/15(水) 13:55:04 ID:yniO2VZr
tryブロックで構文エラーが防げるんですか? それでも、括弧の対応ミスで、tryブロックのそのものの 最後の括弧が足りないというミス等は防げないと思いますが?
構文エラーは回避無理。 つーか、include するモジュールは、最低限 構文チェックくらいやっておいた方がいいと思うぞw
547 :
nobodyさん :2009/07/15(水) 13:59:48 ID:yniO2VZr
念のため、include元でtryブロックを作りましたが、 やっぱりだめでした。
perlならeval
549 :
nobodyさん :2009/07/15(水) 14:02:56 ID:yniO2VZr
>>546 やっぱりムリですか。
> つーか、include するモジュールは、最低限
> 構文チェックくらいやっておいた方がいいと思うぞw
ふぇ〜るせ〜ふ ってやつですw
なんかのフレームワークや(PHP構文が使える)CMSなんかで
ユーザーが入力したPHPコードを含む文章に構文エラーがあったときに、
分かりやすいメッセージかなんかを表示しているのがありそうだと思ったんですけどね。
550 :
nobodyさん :2009/07/15(水) 14:04:01 ID:yniO2VZr
552 :
nobodyさん :2009/07/15(水) 14:06:13 ID:yniO2VZr
あっと、/usr/bin/php -l コマンドを呼び出して 構文エラーチェックってのは思いついたんで それ以外でお願いします。
553 :
nobodyさん :2009/07/15(水) 14:09:39 ID:yniO2VZr
?>
>>419 乱数をとりあえずDBにつっこむ。
Primary Keyに設定しておけば重複は排除できる。
ユニークになればなんだっていいじゃん 想像されてもいい値ならオートインクリメントだっていいぐらいだ
オートインクリメントは連番管理が必要になるから uniqid が楽だと思うけど
DB使うならオートインクリメントが楽。 登録後じゃないとIDが出てこないという欠点はあるが。 でなきゃ、uniqid だね
MySQLだとそっちにお任せしてしまう。
データベースに格納するためのキーを作るのなら、 直接データベースに入れればいいけど、 単に重複しない値を得るだけならuniqidの方が楽だろw 関数一個でいいんだぜ。 関数一個ですむことを負荷増やしてまでデータベースでやるとか あほらしいw
562 :
nobodyさん :2009/07/16(木) 06:08:55 ID:uYVqD/1s
phpで、○○bytesを超えるデータの2重、や3重ダウンロード禁止というのをやってみたいのですが 何かアドバイスくださいませ。
2重ダウンロードって?
クッキー(セッション)を使う 鯖側でIPを記録する とかしてカウントする クッキー(セッション)は消せるしIPも多くの人ならすぐに変えられるから 完全な対策は無理 ファイルのサイズを調べる関数はfilesize()
565 :
nobodyさん :2009/07/16(木) 13:11:50 ID:uYVqD/1s
>>564 ありがとうございます。
なるほど・・
ipを記録する方法でやってみようと思います。
一応phpでipを記録する方法で考えてみたのですが、
0.データにアクセス
1.filesize()で○bytes以上であれば以下を実行
2.ip取得
3.記録されている(ダウンロード中の)ip全てを参照して、2で取得したipがあれば弾く
4.2で取得したipが一致しなければ、このipを記録
5.データをダウンロード開始
6.データのダウンロード終了、もしくわ途中で終了したりすれば記録したipを消去
で、いきなり3で詰まってしまいました・・
4で記録するipを3で参照するつもりで、
記録しておきたいのは、データのダウンロードしている間だけなんです。
でもこの”間だけ”という操作をどうすればいいのかよくわかりません(6のデータ転送”終了時”の判断方法も)・・
そもそも1〜6の操作が的外れかもしれませんが
どなたかよい方法を教えてくださいよろしくお願いします。
566 :
nobodyさん :2009/07/16(木) 13:14:57 ID:uYVqD/1s
>>563 データのダウンロード中に、さらに同一ipからデータをダウンロードされる、、ということです、説明不足でしたすいません
567 :
軟式PHP :2009/07/16(木) 13:16:31 ID:???
PHPじゃないとどうしてもダメ? mod_limitipconnとか使えないのかいな。
568 :
nobodyさん :2009/07/16(木) 13:18:30 ID:iIDXJDL1
一番簡単な方法 ダウンロードボタンクリック→JavaScriptでボタンをdisabledにする
569 :
nobodyさん :2009/07/16(木) 13:31:14 ID:uYVqD/1s
>>568 なるほど、でも新しくページをリロードされたりクッキーとかと同じでやはり代えられてしまうのでしょうね
>>567 いえ、大丈夫です。
mod_limitipconn調べてみました、流し読みですが
なんとかできそうかもしれませんありがとうございました
570 :
nobodyさん :2009/07/16(木) 13:32:54 ID:uYVqD/1s
>>568 しかしながら、多重クリックで未然に防ぐことができるのではと思いました
ありがとうございました
こんなのDBにいれなきゃ何にいれるんだよw 大量のデータから重複のチェックなんてDBの十八番じゃないか
574 :
nobodyさん :2009/07/16(木) 15:37:23 ID:NM9P6RAC
すみません。ダブルクオーテーションを文字列から削除したいのですが、 mb_ereg_replace("\"",'',$line); とやっても消えません。 どうやったら良いのか、誰か教えてください。
str_replace('"','',$line);
こちらの環境では削除されるよ ちなみにその例ではmb_ereg使わなくてもstr_replaceでいいと思うけど コード <?php $text = 'The person said "Working is losing of life."'; echo mb_ereg_replace("\"",'',$text); 結果 The person said Working is losing of life.
577 :
nobodyさん :2009/07/16(木) 15:53:53 ID:NM9P6RAC
>>575 >>576 有難うございます。
でも、やっぱり削除されません。
何が原因なんでしょうね、これは…
pregでやってみてはどうかね・・
>>573 用途なら、
>>419 に書いてあるじゃんw
だいたいランダムな値って言っているのに、
連番を答えるやつは頭が悪いね。
>>577 環境が悪いんだろう。
これ以上の検証には、削除されない表示部分のロジックを
削らずに見せたほうがいい。
581 :
nobodyさん :2009/07/16(木) 16:08:06 ID:NM9P6RAC
>>580 有難うございます。一度違うやり方でやってみます。
>>579 答えてるやつは重複しなけりゃいいだっていう理論をもとに
質問者の求めてる「一般的ないい方法」を言ってるに過ぎないよ
ランダムな値を管理するには結局DB使うんでしょ?
ならオートインクリメントでもいいんじゃないの?っていう話
DBでランダムな値生成すればいいのでは?
DBでやるならDBでできることはDBでやったほうがいいね
不毛な争いしてんじゃねーよw
PHPのサイトって落ちてる?
世界中のどこかのPHPのサイトは落ちてるかもね。
588 :
nobodyさん :2009/07/16(木) 18:02:35 ID:wZUMSXTz
落ちてないよ 俺昨日駅で拾った
落ちてたのか・・・
>>582 > ランダムな値を管理するには結局DB使うんでしょ?
なんで決め付けてるわけ?
そんなの要件に合った?
ファイル・ディレクトリかもしれないじゃんか。
別にどうでもいいけどDB以外はあり得ないな
>ファイル・ディレクトリかもしれないじゃんか。 用途がわからないことにはなんともいえないが 例にあげたようなアプリケーションでその言い分は苦しいよ どこのレンタルサービスがそんなのファイルで管理してると思う?
593 :
nobodyさん :2009/07/16(木) 18:47:19 ID:wiET9Ah7
こんばんわ レンタルサーバーを定期更新したいと思い centOS php5の自鯖から $conn = ftp_connect( $ftp_server,21,60 );とやったところ どんなサーバーへも接続できません 何か根本的なところが抜けているとは思うのですが なにを確認するのでしょうか? phpのコンフィグで --enable ftpにはなっています
たとえDBに格納するとしても、 ランダムな値が必要とされているなら、 uniqid使うのが手っ取り早いし効率がいいでしょ? それとも簡単にランダムな値を生成してくれるDBがあるとでもいのかな? DBに格納しても重複されない値が得られるだけ。 それは決してランダムな値ではない。
uniqid使わなくてもランダムで重複しない値生成できるよ。 rand()関数使って、ランダム(かもしれない)な値を生成。 それを主キー(プライマリーキー)か一意制約(UNIQUE)をつけたフィールドにいれる。 なお主キーにnullを入れて格納しても、連番になるので要求を満たさない。 そしてデータベースに入れて、エラーになれば、 再度rand()関数を実行して、ランダムな値を生成して格納する。 この処理を繰り返す。 俺ならすなおにuniqid()使うw
596 :
nobodyさん :2009/07/16(木) 19:06:29 ID:wZUMSXTz
ユニークな発想ですね
597 :
nobodyさん :2009/07/16(木) 19:16:38 ID:9yCTA3Ep
oopの利点を具体的に教えてください。 今はよく使う関数はユーザー定義関数でまとめてるし、それで事足りています。 よく、「車のエンジンやギアなど中の精密な構造まで知らなくても 運転の仕方が分かれば車は乗れる」とかたとえ話するばか みす。する方がいらっしゃいますが、それでは分かりません。 具体的に教えてください。
よくわからないけどメール認証に使うキーだろ? DBでも乱数の生成は可能だが重複する可能性のあるただの乱数をキーに使うのはご法度 DBの算術関数操作だけで重複しないまともなキーを作成するのは可能かもしれない 自分は数学詳しくないんで具体的なやり方はわからないけど ただそんなご苦労なことやるぐらいならすでに用意されているものを使うべき 車輪の再発明だっけか? DBでできることはやったほうがいいとはいうが限度ってものがある プログラム側で簡単に実現できるならそっちを使ったほうがいい パスワード突っ込むときだってプログラム側でハッシュ関数にかけてるのと同じこった
ではお次の方、どうぞ
わからない質問はスルーかよw
601 :
nobodyさん :2009/07/16(木) 20:59:10 ID:wZUMSXTz
CMS作ろうと思います お勧めのライブラリとかありましたらおしえてください
それも作れよw
>>597 ものの考え方だからそんな難しく考えないで
オブジェクトに対する情報(プロパティ)と動作(メソッド)
これをまとめたのがクラス
パーツまで考えるときりがないのでおおざっぱにパソコンというオブジェクトを考えると
動作(メソッド)として、『起動する』 『シャットダウンする』ってのがあるね
これをソースであらわすと
class パソコン {
function 起動する() {
}
function シャットダウンする() {
}
}
こうやって最初に考えておいて後で中身を書いていくのがオブジェクト指向的な書き方
こんな調子でWebアプリケーションにおきかえて考えてみればOK
掲示板というオブジェクトを考えると
動作(メソッド)は『書き込む』 『表示する』とかあるね
class 掲示板 {
function 書き込む(内容) {
内容を書き込む
}
function 表示する() {
内容を表示する
}
}
情報(プロパティ)については割愛したけど考え方としてはこんな感じ
最初はこんな感じから始めればOK
継承とかMVCモデルとかははじめは気にしなくていい混乱するだけだから
とにかく始めはオブジェクトに必要なもの(書くべきことを)を見極めるところから
>>597 肝心な質問に答えてなかった
利点は個人でやってるうちは特にないと思ってOK
605 :
nobodyさん :2009/07/16(木) 22:09:01 ID:xcgIWd6Z
フラットに関数定義していくより、 クラス単位にまとめた方が見やすい。継承も使えるし。
606 :
597 :2009/07/16(木) 22:13:58 ID:9yCTA3Ep
>>603 >こうやって最初に考えておいて後で中身を書いていくのがオブジェクト指向的な書き方
それはオブジェクトというよりは段階的詳細化の気がするなあ。。
gotoとラベルでも同じことはできるわけで。
書いてるじゃん
>>608 手続きとデータをまとめて持てる、っていうのと
(言語にもよるかもけど知れんが)他人から隠せるっていうのが利点かな。
>>603 のBBSの例で、例えば書き込み先がファイルだとする。
関数だと、呼び出し元がファイルポインタを引数として渡すか、
あるいは関数内でグローバルスコープにする必要があるわけで
つまり「ファイルポインタ」の存在を気にしないといけない。
ファイルポインタはコンストラクタで開けばおk
WEBプログラムについて詳しい人に質問があります。 2chで規制を食らった時に書き込みをする方法について某スレで紹介が ありそこでその存在をしったのですが、 そのサイト上のページに ・書き込みを行いたいURL ・名前 ・投稿内容 ・(自分の携帯メールアドレス) を入力し「送信」ボタンをクリックすると自分の携帯メールにURLが送られて来て そのリンクをクリックすると2chの投稿フォームに入力した内容が設定される のですがあれはどうやっているのでしょうか?
>>584 大抵の場合、先にネックになるのはDBだから
PHPで簡単にできるならPHPでやってしまうってのは悪くはない。
>>614 どうしてご指名なのかは知らんが、getでパラメータ渡してんじゃねーのかな。
その携帯に送られてきたURL晒してみ?
>>597 簡単にいうと、カプセル化、ポリフォーフィズムかな。
完璧に動き、仕様変更は絶対ないという前提なら、それでもいいかもしれん。
2-3行で利点を説くのは難しいわい
>>612 面白いこと考える奴がいるんだね、商売上手だなぁ
WebProg 初心者の質問スレで質問すべきだと思うけど。
その携帯に送られてきたURLにユニークのgetパラメータがついてるんだよ
で、それをクリックするとリンクした先のページでそのパラメータを判別して
それに応じた書き込みデータを投稿するようになってるんだと思う
(きっと送信完了画面にはあれこれ広告が貼り付けてあるだろうねw)
619 :
593 :2009/07/17(金) 09:41:13 ID:189Q4h2A
Linux板へ行ってみます
>>603 クラス1つで書き込みとか表示とかすべてこなしてくれるのに
クラスのファイルが複数でてくるのでしょうか?
1ファイル以外に納めるやり方なんてあるのか
>>597 オブジェクト指向ねぇ。
ユーザー定義関数としてまとめてるでしょ?
いろんなプログラムで汎用的に使う関数は
きっと別のファイルに分けてまとめているはず。
オブジェクト指向は、このまとめ方をさらに発展させたものだよ。
いろいろごちゃごちゃ言う人いるけどねw
oopの本質はポリモることだろ データと関数をまとめただけとか低レベルすぎ
じゃあポリモを実現できる本質はなんだよw そこを言えよw
626 :
nobodyさん :2009/07/17(金) 12:28:29 ID:+Z3bH2zE
【OS名】win vista homepremium 32bit 【PHPのバージョン】php5.30 <?php //setting.txtの読み込み { $setting_txt = file( 'setting.txt' ); foreach( $setting_txt as $setting ){ $setx = split("\n", $setting); $set[$setx[0]] = $setx[1]; unset($setx); } } ?> これを実行すると Warning: implode() [function.implode]: Invalid arguments passed in X:/index.php on line 6 Warning: implode() [function.implode]: Invalid arguments passed in X:/index.php on line 6 何か根本的な勘違いをしてるような気がするのですが 自分ではわかりません指摘していただけると嬉しいです
627 :
nobodyさん :2009/07/17(金) 12:32:19 ID:WCCLHa3V
アップロードされたファイルを受け取って処理するケースについて教えてください。 心配しているのが、大量のファイルを悪意でアップロードされた場合に、 どのように防ぐか悩んでいます。 最大アップロードサイズを指定しても、それに満たないサイズで、 大量にアップロードされた場合に防ぐ方法が分かりません。 質問1: クライアントからアップロードされたファイルを一時ファイルに置く処理(upload_tmp_dirで指定された場所に置く処理)は、 どのタイミングで行なわれるのでしょうか。 悪意のユーザーと分かった時点で、アップロード中に処理を切りたいと思います。 質問2: upload_tmp_dirに置かれた一時ファイルは自動的に削除されますか? Windowsでは、アップロードされた一時ファイルが探しましたがありませんでした。 「C:\WINDOWS\Temp」のところを見ました。 スクリプトの処理が終わると自動的に消去される仕組みでしょうか。 宜しくお願いします。
そのコードのどこにもimplodeなんて使われてないのでもっと上のほうでは?具体的には6行目
>>627 悪意のユーザってどうやって判別するの?
一時ファイルを削除するのはOSの仕事じゃないですかね.
まぁ別にPHPから削除してもいいと思うけど
630 :
nobodyさん :2009/07/17(金) 12:56:05 ID:WCCLHa3V
>>629 レスありがとうございます。
悪意のユーザを判定する一つとしては、
小さいファイルを何回も何回も短時間にアップロードを繰り返すようなケースでしょうか。
そのほか、サーバーに負荷が掛かるようなケースに制約を掛けたいと思います。
>>630 運用してみればわかると思うけど、そんな暇なユーザーいないよ
632 :
nobodyさん :2009/07/17(金) 13:09:01 ID:WCCLHa3V
>>631 そのように信じたいのですが、
暇なユーザーかどうか分かりませんが、
毎日毎日届くスパムメールやウィルスなどのことを考えると、
セキュリティーのために、予算の許す限りで考えられる得る対策はしたいと思っています。
要するにアップローダがブログの画像投稿とか そのようなシステムかな? 無駄に制限をつけるのなら、最初からそのシステムの思想に 欠陥が在るように思えるが、いかがか?
失礼 ×アップローダがブログの画像投稿 ○アップローダかブログの画像投稿 文章を間違えました。 アップローダならばDBにアップロード時刻を保存して時間で制限をかける 画像投稿ならファイルサイズにて制限と思いますが、 細かいファイルのやり取りで制限をつけるなら、クッキーで カウントさせて回数を制限させるのが簡単と思います。 それではダメですか?
>>597 継承とか、オーバーライドとかオーバーロードを理解すると便利さが分かるかもしれない。
でも、現時点で困ってないならいらないんだと思う。
複数人での大きめの開発とかだと有効だけど、一人で書く分にはそれほど効果は上がらないかも。
>>633 セキュアな機能は多くの場合無駄にはなるが、
その無駄が正常なシステムの運用を支えるのであって、
その無駄を欠陥と考えるのは、平和主義者の素人だな。
連続投稿制限がセキュア(笑)
638 :
nobodyさん :2009/07/17(金) 14:31:47 ID:F6lKm6fi
拡張子がphpのときのみ、phpを実行できる というような設定はできますでしょうか? 例えば、test.htmlが、 <html> <body> <?php echo phpinfo(); ?> </body> </html> であったとしても、拡張子がhtmlなのでecho phpinfo();は実行されない という感じです。 よろしくお願いします。
>>638 それはPHPとは関係ない
Webサーバ側の設定でしょ(htaccessとかの話)
深読みしてPHPのソースを表示したいなら
拡張子phpsにする
htaccessにAddType application/x-httpd-php-source .phpsを追加
セキュア機能って シス管がシステムをしっかりと安定させてトラブル対策を少なくしているより トラブル発生しまくりで対応に動いている方が働いていると思われるのと同じだよな
641 :
nobodyさん :2009/07/17(金) 17:07:31 ID:NiuWIla/
642 :
nobodyさん :2009/07/17(金) 17:50:12 ID:raMKvGDh
ゼンドガードが高すぎるのですが割れ落ちてないですか? またはゼンドガードに代わる暗号化ソフトやコンパイラ無いですか? ソースが見えるのはともかく、データベースのパスワードも丸見えなのはセキュリティ上どうかと思います。 あとユーザー関数を使う度に呼び出すのではなく常にメモリ上に置いておきたいのですが そういうのできますか?
644 :
nobodyさん :2009/07/17(金) 17:56:15 ID:kh/NJMur
ウレチーゴメンネー オワビニ、ライチモテキタヨー ウレチーライチシュキダッタヨネ! キョウモ、イッパイモッテキタヨー
645 :
nobodyさん :2009/07/17(金) 17:57:02 ID:kh/NJMur
ごめんなさい誤爆しました
>>642 お前にぴったりの言語がある。「ひまわり」
>>642 >データベースのパスワードも丸見えなのはセキュリティ上どうかと思います。
なんで?
俺は、HTTP非公開領域にiniファイル置いて ini_array で読み込んでる
public_html以下においてアクセスできるようにしとくとか 公開FTPにおいてあるとか人為的流出ならマヌケと言わざるをえないけど しっかりとした対策をした上でサーバの脆弱性を突かれて見られてしまったとかなら もうそれはどうしようもない話 レンタルサーバならなおさら DB鯖の脆弱性ついて直接ハッキングされるなんて可能性も捨てきれないわけで 通常運営するにあたってちゃんとした対策しができてるならそれ以上の過度な対策は必要ない やっても無駄だから
セキュリティー 心配するほど 人来ない orz
651 :
nobodyさん :2009/07/17(金) 22:42:09 ID:vZoTOxod
質問です。以下の条件の時、 $id = $_POST['id'][$i]; //3を返す $var = "DB_lessonPic".$id;//DB_lessonPic3を返す $_POST['{$var}']; で3を返すようにしたいですがうまくいきません どうしたら良いでしょうか?
意味が良くわかりません。 強いて言うなら、$_POSTはスーパーグローバル変数なのでコード内でキーや値を変えないほうがいいです
エスパーすると、何らかの已むに已まれぬ事情で$varに色んな変数(DB_lessonPicX) を突っ込んで、それに応じたXだけを返すようにしたいんだろう。 何でそんなことをしたがるのかは別のエスパーのために取っておく。
654 :
nobodyさん :2009/07/17(金) 22:55:54 ID:vZoTOxod
>>652 どうもありがとうございます
フォームのnameとして
DB_lessonPic1,DB_lessonPic2,DB_lessonPic3,,,って感じに末尾の数値が変わるものがあるんですが
受けてで、それぞれのvalueを取得したいんです。
ただ末尾の数値が何になるかは動的なものなので($_POST['id'][$i]のvalueに決定される)
$var = "DB_lessonPic".$id;
$_POST['{$var}'];
これでうまくいくかなと試してみたけど失敗してる次第です
ダメなのかな
>>654 とりあえずエラーでてるならかきなよ
シングルクオートでは{}は使えない
ようするに$_POST["{$var}"]としないとだめ
$varがStringならそのまま$_POST[$var]でいい
まぁ何がしたいんだかよくわからないけど
$_POSTには連想配列でPOSTされた値が入ってるから
$_POST[x]がわからなくても
foreach ($_POST as $key => $value) {
echo $key;
}
これでわかるはずだ
訂正 $_POSTには連想配列でPOSTされた値が入ってるから ↓ $_POSTには連想配列でPOSTされたキーと値が入ってるから
657 :
nobodyさん :2009/07/17(金) 23:45:23 ID:vZoTOxod
>>655 ,656
なるほど、参考にさせていただきます
ありがとうございます!
658 :
nobodyさん :2009/07/18(土) 09:15:53 ID:wE0p3a0A
シングルクォートとダブルクォートの違い
659 :
nobodyさん :2009/07/18(土) 10:53:15 ID:FK9dZ1QC
ArrayObjectって使ってる方いますか? PHP5.2.0の開発でオブジェクトとして扱える配列みたいな感じで 使ってみてたんですが、 php5.1.6では $array['hoge']['hoge'] = 'hoge'; みたいな連想配列的な代入をするとエラーになるんですよね。 PHP Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference これの原因や対処法などお教えいただけないでしょうか…。
追加はappendメソッドでやってください
661 :
nobodyさん :2009/07/18(土) 17:51:24 ID:pPEtcMUp
socket使ったHTTPのレスポンスヘッダ(?)を得るOOPで書かれたスクリプト(100〜200行くらいの)が 以前どっかのブログか何かに掲載されていたのですが、見つけられません。 知っているかた教えてください。
662 :
661 :2009/07/18(土) 17:56:26 ID:pPEtcMUp
見つかりました。自己解決
どこにあったか書いとけよ
ぐぐれかす
665 :
nobodyさん :2009/07/19(日) 05:02:12 ID:eVfI2UBD
【OS名】centos
【PHPのバージョン】php5.26
【連携ソフトウェア】なし
【質問内容】
簡易掲示板を作成しているのですが質問があります。
テキストファイルで読み込んだ内容をhtmlで出力し、
出力した内容の横にテキストエリアを設置して、そのテキストエリアに書き込みをし、
保存ボタンを押すと保存され、日付と共に出力されるようにしたいのですが、うまくいきません。
どのようにすれば同一php内でこういう処理ができるのでしょうか?
読み込むファイル、phpファイルは以下のような内容です。
読み込みファイル data.txt
A田A男
B川B太郎
C上C子
D山D絵
本体PHPのhtml出力部 sc.php
サークル 一言コメント
氏名
A田A男 [来週火曜日は試験があるから参加できません!ごめん!]2009/7/19
B川B太郎 [金曜の飲み会出席する人、メール頂戴 →
[email protected] ]2009/7/13
C上C子 [ ] //書き込みなし
D山D絵 [夏休み合宿の詳細、誰か教えて!] 2009/6/21
こんな感じです。
666 :
nobodyさん :2009/07/19(日) 05:18:16 ID:56+I2Wt4
>>665 「うまくいきません」ってことは、
「うまくいくはずなのに」と思ってるスクリプトがすでにあるのかな?
だとすれば、その大まかな流れでも書いてもらえると参考になります。
それとも、「うまい方法が思いつきません」って意味なのかな?
その場合は、「○○しようとすると○○なのでダメだ、うーむ」みたいな、
これまで悩んだ過程や現状の悩みを書いてくれると参考になります。
667 :
nobodyさん :2009/07/19(日) 05:32:26 ID:eVfI2UBD
>>666 説明不足で申し訳ありません。
スクリプトは自分で書いていっています。
現在、テキストファイルを読み込んでhtmlに出力されるところまでは
完成していて普通に動作しているのですが、書き込みの部分を
どういう風に処理してよいのかわかりません。
なのでうまい方法が思いつきませんの方が正しいです。
考えているのは、配布されているフリーの掲示板のように書き込んだ内容を
datファイルなどに保存をして、phpを開くたびにdatファイルを読み込み、
それぞれの人物のテキストエリアの内容と日付を表示させるようにしたいのですが、
この場合、A田A男の人物IDかなにかを設定して、A田A男のidが1ならば、
datファイルには1、コメント内容、書いた日付 的な物を書き込んで、読み込ませるようにしたら良いのでしょうか?
また、保存ボタンを押した場合、どのようにすればphpのhtml部を更新し、datファイルにデータを書き込みできるかでも悩んでいます。
長文ですいません。
1行掲示板なんてフリースクリプトがいくらでもあるから検索して既存の奴使ったほうが吉
669 :
nobodyさん :2009/07/19(日) 07:52:27 ID:56+I2Wt4
>>667 >>665 を見る限り、実現したいのは「各メンバーの近況ひとこと欄」的な仕組みでしょうか?
最新1件しか表示しなくていいのなら、ほぼそのまま以下のテキストファイルを保存しておくのが簡単かと思います。
> A田A男 [来週火曜日は試験があるから参加できません!ごめん!]2009/7/19
> B川B太郎 [金曜の飲み会出席する人、メール頂戴 →
[email protected] ]2009/7/13
> C上C子 [ ] //書き込みなし
> D山D絵 [夏休み合宿の詳細、誰か教えて!] 2009/6/21
その際、過去ログ用のファイルも別途用意して両方のファイルを書き換えるようにして、
過去ログのほうには「日付,氏名,コメント」のような記録が各行に並んでいれば扱いやすいでしょう。
>>667 の最後に書かれた悩みは「マニュアルのファイルシステム関数読め」でおk?
使うのはたとえばfile()とかfwrite()とか。またはfile_get_contents()とかfile_put_contents()とか。
ただ、自分が作るならデータベースを使います。
A田A男のテキストエリアにB川B太郎がイタズラして変なこと書いて保存したりとかは 想定しなくていいの?
最近はデータベース使うまでもないって思うようになってきたなぁ。 ファイル使うと、ファイル形式云々かんがえなきゃいけなかったけど、 今はYAML使えばいいじゃんって感じで。 たいていの言語からでも読み書きできるから汎用性あるし、 読みやすい、書きやすいし、データを簡単に自由なデータ構造に出来る。 遅いって問題があるけど、それはserializeでキャッシュにしてしまえばいいし。
SQLであれこれするのに慣れてしまうとファイルの読み書きとか忘れてしまう。 仕方なくファイルに吐くにしても使い回しを考えてXMLとかJSONだし。
いや、データベース使っていても、 SQLなんて忘れてしまうよw 普通はO/R使うんでな。
O/RはSQLを知らない初心者でもをDBを使えるようにする仕組みじゃないぞ
パフォーマンスで問題になってからO/R使って無いな SQLの改善費用だけで2500万とかうちの会社はホント恥ずかしい O/Rはともかく、未だにEXPLAINすら知らない開発者は多い
>>675 漢字と一緒で、読めてもかけなくなる仕組みだろ?w
そりゃお前が頭悪いだけ
目的に通りの結果が得られれば、記録方法なんて何でも良いんだよ。 お前らも俺もコーディングの正確さ・美しさに捕らわれすぎ
正確さには囚われろよww
681 :
nobodyさん :2009/07/20(月) 00:02:29 ID:NuDmDR7p
質問です。料理のレシピ本みたいなアプリを作るとします。一品あたりの構成要素は。 ・料理名(必須入力) ・作り方文章(必須入力) ・写真一枚(任意入力) ・写真の解説(任意入力。写真がない場合は出力しない「三つ葉を散らすと見た目も綺麗です」みたいな感じ) この場合、「写真の解説」の出力判別用に、登録時にpic_upload = 1のようなカラムをDBに用意・insertして それを判別するべきでしょうか? 該当ファイルが存在するかどうかをfile_exists();で確認して出力するしないを決めても良いかと思ってたんですが ヘタなやり方だったかもと悩んできました 皆さんならどんなやり方にしますか? ご意見お願いします。
682 :
nobodyさん :2009/07/20(月) 00:14:57 ID:mGSM8h71
ふつうなら画像ファイル名(xxx.jpg)を記録するカラムで判断すると思うけど、 そういう質問するってことは、画像ファイル名は(id).jpgみたいに自然に定まる仕組みなのかな。 そうだとしても、pic_uploadとかやるよりはファイル名ないしパスを入れるカラムを作っといたほうがいいと思うな。
それならCMS使ったほうが早くね?
684 :
nobodyさん :2009/07/20(月) 00:36:51 ID:NuDmDR7p
>>682 なるほどー、それは確かにそうですね!
思いつかなかった。今まで画像までのパスを生成する関数をいちいち動かしてました
そうした方が全部一発で出来ますね!
ありがとうございました!
685 :
nobodyさん :2009/07/20(月) 01:55:21 ID:81Sgp959
アップロード時に次のコードを書いているのですが、これって決まり文句で ファイルがアップロードされたかどうかを判定する為にだけ使用する、という認識で良いですか? $_REQUEST["up"]
687 :
685 :2009/07/20(月) 02:00:29 ID:81Sgp959
一度で良いからマニュアルを読むことをお勧めする
>>686 そりゃそのスクリプト書いた人の意図によると思うけど
おそらくはGETかPOSTでupを送っておいて
処理先のスクリプトでupを確認してアップロード処理を行うっていう
よくある手法じゃないかな
>>687 A田A男さんは1行目とか決めておいて更新が来たら1行目を書き換えればいいんでね?
690 :
nobodyさん :2009/07/20(月) 18:51:36 ID:LTJd3lAb
質問です PHPでjavascriptにあるsettimeoutみたいなのありませんか? ある時間になるとその時間に合わせて、PHPで作成したデータを元に表を更新するというものです javascriptで作成した時計の部分はsettimeoutを使って1秒ごとに更新されていいのですが、 当然ながらその部分だけ更新されて、ページ全体は更新されないので・・・ 何かいい方法はないですか?お願いします
cronとか
692だけど何も書かないまま送信ボタン押してしまったスマンですw crond用のプロセスを作って、そこが参照する設定ファイルをPHPから 更新するなどの方法はある。けど、ブラウザ上の再読み込みを行いた いなら、やっぱり settimeout をPHPで吐くか、または、 <meta http-equiv="refresh" content="時間,URL"> などのヘッダを使って強制的に再読み込みをするなどがいいと思う。
694 :
nobodyさん :2009/07/20(月) 20:02:55 ID:LTJd3lAb
cronがよくわからないんで調べたんですけど、こういうのはちょっと・・・
>>693 >settimeout をPHPで吐く
というのはどのようにすればよいですか?
最悪metaで強制的にしますかねー ヘッダを全ページで共有して使っているので考え物ですが
cronを使わないなら、通常はブラウザでアクセスしたタイミングでしかphpが実行されないんだから metaタグのrefreshでリロードさせるか、javascriptでリロードさせるしかない。 ヘッダを全ページ共有ってtitleとかも共有なのか?titileはページ毎に置換してない? つまりそのページだけrefreshのmetaタグを置換して入れればいい
696 :
nobodyさん :2009/07/20(月) 20:16:56 ID:mGSM8h71
697 :
nobodyさん :2009/07/20(月) 20:22:42 ID:LTJd3lAb
>>695 ヘッダとフッタはそれぞれ1つのファイルを共有して各ページは中身(コンテンツ)だけ変更するような形でやってるんですよ
ちょっと特殊ですが なんでタイトルとかは全部同じです
今試しにmetaでやってみたんですが、更新ボタンを押してる感じがあるんでちょっと
上にも書いたんですけど今はjavascriptの時計の関数をonload=settimeout1秒ごとという仕組みにしてるんですけど、
全体は難しいですよね PHPとjavascriptじゃサイドが違うんで・・・
別にajax的にやれば何でもできるじゃん
>>697 リロードさせるんだから、更新ボタンを押してる感じがあるのはしょうがない。
それが嫌なら、
>>698 さんが言うようにajaxになるな。
700 :
nobodyさん :2009/07/20(月) 20:51:21 ID:LTJd3lAb
ajaxですかー 聞いたことはあるんですけど、全然知らないんですよね^^; とりあえず調べてみます 参考になるページがあればお願いします
>>659 連想配列じゃなくて配列の配列
これは ArrayAccess のシグネチャと Zend Engine の参照渡し・戻しに関する問題らしい
配列の要素がオブジェクトなら常に参照扱いなので気にしなくて済む
// ○5.2.0, ○5.1.6
$a = new ArrayObject();
$a[0] = new ArrayObject();
$a[0][0] = 1;
// ○5.2.0 ×5.1.6
$a = new ArrayObject();
$a[0] = array();
$a[0][0] = 1;
703 :
nobodyさん :2009/07/22(水) 15:49:48 ID:4ehWfJJ0
apache2 + phpで動かしてるのですが、 PHPをパースする全てのページのフッタに著作権を自動挿入したいです。 mod_layout以外で何か方法はありますか?
704 :
nobodyさん :2009/07/22(水) 16:04:30 ID:8OvKTpgg
設計のほうでなんとかするのが常道だろうけど、 小手先でやるならregister_shutdown_function()とか。
動的にSQL文を生成するクラスを探しています。 複雑なJOINとかができる必要はないのですが、 プリペアドステートメントを使って、安全にWHERE文を追加していけるものがいいです。 Zend_DBとかSymfonyのDoctrineとかいろいろあると思うのですが、 独立して組み込めるものが望ましいです。 SQL文だけ組み立てて、実行自体は今まで使ってきたMDB2でできればなおいいです。 よろしければ教えていただければと思います。 よろしくお願いします。
Zend_DBはZend_DBだけで動くじゃん
>>705 今はDoctrineがナウい
もちろんこいつ自体は独立して組み込める
ZendFramework+Doctrineも流行っている
てst
710 :
nobodyさん :2009/07/23(木) 06:38:49 ID:3HKcBquf
>>702 説明不足の部分まで汲んでもらってありがとうございます!
なるほどです…。
PHP5.1 or 5.2の辺りで世間のインストール状況に一つ壁があると思うので
動作テストうんぬん考えるとArrayObjectってちょっと使いにくい感じかもですね。
>>706 QueryToolはプリペアドステートメントが使えないんですよね…。
もちろん、これを自分用に改修することはさほど難しくはないと思いますが、
既に実用に耐えているライブラリがあれば、そちらを使いたいと思いました。
>>707 Zend_Dbは、オブジェクト生成の際にホストまで設定しないといけないのが、
私にとってはネックになります。
自分で使う分にはすごくいいライブラリだと思うのですが、
現在会社で使っているフレームワーク上、それができないのです…。
(できなくはないけど、記述があちこちでばらけて後々面倒)
なので、SQL文を動的に生成し、それを文字列として取り出せるものが必要なのです。
>>708 Symfonyはセットアップが面倒なイメージがあったのですが、
独立して組み込むこともできるんですね。
ドキュメント等読んで調べてみようとお見ます。
皆さんありがとうございました。
712 :
nobodyさん :2009/07/23(木) 13:34:09 ID:afGBhowe
if(!(bool) ini_get('register_globals')) { foreach ($var_names as $key => $value ) { global $$value; if (!isset($_SESSION[$value])){ $_SESSION[$value]= $$value; } } } というコードがあるんですけど、これは ・register_globals が設定されてなければ(つまりoffであれば)、 ・配列$var_namesに入っているグローバル変数名を調べて、 ・その名前と値を$_SESSIONに追加する という理解でよろしいでしょうか。 またこの理解が正しいとして、なぜこんなことをしているのか分かる方はいませんか。 register_globalsがonのときなら、このような動作もわからなくはないのですが、 offのときにあえてこんなことをする理由がわかりません。
それは、たまに避妊したいときに利用することがある。
714 :
nobodyさん :2009/07/23(木) 14:28:45 ID:t5/aDE1A
よく派遣とかでPHP募集してんジャン。 あれってsmatyとかフレームワークとか使ってんの? 小遣い稼いでる奴いたら教えて。 普通に働いてる奴も教えて。
板違い
phpに関連する下らない質問という枠では別にここでもいいと思う
そりゃその会社によるとしか
派遣じゃないがラピッド開発なんだから当然フレームワークは使う まともなとこならフリーのもの(cakeとか)は使わない 自社製(他社製)のもの使うね 自社サイトの開発業務とかならなんでもあり
719 :
nobodyさん :2009/07/23(木) 14:52:49 ID:t5/aDE1A
まぁでもあれだな。 PHPできるって言われてもフレームワークやその他のプラグインも使えないで、 HTMLにだだ書きしてる奴とかいるのかな?と思って俺もほぼ変わんないけど。 派遣って給料高いし一回働いてみたいよな。
いやこっちからお断りします
>>718 自社製はどうでもいいとして(笑)
他社製の有料フレームワークって
なにつかってんの?
>>721 書き方が悪かったね
他社といっても関連企業のことね
ライセンスがらみの問題もなく
意見もちゃんと反映できる範囲にいる企業
723 :
712 :2009/07/23(木) 15:32:53 ID:afGBhowe
>>713 >それは、たまに避妊したいときに利用することがある。
すみませんが、もうすこし詳しく教えていただけませんでしょうか。
#もちろんコンドームのことではないですよ?
はてなて
726 :
軟式PHP :2009/07/23(木) 16:00:48 ID:???
はてな引用は斬新だなw
727 :
712 :2009/07/23(木) 17:27:30 ID:afGBhowe
>>724 regsiter_globalsについては知っています。
質問はそこではないんですけど。
register_globals off でも register_globals on のように 外部から来た変数を $xxx のように使いたいからでしょ。
>>712 のコード断片だけから意図は汲めない
当事者にどういうつもりでこんな糞コーディングしたのか頬をビンタしながら問い詰めなさい
>register_globalsがonのときなら、このような動作もわからなくはないのですが、 >offのときにあえてこんなことをする理由がわかりません。 こんなことかかれて知ってますといわれてもな offだからこそだろ
731 :
nobodyさん :2009/07/23(木) 18:35:31 ID:t5/aDE1A
まぁでもあれだな。PHPもZFなんか使い出したらJAVAと全然難易度変わらんな。
なんで?
>>712 該当部分のコード削除するか自分の考えるものに変更して
register_globalsをoffにして動作させてみた?
挙動比較してみて同じようなら意味のないコードなんでしょうよ
何か問題があったからそのコード入れたかもしれないし
ほかの人のソースをただコピペしたようなものかもしれない
人のソース見て勉強するのはいいがコメントがないようなものはお勧めしない
ここにコード書き込むときに見栄えよく書き込みたいのですがよい方法はないだろうか
735 :
712 :2009/07/23(木) 20:13:54 ID:???
>>728-733 すみません、書き忘れてましたが、これはPHPLibのコードの一部なんです。
PHPLib の php/session4.inc にある Session クラスの regsiter() メソッド定義において
>>712 のようなコードがあり、読んでもよくわからなかったので質問しました。
PHPLibは有名なライブラリであり、挙動もみなさんよくご存知だろうと思いますが、
register_globalsがoffのときに限りグローバル変数を$_SESSIONに代入するという仕様が、
ぼくにとってまったく意味不明な仕様なので、これにどういう意味があるのか
教えていただければと思います。
736 :
712 :2009/07/23(木) 20:15:43 ID:???
参考までに、register()メソッドの定義を掲載します。 function register ($var_names) { if (!is_array($var_names)) { // spaces spoil everything $var_names = trim($var_names); $var_names=explode(",", $var_names); } // If register_globals is off -> store session variables values if(!(bool) ini_get('register_globals')) { foreach ($var_names as $key => $value ) { global $$value; if (!isset($_SESSION[$value])){ $_SESSION[$value]= $$value; } } } else { return session_register($var_names); } } // end func register
738 :
nobodyさん :2009/07/23(木) 22:17:18 ID:oVStTj1j
PHPを理解するためにUploderを作っているのですが壁に当たってしまいました 正規表現などで後方から数えて最初にある"."で切り分けたいのですがどのように記述すればいいのでしょうか 要は拡張子を切り出せればいいんです
>>735 PHPLIBなつかしす。
もともとPHP3とかの頃に使われてたヤツだから
互換性のためじゃないかなぁ
741 :
738 :2009/07/23(木) 22:36:25 ID:oVStTj1j
>>740 こんな関数あったんですか
ありがとうございます
742 :
やや :2009/07/23(木) 22:44:20 ID:i1eDkP4F
phpとは、直接関係なかもしれないのですが、phpでtxtファイルやcsvファイルを読み込むとき、 ファイル数が100万位ある中から一つを読み込みたいのですが、1000個のフォルダに1000個のファイルを入れようか、 それとも1000個のフォルダに1000個のフォルダを作りそれぞれにファイルを一個ずつ入れようか迷っています。 どちらの方が、高速にファイルにアクセスできると思いますか? ちなみにデータベースは使えないので、txtファイルを使っています。
1000ぐらいでパフォーマンス落ちたりしないよ 疑問ならダミーファイルつくって試してみ
>742 その程度の処理時間の差を気にする案件ならPHPを使うな。以上。
万個万個といやらしい奴だな
746 :
やや :2009/07/23(木) 23:11:53 ID:i1eDkP4F
>>743 ありがとうございます。試してみます。
>>744 ありがとうございます。速度を測ったところ、ファイルの読み込みが足引っ張っているようなのですが、
プログラムにあまり詳しくないのですが、他のプログラムで読み読みが速いプログラムを
教えてもらえないでしょうか。
747 :
やや :2009/07/23(木) 23:13:37 ID:i1eDkP4F
>>746 すいません。読み読みは、読み込みの間違いです。
748 :
738 :2009/07/24(金) 00:04:41 ID:w4nZ/YW/
if (is_uploaded_file($_FILES["file"]["tmp_name"]) && ($set['UPLOADER_FILE_SIZELIMIT'] > $_FILE['file']['size'])) { if (move_uploaded_file($_FILES["file"]["tmp_name"], "files/$filen.$x")) { chmod("files/" . $filen, 0644); //files.txtへの書き込み $res_file = fopen( 'files.txt', 'w+' ); $time = data("Y/m/d (D) G:H:s"); $data = array("number" => $filen,"name" => $_FILES['file']['name'],"comment" => $_POST['comment'],"extension"d => $x,"size" => $_FILE['file']['size'],"data" => $time,"dl" => "0","dllimit" => $_POST[dllimit]); unset($x); foreach( $data as $x ){ fwrite($res_file,$x) unset($x); } fwrite($res_file,"\n"); fclose( $res_file ); } else { echo "upload失敗"; } } またお願いします これを出力したところ Parse error: parse error, expecting `')'' in X:\index.php on line 46 とエラーが出ました 自分が見たところでは問題点が見つかりませんお願いします ちなみに一番長いところが46行目です
fwrite($res_file,$x) セミコロン
"extension"d => $x つうか記述ミスぐらいIDE使えばすぐわかるんだからEclipseあたり使いなさいよ
"dllimit" => $_POST[dllimit] ここも変 ''で囲まないと$_POST['dllimit']
別にnotice出るけどそれは取れるよ
753 :
738 :2009/07/24(金) 00:22:29 ID:w4nZ/YW/
いろいろとありがとうございます PHPの構文て結構厳しいんですね エラーや警告のでないスクリプトを目指して頑張ります
厳しい甘い以前にお前がミスりまくってんだよ パースエラーだよアホ
>746 誰がファイルの読み込みは足を引っ張らないと言ったよ どっちを取っても差はない、としか書いてないのだが? ファイルのI/Oはどの言語でも足を引っ張る
756 :
nobodyさん :2009/07/24(金) 00:32:07 ID:K8XyGptT
CGIをCで作ってる人いますか? 文字列処理/日本語関係 がダルくてしかたありません
スレタイ嫁
これだから千葉なんだよ
759 :
712 :2009/07/24(金) 10:11:37 ID:???
>>737 ありがとうございます。これそのものですね。大変参考になりました。
全然ちげーだろ
マニュアルに載ってるのはonとoffのエミュレート
>>736 のコードは指定した変数をセッションに追加
エミュr−トした中で追加してんだろ
>>736 のどっこにもPOSTやGETから(SESSIONすらも)読み込むコードなんて無いけど?
$var_nameがそうなんだろ
>>763 $var_namesにarray('_POST','_GET')とか入れると?
PHPではセッションデータをファイルに保存すると思いますが、 これをクッキーやデータベースに保存するよう変更したいのですが、できますか。 独自にクラスを作ったりすればできますけど、レガシーコードが大量に $_SESSIONを使っているので、できれば$_SESSIONを使ったままで、 セッションデータの保存先をクッキーとかに変更したいのですが可能でしょうか。
>>765 スレタイ
セッションデータをクッキーに保存って本末転倒だな。
なぜそういう事をしたいのか書くとレスを返しやすい。
セッションデータをクッキーに保存するのは、最近よくあるよ。 CodeIgniterとかRailsとか。 #利点は、サーバの台数が増えてもスケールしやすいことダッタかな。 なんで本末転倒なんでしょうか?
CIはPHPのセッション周りが信用できないからと負荷を考えてじゃなかったっけ? railsも2.0(?)からデフォでcoockieらしいな。 で、本末転倒とはイミフだった、すまん。 個人的にクライアント側にデータが保存されるのが嫌で$_SESSION使ってるから そのセッションデータがcoockieに入ったら意味無いなと思い、本末転倒と書いてしまった。
クッキーのデータを改ざんされちゃったら意味ないんだよね
クッキーだとサイズ制限あるしな
>>767 それが嫌でcodeigniterでNative_session使ってる
>>772 答えられないならいちいち揚げ足とってないで黙ってろよ
変なレスはスルーしとけよ・・・
>>765 嫌な流れなんでid出してないけど答えるが
設定変えればクッキーに書き込みが出来るとかそういうのは無い
session_set_save_handler()で
>>765 の要望は満たされる訳だが
777 :
nobodyさん :2009/07/24(金) 18:07:25 ID:moawRAWq
バイトをキロバイトやメガバイトに変換したいのですが関数とかってありますか? 自作しないと無理でしょうか?
779 :
685 :2009/07/25(土) 02:17:25 ID:eE6Kfkku
685で質問をした者です。
【OS名】CentOS
【PHPのバージョン】php5.26
【連携ソフトウェア】なし
【質問内容】
>>696 さんのWebサイトを参考にし、もう少しコードを簡単し、以下の用に動作する物を書いてみました。
(テキストフォームに文字を入力し、保存ボタンを押すと、書いた内容が別テキストファイルに保存される。
PHPのWebページを開くたびに別テキストファイルが呼び出され、その内容がテキストフォームに
value=として設定される。簡易やることリスト的なPHPスクリプト。)
テキスト入力フォームがひとつの場合は問題なく動作するのですが、
複数のテキスト入力フォームを用意した場合、どうやらテキストファイルを読み込んでいないみたいで
ページを開くたびに保存してある内容が消えてしまいます。
ここの修正だけで数時間以上悩んでいるのですが、ここだけ解消できれば完成するので
どのように修正すればよいかご教示願えないでしょうか?
これが書いたスクリプトです。oneディレクトリに入っているものが、テキスト入力フォームがひとつの場合、
arrayディレクトリに入っているものが、複数のテキスト入力フォームを用意した場合です。
http://kissho1.xii.jp/7/src/7jyou24055.zip.html
780 :
nobodyさん :2009/07/25(土) 03:00:06 ID:t/OU2yuM
> どうやらテキストファイルを読み込んでいないみたいで > ページを開くたびに保存してある内容が消えてしまいます。 ここが誤りです。 最初にページを表示した際に、以下の流れになっています。 1. 26-33行目で、$POSTが空っぽのため、空っぽの$test配列が生成される。 2. 36行目で、空配列と文字列""を混同しているためif条件を通過してしまう。 3. 空っぽの$testを元に、空っぽのtxtファイルが作られてしまう。 とりあえず最小限で動かすには36行目を次のように書き換えればいいと思います。 if(isset($_POST['test'][0])){ しかし動くからといって満足せず、 ヒマを見つけて本を買うなりしてステップアップされることをおすすめします。 わたしの個人的な印象では、 この手の「サンプルコード」なるものを載せてるサイトの8割は初学者にはおすすめできません(苦笑)。
781 :
nobodyさん :2009/07/25(土) 08:06:09 ID:TYwYBgIM
使っているサーバのphp.iniや.htaccessでタイムゾーンを指定できなかったので mysql1クエリ送信するたびにSET time_zoneを付け加えているのですが、 例えば $sql1 = "SET time_zone = '+09:00'"; $sql2 = "SELECT * FROM test"; $sql = $sql1.";".$sql2; として最終的にfetchAllでSELECTした結果を得たいのですが、 SET time_zone = '+09:00'の部分の結果が得られてしまいます。 実際のSELECT文にはDATE(NOW())などを使うので、 どうしてもSET time_zoneが必要なのですが、 できればSELECT部分の結果だけを得るにはどうしたらいいでしょうか ($sql2だけならSELECTの結果が得られます) またphp内でmysqlのタイムゾーンまでをも指定できる方法が あれば教えてくださいよろしくおねがいします。
実行分ければいいじゃん
783 :
nobodyさん :2009/07/25(土) 08:48:33 ID:eE6Kfkku
>>780 ありがとうございます。ご指摘の箇所を修正したら普通に動作するようになりました。
しかし、”1. 26-33行目で、$POSTが空っぽのため、空っぽの$test配列が生成される。”で、
空っぽの$test配列が生成されないようにするためにはどのようにすればいいのでしょうか?
書籍の方ですが、オライリー社のプログラミングPHP 第2版を購入して読んでいっています。
Webで公開されているサンプルコードはあまり為にならないのですね。
784 :
nobodyさん :2009/07/25(土) 13:34:23 ID:t/OU2yuM
>>783 さんを悲しませるのは本意ではありませんが(笑)、
$test配列の問題はオライリー読んでれば解決できるようになるでしょう。
> Webで公開されているサンプルコードはあまり為にならないのですね。
あくまで、8割です。いいコードもあります。が、初学者には見分けられない(苦笑)。
オライリー本は初心者にわかりづらい
初心者から脱却するためにオライリー本を読むんじゃあないか
>>784 784さん、分かりました。オライリーの本を一通り読んでみます。
789 :
nobodyさん :2009/07/26(日) 03:54:04 ID:VnzjqimA
データーベースの桁数を省エネするために、 36進法(a〜zと0〜9)を作ってデーターを入れることを考えています。 たとえば、最高1億の数値を36進法にすれば、何桁でOKになるのでしょうか? 多分、高校で習った対数とか使うと思うのですが、もうすっかり忘れてしまって、 計算の仕方が分かりません。教えてください。お願いします。
ヒント 36進数1が10進数36^0=1 36進数10が10進数36^1=36 36進数100が10進数36^2=1296 36進数1000が10進数36^3=46656
791 :
nobodyさん :2009/07/26(日) 04:38:18 ID:VnzjqimA
そんなヒントじゃ、全然分かりません。 次どうぞ↓
792 :
nobodyさん :2009/07/26(日) 04:52:09 ID:/+Zib1Pr
36 1296 46656 1679616 60466176 2176782336
793 :
nobodyさん :2009/07/26(日) 04:56:01 ID:VnzjqimA
なるほど、つまり6桁っていいってことですね。 分かりやすい説明ありがとう。
数千万レコードあって1MB節約できるとかいう程度じゃねーのそれ
795 :
nobodyさん :2009/07/26(日) 05:26:48 ID:o1BXfd9y
func0.php 〜 func9.phpの中に同じ関数名の関数func( )が書いてあって、 スコープが変わるごとに別のファイルにあるfunc( )を呼び出したいのですが、 うまく行きません。 スコープ内でのみ有効なincludeみたいなのは無いのでしょうか? // やりたいのはこんな感じ。 for( $i=0; $i<10; $i++ ){ include("func" . $i . ".php"); func(); }
ていうか進数計算もろくにできないやつが そんなことやっても自滅するだけ
どううまく行かないの? なんかエラーが出てるの?出てるならだしなよ それともfunc0のfunc()しか実行されないとか? もっと詳細なこと書いてくれないと困っちゃうよ
798 :
nobodyさん :2009/07/26(日) 05:47:36 ID:/+Zib1Pr
>>795 誰も知らないことだが、その技は俺が先に発案した技だからな
なんでそんなことやりたいのか気になるね どういうケースを想定してるのかぜひ教えてほしい
801 :
798 :2009/07/26(日) 05:56:36 ID:/+Zib1Pr
>>795 ついでに書いとく
その技はWEBサイトにおいて極めて有効
その技を完璧に操れば、どんな巨大なサイトでも構築できる
頑張れ
802 :
nobodyさん :2009/07/26(日) 09:53:04 ID:adDNcXgh
【OS名】CentOS5.3 【PHPのバージョン】5.2.9 【連携ソフトウェア】MySQL,Apache 【質問内容】 先に自鯖板の方で質問させて頂き、webprogでやれと怒られたのでこちらで質問させて頂きます。 > 先ほどPHP5.2.9にpeclを使ってAPCを導入、設定したのですが > PHPの実行時にPHP Startup: apc.shm_segments setting ignored in MMAP mode in Unknown on line 0と表示されるようになってしまいました。 > どうもMMAPモードなのにもかかわらずapc.shm_segmentsを設定しているのを警告してくれているようなのですが > メモリを大量に積んでいるので、自分はshmで動作させたいと思っています > ですが、ドキュメントを見る限り[apc.mode]という設定項目は現在のバージョンでは削除されているようなのです > この場合、動作モードをMMAPからshmに変更するにはどの様にすれば良いのでしょうか? あちらへ書いた文章の引用ですが、宜しければお願いします。
803 :
nobodyさん :2009/07/26(日) 11:06:09 ID:LoPusb4z
なんか不思議なことが起きた $num_org = $_GET['num']; ってしておいて echo $num; で値が取れてしまうんだが・・ php5
つまらん釣り乙
805 :
nobodyさん :2009/07/26(日) 11:09:41 ID:LoPusb4z
>>804 windowsならいけたんだが
linuxでやったらなぜかダメだった
見間違いかもしれないから
もっかいみてみるけど・・
806 :
nobodyさん :2009/07/26(日) 11:13:46 ID:LoPusb4z
test.php <?php $num_org = $_GET['num']; echo "num=".$num; ?> かなり端折ったけど、これで確認できた・・ test.php?num=10 でやったら$num_orgじゃないのにnum=10って表示されました。 windows2000 php5.2.6 localhost
807 :
nobodyさん :2009/07/26(日) 11:17:53 ID:LoPusb4z
今のところnumを別の半角文字に変えてやったけどできたのはnumだけ
808 :
nobodyさん :2009/07/26(日) 11:19:07 ID:LoPusb4z
あ、違った、num以外にも半角文字できました
ちなみに_orgも関係なし・・ $_GET['num'];をechoのところと同じにしてるからなんだろうけどなぜなんでしょうか
なぜID隠す
ragister_globals
ra → re だろ
これ釣りじゃなかったのかw php5.2.6ってデフォでregistar_globalsってoffじゃないのか?
814 :
nobodyさん :2009/07/26(日) 12:40:45 ID:LoPusb4z
>>811 ぐぐってみました
こんなのがあったなんて知りませんでした。
すっきりしましたありがとうございました。
815 :
nobodyさん :2009/07/26(日) 12:47:38 ID:VnzjqimA
>>794 データベースの仕様上、字数オーバーのため、
どうしても圧縮しないとできないのです。
その苦肉の策が、36進法という最適解です。
>>796 少なくても、質問に答えられないあなたが、そのようなことを資格はありませんね。
テーブル設計より先に、人生設計を見直した方がいいな
818 :
nobodyさん :2009/07/26(日) 13:09:36 ID:VnzjqimA
>>816 もちろん、integerやlongも考えました。
しかし、それらの型は浮動小数計算のため、
利子計算などを色々やると誤差が出ます。
金融系の開発をしておりますので、これは致命傷です。
intが浮動点少数?頭イカれてんのかお前
異常な数値(数値とは言わないけど)以外はきちんと型に入れるべき。 123.12.1みたいな変なのはもう数値ではないんだから
821 :
795 :2009/07/26(日) 15:56:02 ID:???
>>797 >>799 >>800 >>801 ありがとうございます。
説明不足で申し訳ありませんでした。
例では示しませんでしたが、
func( )は巨大な配列(16000個)を返す関数です。
func0.php〜func9.php内には、サイズは同じで中身の違う配列が定義されています。
0〜9の選択はユーザの次第です。
このとき、0〜9の1個だけを呼ぶ場合もあれば、
0〜9の中から2個を呼んで、関数から返ってきた2つの配列を足し合わせる、といったこともします。
ファイルを別々にしているのは、1個1個のファイル自体が巨大なため、
必要なfunc[0-9].phpのみを必要な時のみインクルードして、無駄な資源確保を避けたいと考えたからです。
func( )と名前を統一しているのは、インターフェースの統一のためです。
for文で例より、もっとシンプルに書くなら以下のような感じです。
===========================================
{
include("func0.php");
$A = func();
}
// スコープを抜けたので、func0.phpはメモリから開放
===========================================
func0.phpで func0()呼んで 適当な配列にでも入れとけばいいじゃん インタフェースの統一ってのが意味不明
ID:VnzjqimA こいつはとんだしったかだな 算数の質問しにくるような馬鹿が金融系開発? 釣りもほどほどにしとけ
ISSEIって初めて聞いたけど、 ・ファイル名に変換 ・VisualBasic ・ストップウオッチを片手に処理速度を計測 あたりが凄まじくネタっぽいな
記事よんだけどこれはねえわw
827 :
789 :2009/07/26(日) 19:42:47 ID:???
>>824 私もそう思ってました
第二のIKKOになれるようにがんばります。
ikko "どんだけ〜";
828 :
192.168.0.774 :2009/07/26(日) 19:51:13 ID:+70USpzn
echo ($aaa!='' ? "$aaa. " : '') echoのリファレンスを見ました。でも、↑のようなものについては見当たりませんでした。 これは、どのように解釈したらいいんでしょうか?また↑の出力結果は同じになりますか? これと似た構文でC言語にもありますか? よろしくお願いします。
こちらはPHPのスレです
>821
function call_func($func_number){
require_once('func' . $func_number . '.php');
$result = func();
// おぞましい黒魔法でfunc()の定義を削除
return $result;
}
黒魔法の詳細は
ttp://jp2.php.net/manual/ja/function.runkit-function-remove.php 引数以外のもの(環境変数などのスーパーグローバルなど、関数からアクセスできるもの)で処理を分けるなら、勿論それでもいい。
まあ、オススメできない。俺なら、func1 - func9で定義される関数func()には別名を使っておく。
そうすりゃ、衝突を気にしなくていいからな。
OOP的なプログラム構造にするなら、まずメソッドfunc()を持つ別個のクラスを10個用意する。
で、上記call_func()は、直接結果を返すのではなく、引数などに応じて適切なファイルをrequireしてクラスのインスタンスを返す。
呼び出し側は$obj->func()を呼べば、望む結果が得られる。
メモリ消費を気にするなら、そもそも16,000なんて大きさの配列を作るべきではない。
毎回16,000個の変数を全部使う、ってんなら話は別だけどな。
832 :
nobodyさん :2009/07/27(月) 12:02:48 ID:TX4gysr6
PHPで$_SESSIONを扱うライブラリを書いています。 しかしユニットテストを書いて実行すると、 Cannot send session cookie - headers already sent というエラーが出てテストできません。 まあ当たり前と言えば当たり前なんですけど、でもテストできないのも困ります。 こんなとき、どうすればいいでしょうか。 つまり$_SESSIONを扱うライブラリで、Cannot send session cookie エラーを回避しつつテストするにはどうしたらいいでしょうか。
>>824 >サンプルデータ約110万件のデータ検索時間は約1秒になった
たった110万件のデータの中から特定のものを抽出するのに1秒掛かるの?速いの?
ストップウォッチってw 実行開始と終了で引き算して結果をどっか隅っこにでも出力すればいいのに なんでそんなとこでアナログマなんだよ
そんな訳の分からない数字を客に見せたら、 問い合わせが来るだろうが。 夏休みは、学生の知ったかばかりだな。
ストップウォッチだとネットワークやOSやブラウザの影響かかるんじゃなのかなぁ
>>835 google
aho の検索結果 約 4,440,000 件中 1 - 10 件目 (0.12 秒)
おまえはこれを否定してるんだな
それこそ知ったか、もし社会人なら恥ずかしくて自殺するレベルだぞ?
>>838 検索エンジンという特殊事例を出してきて、
しかもgoogleの一例だけで全てを語るこの薄っぺらい脳みそwww
往生際が悪いやつだなw 検索エンジンの何が特殊事例なんだ?やってることは同じだろ 指摘を素直に認められないなんて、なんてちっぽけな人間なんだよ
お前が極論好きのお馬鹿な学生だということはよく分かった。
で、お前らのDBだと110万件のデータを検索するのに何秒掛かるの?
ポスグレだが、40万件あるアクセスログのデータで、1.4秒かかった。
844 :
nobodyさん :2009/07/27(月) 13:34:15 ID:RGhhhkQi
system()又はexec()に関しての質問です system('ls')で望む結果は取得できたのですが system('history')では何も出力されません(エラーも) ソース下記状態です <? ini_set ( "display_errors", "1" ); ini_set('error_reporting', E_ALL); system('history'); ?> サーバの/bin/以下をみるとlsがあるのにhistoryがありませんでした これが関係していると思うのですが、コンソールからhistoryとうつと問題なく履歴が表示されます そしてwhereis historyとうつと [root@www bin]# whereis history history: /usr/share/man/man1/history.1.gz /usr/share/man/man3/history.3.gz のようにmanしかひっかからないのですが historyはどこにあるのでしょうか? また、そもそも system('history'); が無反応なのは/bin/にhistoryがないから、で合ってるんでしょうか?
>>837 なるほど、出力をバッファリングすれば、もしかしたらエラーがでないかも。
試してみます。どうもありがとう。
>>835-841 ケンカすんなよw
>>835 氏は、通常のwebサイトやシステムで、実行時間を隅っこに表示するのはおかしい。
>>838 氏は、実行時間を隅っこに表示する事は珍しい事ではない(検索エンジンなど)
と言ってると俺は読んだ。そして両方言ってることは間違ってないと思った。
>>844 historyは通常のコマンドじゃなくて、shell内のみで利用可能な命令。
cdとかと同じで、system()では実行できないと思うよ。
もし$HOME/.bash_history とかあれば、それを読み込んで表示するしかないと思う。
検索完了までの実行時間を売りにしているのだから検索にかかった時間を表示するのは正しいやり方だ
850 :
nobodyさん :2009/07/27(月) 14:26:50 ID:RGhhhkQi
>>847 と他の方も
ありがとうございました
$HOME/.bash_historyから読み込めそうです
後学の為に組み込みじゃないコマンドをしっておきたいのですが
【組み込みじゃない】のをぐぐるときのキーワードを教えて頂けますでしょうか
>>850 組み込みコマンドを覚えた方が早いのでは?
includeって文頭以外ではするべきではない? 文中でしても作法的におかしくはない?
文中でしなきゃいけないときもあるだろう
855 :
nobodyさん :2009/07/27(月) 14:45:33 ID:jUhtLxSq
ですよね。 どうもです〜。
とはいえ、文中でやらなくて済む方法は考えるけれど。 そして、たいてい代替案はある。
857 :
853 :2009/07/27(月) 15:15:40 ID:???
>>856 設定ファイルを外部ファイルにしててそれを読み込もうとしてるんですけど
phpファイルの変数として定義されてるものです。
<?php
$hoge=13
?>
みたいな。
改修なので設定ファイル自体のフォーマットはかえられないので
includeしかないかなと
858 :
856 :2009/07/27(月) 15:21:36 ID:???
レガシーシステムなら仕方ないかもね
変数定義だけなら文頭でもよさそうだけど何か理由があるのか
設定ファイルならiniにしてparse_ini_fileでもよさそうだけど何か理由があるのか
そっちは理由書いてあるじゃない
862 :
856 :2009/07/27(月) 15:56:32 ID:???
>>859 読み込むファイルが以下のような内容なんだけど、
局所化したほうがいいかと思って
Class hoge1{
Function hoge2(){
//ここで使う
}
Function hoge3(){
//ここで使う
}
Function hoge4(){
//ここでは使わない
}
}
設定ファイルのフォーマットが変えられないのにそれは可能なのかい
includeはJAVAのimportのように使うのがいいんじゃないかね importとincludeじゃ意味あいが違うけど
>>863 ?
それとは?
プログラムの変更は可能だけど、そういうことではなく?
Class hoge1{
Function hoge2(){
//ここで使う
include hoge.php
}
Function hoge3(){
//ここで使う
include hoge.php
}
Function hoge4(){
//ここでは使わない
}
}
866 :
nobodyさん :2009/07/27(月) 17:38:33 ID:iOuW4Vu1
【OS名】win32 【PHPのバージョン】5.3.0 【質問内容】 filesize関数を使って 1.ファイルサイズを取得 2.ファイルを書き換え 3.ファイルサイズを取得 としたとき、ファイル書き換え後にファイルサイズを取得しても、取得した値は書き換え前のものになってしまいます。 解決方法はありますか?
PHPで実行時間を求める方法 <?php $time_begin = microtime(true); /* expression */ echo "実行時間".(microtime(true) - $time_begin)."秒"; ?> チラ裏
869 :
nobodyさん :2009/07/27(月) 17:46:09 ID:iOuW4Vu1
870 :
nobodyさん :2009/07/27(月) 21:41:14 ID:JxRE4otA
質問します 例えば名簿アプリでmeibo_tableにループで10回(10人分)のデータをループで入れるとします このとき、登録がうまくいった場合は「成功」失敗したら「失敗」と表示するケースで、 どのようにプログラムを書けば良いんでしょうか? for($i=0; $i<10;$i++){ $rs = mysql_query($sql); if(!$rs){ $err = 1; } } if($rs){ echo "失敗";}else{echo "成功";} こんな感じですか? どうも自信がないというか、もっと良いやり方がないか知りたいです トランザクションというのがあるのも知っていますが、使い方がrollbackなどいまいちわかりません その辺も含めて教えてもらえたら嬉しいです よろしくお願いします
>>865 クラスにするんだったら
includeは一箇所のほうがいいと思うけどなぁ。。
で、変数の内容はprivateなメンバに入れとくかんじ。
もっとそれっぽく書くなら
フレームワークなんかのConfigとかいう感じのクラスを
参考にしてみるといいかも。
>>870 mysql_queryのエラー自体はその方法で判別できる。
エラー内容はmysql_errorで取得できる。
トランザクションについては、mysqlの場合InnoDBとかでないと出来ないので注意。
>>871 「改修なので設定ファイル自体のフォーマットはかえられない」とあるので仕方がないんじゃない?
ループを10回まわした後で成功・失敗を出しても、それって一番最後(10回目) の結果だけしか見てないんじゃあ。 ていうか$errは何に使うんだ
874 :
872 :2009/07/27(月) 22:10:57 ID:???
ちょwwよく見てなかったw 最後のif文は$errを見ないと意味無いな あと「$err = 1;」の行の前後でmysql_errorなどでエラー内容拾っておいたほうがいい
875 :
nobodyさん :2009/07/27(月) 22:13:45 ID:zLQPD/lR
【OS名】Fedora 11 【PHPのバージョン】PHP5.3.0 【連携ソフトウェア】特になし 【質問内容】 社内の簡易報告システムを作っています。 そのシステムのメニューをPHPで作っていて、入力した内容を別のdatファイル、 もしくはtxtファイルに入出力で保存する処理をするように設計しています。 そのメニューPHP内でチェックボックスを使用しているのですが、 チェックを入れて、セーブボタンを押すと、チェックを入れた内容が保持され、 PHPを開くたびにチェックしている状態、チェックしていない状態を表示させたいです。 今考えているのは、チェックボックスの配列を用意して、以下のような処理をし、 数値が1の時は表示画面で、チェックボックスがON、数値が0の時は表示画面で、チェックボックスがOFFという風に 処理をし、チェックボックスの状態に変更があった場合は随時更新していくという風にしたいのですが、 どういう風にチェックのスクリプトを書けばよいのか分かりません。 html部のチェックボックスにチェックが入っているのは、PHPでどのように判断させればよいのでしょうか? chk[0] = 1; // 配列の数値が1の時はチェックボックスON chk[1] = 0; // 配列の数値が0の時はチェックボックスOFF chk[2] = 1; // 配列の数値が1の時はチェックボックスON chk[2] = 1; // 配列の数値が1の時はチェックボックスON
簡単な一行掲示板を作ってます 書き込みというボタンのとこが文字化けを起こるのですが <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> と書くと治りました。 なぜですか? 某所からダウンロードしたソースには<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> と書いてないのですが・・・
877 :
876 :2009/07/27(月) 22:17:45 ID:On6c+/Yd
ID忘れてました
>>872 形式変える必要はないよ。使いかたを変えるの。
設定ファイルで設定した変数(って分かりにくいな)を直に触るんじゃなくて
間にイチマイ挟む。
もしひとつのクラスでしか使ってないのなら、メンバ変数にしてもいいし
複数のクラスで使うんなら「設定値を保持してるクラス」を導入して
そのクラス経由で使うっていう。
まぁ。。そこまでやるかっていうのはあるけど
せっかくクラス使ってんならそういう方向で考えたほうがいいかなぁって。
>>873 ,874
ありがとうございました
$errで判別するのを書き間違えました
ご意見参考にして、やり直してみます
>>875 よく分からんけど$_POST
>>876 ソースの文字コードがshift-jisだったから?
>876 コンピュータは、文字をデータとして、つまり一種の数字として保存している。 例えば、「11」なら「あ」、「15」なら「お」、「23」なら「く」みたいなイメージな。数字と文字を1:1対応させるわけだ。 で、日本語をデータとして表現する方法、つまりこの対応付けにはいくつかの種類がある。これを文字コードという。 たとえば、「あ」は、Shift_JISコードでは16進数の「82A0」、EUC-JPコードでは「A4A2」、UTF-8コードでは「E38182」という数値として格納されている。 (16進数ってのは、htmlの色指定のアレと同じ。09の次が0Aになって、0Fの次が10になる数値の表現方法) で、コンピュータは文字を表示する際に、「82A0」を「あ」へと再変換しないといけないわけだが。 上記のように、日本語を数値として表現する方法にはいくつか種類があるので、「このデータは、どの種類の方法で文字を数字に直したものなのか?」が分からんと日本語に戻せないわけだ。 大体の場合自動で上手い事判別してくれるわけだが(3通り試して一番それっぽいのを選ぶとか)、たまにミスる。ミスった場合、文字化けが発生する。 文字化けさせないためには、ミスらないようにすればいい。 そのためには、自動判定に頼らず、「このデータはどの文字コードで文字を表現したものか」をきちんと指定すればいい。 そのための方法のひとつがmetaタグ。 ちなみに、アルファベットは「ASCIIコード」という統一標準があるので、まず文字化けしない。
882 :
nobodyさん :2009/07/27(月) 23:02:18 ID:5jW2DCWq
質問です。 今利用しているレンタルサーバに拡張モジュール BC MATH が入っていないのですが、 ぜひ BC MATH を使いたいと思っています。 そこで、単純に BC MATH に属する関数をまとめた PHP ファイルを include する考えに至ったのですが、 この拡張モジュールに含まれる関数(bccomp とか)の PHP 版のソースコードはどこかにないでしょうか? 詳しい方よろしくお願いします。
>>882 それってソースはPHPじゃないよ。
Cか何か、つまりPHPのソースの中に含まれてる。
じゃないとPHP上で数字型データの制約を外部から
書き換えることはできない。(文字型演算に突っ込む
という手があるけど最悪CPU100%食ったままタイム
アウトなんてくらいの負荷がかかる可能性がある)
ちょいと難しいんじゃないかな
斬新な発想だな
885 :
nobodyさん :2009/07/28(火) 00:04:32 ID:IxhPfTut
>>883 助言ありがとうございます。
引数をString型で受けとるなどの処理をすれば、PHPでも同様の機能を実現することは不可能ではないので、
PHPで書かれた同機能の関数を探していました。
そもそも邪道というか、必要とされない手段だから誰も作らない=見つからないのでしょうか。
>>884 普通はこういう場合、どのような手段をとるのでしょうか?
アドバイスをいただけると助かります。
887 :
nobodyさん :2009/07/28(火) 03:26:44 ID:UNpQ8CBn
>>886 そのページを参考にチェックボックスの処理はすることができましたが
datもしくはtxtに保存された内容と比較はどうすればいいのでしょうか
txtファイルには110010011... といった風にチェックボックスを入れたところは1、
そうでないところは0と記載されているのですが表示画面に反映できません
if文でok
User Contributed Notesに一杯書いてあると思うが
891 :
nobodyさん :2009/07/28(火) 03:53:16 ID:UNpQ8CBn
>>888 if文でいけました
しかし、チェックを入れてセーブボタンを押すとチェックを入れたチェックがすべて消えて、
もう一度セーブボタンを押すと反映されたものが表示されます
こういった風になるのは普通なのでしょうか?
892 :
nobodyさん :2009/07/28(火) 03:57:41 ID:UNpQ8CBn
さらに、チェックボックスをひとつだけオンにした状態で保存し、 反映さえた後にそのチェックボックスをオフにするとすべてオフといった状態に反映されません。 何がいけないのでしょうか?
簡素化した検証コードのせられる?
894 :
nobodyさん :2009/07/28(火) 04:25:47 ID:UNpQ8CBn
少々お待ちください。
895 :
nobodyさん :2009/07/28(火) 05:11:11 ID:UNpQ8CBn
>>895 <?php
$n = 10;
//書き込みロジック
$text = "";
if (isset($_POST['chk'])) {
for ($i = 0; $i < $n; $i++) {
if ($_POST['chk'][$i]) {
$text .= "1\n";
} else {
$text .= "0\n";
}
}
file_put_contents("check.txt", $text, LOCK_EX);
}
//表示ロジック
$list = file("check.txt");
for ($i = 0; $i < $n; $i++) {
if ((int)$list[$i]) {
echo "<input type=\"checkbox\" name=\"chk[{$i}]\" value=\"{$i}\" checked>{$i}<br>\n";
} else {
echo "<input type=\"checkbox\" name=\"chk[{$i}]\" value=\"{$i}\">{$i}<br>\n";
}
}
?>
なるべくシンプルに書いたつもり
インデントに全角スペースつかってるのでそのままコピペしても動かないので注意
原因は・・・ロジックの流れにあると思うけど詳しく調査してる時間もないので
詳しい人に任せるとしよう
チェックがすでについてる状態から すべてのチェックをオフにした場合 ii (isset($_POST['chk']))が働かないので更新されない だからそこは変えたほういいよ 前回の状態と比較してかわってたら更新とかにすると またやることが増えるので 単純にPOSTされたときに更新すればいいのだから if ($_POST)とかにしたほうがいいと思う
898 :
nobodyさん :2009/07/28(火) 08:19:20 ID:UNpQ8CBn
>>896 ありがとうございます
とりあえずコピペして動作確認をしてみたのですが、
やはり配列0の箇所が反映されません
>>891 の修正は完璧でした
>>897 if ($_POST)にしてみたのですが、動作は変わりませんでした
899 :
nobodyさん :2009/07/28(火) 08:41:56 ID:/osX6Bgi
>>889 ありがとうございます!
PEARは導入したことがなかったのですが、使用してみようと思います!
900 :
nobodyさん :2009/07/28(火) 08:47:54 ID:/osX6Bgi
使おうかと思って Math_BigInteger をダウンロードしてみましたが、 クラス内で BC MATH 関数を使用しているようでした…;;
有効桁数だけの問題なら、mySQL があれば、一行クエリを投げればいいじゃん。
>>898 今手元に環境がないから動くかわからないけど、
array_fillで初期化してあらかじめ配列を用意しておいたらどうだろうか?
0と1だけ入れればいいのなら、
$n = 10;
if (isset($_POST['chk'])) {
$text = "";
$tmp = array_fill(0, $n, 0);
foreach ($_POST['chk'] as $key => $value) {
$tmp[$key] = 1;
}
foreach ($tmp as $value) {
$text .= $value."\n";
}
file_put_contents("check.txt", $text, LOCK_EX);
}
チェックボックスに何もいれなかったらエラーが出たり、
>>897 の指摘にあるようなことがおきるので正常終了のための条件が必要。
チェックボックスが空の状態でもページを読み込んだ初期の状態でも、
おそらく!$_POST['chk']の状態であるので一工夫必要。
903 :
nobodyさん :2009/07/28(火) 12:16:04 ID:iDr4ntOe
phpって変数や配列の初期値=NULLって保証されているのでしょうか? それともCみたくゴミが入ってることもあり得るのでしょうか?
>>903 いきなり宣言するのが気持ち悪いならなんでもござれ
906 :
nobodyさん :2009/07/28(火) 14:14:11 ID:nFAJUBt9
phpで円グラフとか作る必要があるのですが、 一番いいモジュールってどれでしょうか? できればフリーで。
>>900 ドキュメントぐらい読もうぜ
GMP/BCMath/俺俺実装のいずれかを使うって書いてあるでしょ
> Uses the GMP or BCMath extensions, if available,
> and an internal implementation, otherwise.
グラフを作るライブラリなんてありがちすぎてどれがメジャーなのかわからん
だから聞いているんだろうな
お手軽なのはGoogle Chart 異論は認める
jpGraph は一昔前の定番だったような
>>892 >>886 に書いたページの次のFAQ
◯"select multiple" タグで選択された全ての結果を取得するには どうすればよいですか?
ここに
「... count() 関数を使えば選択された項目の数を知る ことができます。...」
と書かれています。
つまり、チェックを付けた箇所しか値が飛んできません。
チェックを外しても、値は飛んできません。
(PHPの仕様として、このページ以外のところに書かれてるとは思うのですが、不明です。)
従って、何番目をチェックしたかも保存する必要があるでしょう
例えば、保存フォーマットを
番号=チェック状態
とするとか...
この場合、file関数で配列展開した後、各行に対してexplodeで番号とチェック状態に分解すればよいでしょう。
ちなみに、
>>891 後半の
「もう一度セーブボタンを押すと...」の所も同じ原因でしょう
(全てoffのため、$_POST['chk']がセットされず、ファイル更新されなかった。多分)
>>891 の前半は不明。
$list = file("check.txt");
の直後に、print_rかvar_dumpで$listの内容を表示してみると何か原因が見えてくるかもしれない
917 :
nobodyさん :2009/07/28(火) 23:38:24 ID:sYVzfVPt
【OS名】WindowsXP 【PHPのバージョン】PHP5.2.9(XAMPP1.7.1) 【連携ソフトウェア】特になし 【質問内容】 PHPで以下のコードを書いたときに配列の値が出力されません。 原因を教えてください。 <?php class Sample{ public $i; public $arr = array("A", "B", "C", "D"); function Sample(){ $this->i=0; } function output(){ while($this->i < count($this->arr)){ print("$this->arr[$this->i]<br>"); $this->i++; } } } $samp = new Sample(); $samp->output(); ?> 出力結果 Array[0] Array[1] Array[2] Array[3] foreachを使用する方法ならうまく出力されますが、この方法だと なんでうまくいかないのかわかりません。
>>917 print( $this->arr[$this->i].'<br>');
または
print( "{$this->arr[$this->i]}<br>");
919 :
nobodyさん :2009/07/29(水) 00:09:58 ID:4FaRK/k2
>>918 ありがとうございました。期待する表示がされました。
これってどういうことなんでしょうか?
print関数に渡す前に$thisを解決しておく必要があるということでしょうか?
ダブルクオート中でアロー演算子(->)と配列([])が文字列として扱われてるだけ シングルクオートの場合は変数すらも文字列として扱われる ○ "$var<br>"; ○ "{$var}<br>"; × '$var'<br>; × '{$var}<br>'; ○ $var . "<br>"; ○ $var . '<br>'; × "$this->a[]<br>" ○ "{$this->a[]}<br>" ○ $this->a[] . "<br>"
921 :
nobodyさん :2009/07/29(水) 00:34:24 ID:4FaRK/k2
>>920 おお、なるほど。
解説ありがとうございました。
923 :
906 :2009/07/29(水) 08:15:18 ID:cjl2IXaK
phpのグラフですが、 軸ラベルとか凡例に日本語出したければ、jPGraphくらいしか ないのでしょうか? jPのフリー版だと6種類くらいしか作れないようで。
他でも出るでしょ。 具体的にどれでどうやって出ないと判断した?
$v = isset($variables['keyname']) ? $variables['keyname'] : NULL; とかくのがだるいんですけど、もっとかっこよく書ける方法ありませんか。 $v = array_get($variables, 'keyname'); みたいなのがあればいいんですけど。
っていうfunction作ればいいじゃん
標準機能ではできないっつーことですかね。
928 :
nobodyさん :2009/07/29(水) 14:34:52 ID:xKqUPasC
【OS名】FreeBSD 6.2 【PHPのバージョン】PHP 4.3.4 phpで外部コマンド(ps aux)の戻り値を取得したいんですが なぜか、結果の一行が80バイトで切られてしまいます。 [期待] nobody 3040 0.0 0.4 34000 17652 ?? S Sun05AM 5:56.90 /usr/local/apache/bin/httpd [結果] nobody 3040 0.0 0.4 34000 17652 ?? S Sun05AM 5:56.90 /usr/local/apach ※shell_exec(), system(), passthru()全て同じ結果です。 結果を末尾まで取得したいのですが、何か方法ありますでしょうか?
>>928 PHPのせいじゃなく、ps auxの出力自体が、80バイトで切られていると思う。
ps auxww とかでやってみてはどうだろう。
930 :
nobodyさん :2009/07/29(水) 14:48:41 ID:xKqUPasC
>929 おー!ありがとうございます。出来ました。 コマンドラインからだと ps aux で表示出来ていたので php のせいかと思ってました。 ありがとうございました^^
931 :
nobodyさん :2009/07/29(水) 15:36:43 ID:ZW0xU0/l
mb_convert_encoding("hello, world!", "utf-8", "sjis"); これって意味ありますか? つまり、半角の文字列のコードって文字コードによって変わるのでしょうか?
文字コードによって変わる。 でもまあ、その例のような7ビットで収まるコードは、 UTF-8もSJISも同じだけどな。
utf-16にしたら違いがわかるよ
Pleiades All in One php ってバラバラにeclipse入れてxampp入れるより 数倍ハヤクできるよね なんかいろいろいじって時間かかってたけど さっきこれみつけてガックリきた・・
1個ずつ入れるのが楽しいんじゃないか しかも全部ソースからコンパイル
936 :
nobodyさん :2009/07/29(水) 17:48:50 ID:jN1W2sq9
PHPでは、echoなりprintなりでHTMLが送信されるまえにHTTPヘッダーが自動的に送信されますが、 これに何かフックを仕掛けることはできますか。 やりたいことは、PHPが用意しているセッション機能ではなく自前のセッション機能を使いたくて、 それでPHPがHTTPヘッダーを送信するときに、自前のセッション用クッキーを送信しようとしています。 どなたかアドバイスをお願いします。 #自前のセッション機能の是非についてはスルーの方向でお願いします。
header()
938 :
nobodyさん :2009/07/29(水) 19:33:37 ID:OT09YFlb
output_buffering = On になってんのを一時的に無効にしたいんだけど 関数で制御する方法を教えてちょんまげ
939 :
nobodyさん :2009/07/29(水) 20:24:58 ID:QWRvNOas
スマソ。。くだ質スレがみつからんので、、ここで聞かせて。 Google App EngineがPHPに対応したんでやりたいんだけど、金ってかかる? 用途は趣味のサイトの掲示板だから、10MBもあれば足りるんだけど・・
日本語で
941 :
nobodyさん :2009/07/29(水) 20:29:59 ID:QWRvNOas
だから、Googleに金払う必要はあるのってことでやんす。
日本語で
944 :
nobodyさん :2009/07/30(木) 01:39:34 ID:S7w57STy
apacheのログを取得して一覧表示させようとしてます。OSはFedoraで、バージョンは5.2.5です。 $pattern = '/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/'; $log_file = $_POST['select']; if (!$fp = fopen("/home/hogehoge/logs/$log_file", "r")) { echo "ファイルが開けません!"; die; } while (!feof($fp)) { $line = fgets($fp); preg_match($pattern, $line, $matches); $host = @gethostbyaddr($matches[1]); $time = preg_replace("/^\d.*2009:|\+0900/", "",$matches[4]); $refer = preg_replace("/NET.*/", "",$matches[9]); echo $host." ".$time." ". $refer."<br>"; } 自分の意図としては、最新のログを一番上に表示させたいのですが、これだと古いログが一番上に表示されてしまいます。 array_reverseやらrsortなど試したのですが思うよういきません。 ご教示お願いします。
<?php $pattern = '/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/'; $line = file("log.log",FILE_SKIP_EMPTY_LINES); $length = count($line); $logarray = array(); for($i=0;$i<$length;$i++){ preg_match($pattern,$line[$i],$matches); $logarray[] = $matches; } $logarray = array_reverse($logarray,true); print_r($logarray); ?> こんな感じで
array_reverse($logarray,true); はarray_reverse($logarray); のほうが良さそう。
947 :
nobodyさん :2009/07/30(木) 02:45:34 ID:S7w57STy
>>945-946 おお、こういう方法もあるんですね。勉強になります。
ありがとうございました。
948 :
nobodyさん :2009/07/30(木) 11:18:52 ID:Mynk8nfn
$this->value = $this->lfGetData($id, &$obj); みたいな記述方法しているのですが、 Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer のようなエラーが出てしまいます。 翻訳(ツール)すると、 「呼び出し時間は参照パスに推奨しないです」のような感じのエラーですが、どういう意味でしょうか。 同じようなエラー出た人いませんか?
>>948 呼び出し時の参照渡しは非推奨だから関数(lfGetData)の宣言の方を
参照渡しになるように修正しろ。
どうしても呼び出し時の参照渡しをしたければ、
iniでallow_call_time_pass_referenceをtrueにすればできるけど、
将来のバージョンではこの機能がサポートされないかもしれない。
と読めるな。
function lfGetData($id, $obj){
}
となっているなら、
function lfGetData($id, &$obj){
}
に変更して、
$this->value = $this->lfGetData($id, $obj);
と呼び出せってことじゃないか?
オブジェクトは参照渡しでは?
php5からそうなったんだっけ。 というか、変数名をよく見てなかったよ...。
型は関係なし allow_call_time_pass_referenceはPHP4からの移行用だから 新規開発でonを必要とするものは書かないでね
953 :
nobodyさん :2009/07/31(金) 09:14:37 ID:lGlimiZC
PHP Python Ruby 来年からWEBエンジニアとして働く予定なんですが、あらかじめ勉強しておきたいと思っています。 初心者なんですが、どれを勉強した方が良いのでしょうか。会社からは、入社後にやるから入社前は勉強 しなくて良いと言われてるんですが、全くの初心者なので入社前に勉強しておかないと不安です・・・。 お願いします。
>>953 会社に質問できるなら会社で使われてる言語。
案外Javaとかかもしれないし。
質問できないならPHPあたりが無難かな。ここPHPスレだし
Perlもあるよ。
955 :
nobodyさん :2009/07/31(金) 09:51:02 ID:lGlimiZC
>>954 以前、聞いた事はあるんですが、「言語なんか気にしなくてもいい。入社後やるから。」と言われました。
でも、中途採用の所を見るとPHPでの開発経験○年以上とあるので、PHPかもしれません。
PerlとPHPなら、やはりPHPを勉強した方が良いですよね・・・。
>>955 今現在のスキルは?
htmlがわからないなら、phpよりもhtml/cssをやっておいたほうが教える方も助かる
htmlがわかるなら、今度はjavascriptとかも多少かじっておくといい
javascritpのようなクライアントサイドと、phpのようなサーバサイドで
それぞれ何をするべきかとか、ちょっとでもjavascript触っておいてもらえるとこれまた教えやすい
あとはwebエンジニアということなので、httpの仕組みとか勉強したほうがいい
完全に未経験ならプログラムの基礎からやったほうがいいのでは? 俺は学校でCとかPascal使ってやった
>>957 Pascalは個人じゃないだろ・・・。
Cは作ってても面白いものができないので、うぇb系の言語のほうが
いいと思うけどね
959 :
nobodyさん :2009/07/31(金) 10:16:50 ID:lGlimiZC
>>956 大学の時はC言語を勉強していました。WEB系ですとhtmlが少し解る程度です。
でも、高校の時にやってたので、かなり忘れてます・・・。
なので、htmlから勉強し直した方が良いかもしれませんね。
html→javascript→PHPの順に勉強しようと思います。
httpの仕組み・・・。頑張って勉強します。今日、本屋に行って勉強出来る本を探しに行こうと思います。
>>959 javascriptは奥が深いから、とりあえずどんな時に使うかと記述の仕方がわかればいいと思う
httpについては、URLを入力するとなぜ表示されるのか?を図解できればいいよ
あとapacheのモジュールとして使うPHPとCGIの違いとか。
結構、httpの仕組みとかわからない人多いから、やっとくと後々効いてくるから頑張ってね。
>>959 Cを習得しているなら本なんて必要ない
ネットで配布されてるプログラムDLしてきて解説サイト見ながらやればすぐに使えるようになる
962 :
nobodyさん :2009/07/31(金) 10:27:28 ID:lGlimiZC
>>960 質問して良かったです。今日から勉強を始めようと思います。本当にありがとうございました!
>>959 Javascriptは言語なんて勉強しなくていい。どんなことに使えるか、
どんな風に使うか。実装依存ありすぎの言語だからストレートに使う
と馬鹿をみる。むしろ実際の業務の上で使える例題を増やしていけば
いいというもの。
それよりは、Cをやっていたのなら、Javaをまずやった方がいい。
CとJavaの違いは、クラスを扱うことができること。PHP、Perlといった
メジャーなWebツールの殆どはクラスを扱えし、使う機会も多いから、
その基礎をJavaで勉強しよう。
ほかのひとが言うように、http の仕組みと、HTML、CSSは理解していた
方がいい。あと、基礎勉強しているうちに、色やフォントの理解もして
いたほうがいいよ。フォントのレンダリングとは何か、色ってのはどういう
構造で、どんな風にあらわすのか、とか。それと文字コードも。
エンジニアなら、全部勉強しろ。以上。
セキュリティは http を理解したあとでしょ。 それに最近のセキュリティ対策はそれぞれ の実装の上での問題となることが多い。 インジェクション対策とか、Apacheの特定の アップデートとか。いずれにしても、httpを 学べばひと通り、IPでできることも理解できる と思う。セキュリティは後付けで、そのときの 最新の情報を追っていけばいいと思うよ。 作る側の立場ならね。
勉強なんかつまんないから、そこそこできるようになったら スクリプト改造とか、サービス作成とかして学んだほうがいいよ
968 :
nobodyさん :2009/07/31(金) 12:58:41 ID:RzCftC+P
一般ユーザーがファイルを投稿できるアップローダーを作成しようとしています。 phpスクリプトのアップロードも許可しています。 headerで「Content-Type: application/octet-stream」を指定すればダウンロードになりますが、 これでphpスクリプトのダウンロードしても大丈夫でしょうか。 テストでは、スクリプトコード丸々書いてあるhoge.phpがダウンロードされました。
大丈夫ですかって何が? スクリプトコード丸々書いてあるファイルでなく何をダウンロードさせたいの?
>>968 それはどこかコーディング間違ってるんじゃないか。
PHPのファイルがダウンロードされたら困るだろ
>phpスクリプトのアップロードも〜 move_uploaded_fileで移動するときに拡張子を.phpから.txtに変えて直リンでいいと思う
どんな言語でも一つ憶えれば、他の言語に応用効くから 好きなのからやれ
httpの仕組みって ヘッダ情報と クッキーと POST・GETわかれば十分?
検索して出てくる上位サイトに書いてある事を理解できていれば平気
RFC読むのが先
そこまでいったんだから何番読むか書いてやれよ
977 :
nobodyさん :2009/07/31(金) 20:14:44 ID:f7nn6Kbb
var_dump($_POST)してみると幸せになれるのでは
980 :
nobodyさん :2009/07/31(金) 20:51:49 ID:f7nn6Kbb
申し訳ありませんが、こう書いているんだよという ソースかこういうことだよっていう サイトがみたいです。 参考になるサイトありませんか? よろしくお願いします。 配列わたしてんじゃね だけでは意味がわからない。
981 :
977です。 :2009/07/31(金) 20:56:51 ID:f7nn6Kbb
宿題?
var_dumpで、どんな値が送信されてるかチェックしたら一目瞭然でしょ?
>>981 「php チェックボックス」で検索してでてきたサイト見てみな?
それで何がわからないのか具体的に書いて
var_dumpでもprint_rでもしたらいいのに
986 :
977です。 :2009/07/31(金) 21:10:43 ID:f7nn6Kbb
たとえば<?php $checkbox = $_REQUEST["chk"]; ?><html> <head> <title>sample04</title> </head> <body> あなたの好きなものは。<hr> <?php for($i=0; $i<sizeof($checkbox); $i++){ print "${checkbox[$i]}<br>"; } ?> <p><a href="form4.html">戻る</a></p> </body> </html> で作ったものをひとつひとつに分解して、sql文に入れたり where文でひとつずつ検索をかけたりするにはどうしたらいいいの でしょうか?
$_GETでも$_POSTでもなく、あえて$_REQUESTで使うメリットあるんだっけといつも思う。 まあとりあえずvar_dump($_REQUEST)すりゃ筋道見えてくるだろ
988 :
977です。 :2009/07/31(金) 21:14:49 ID:f7nn6Kbb
そんな手とり足とり教えろってか?w 質問のレベルに達してないわ 仕組みがわからないというなら自分で調べな 書き方やコードに関する質問なら教えてあげるよ
>>980 次スレ&誘導張って
立てれないなら早いとこ立てれないといってくれ
立てるわ
995 :
977です。 :2009/07/31(金) 21:22:25 ID:f7nn6Kbb
>>989 書き方を教えてくれ。
それを自分でしらべる。
初心者スレにいったほうがいい?
>>990 すまない。踏んでしまった。
次スレはたてられない。
>>977 ∧_∧ 次スレでぼこぼこにしてやんよ
( ・ω・)=つ≡つ
(っ ≡つ=つ
/ ) ババババ
( / ̄∪
997 :
nobodyさん :2009/07/31(金) 21:28:48 ID:f7nn6Kbb
やめてください。 どうすればいいのかな?
そのサイトのフォームの送信先を自分で作ったphpに変えて送ってみ phpの内容は <?php echo "<pre>".print_r($_POST,true)."</pre>"; ?>
$_GET['tdk_cd'][0] = 13; $_GET['tdk_cd'][1] = 14; $_GET['tdk_cd'][2] = 11; $_GET['tdk_cd'][3] = 12; ってことだろ んでこの数字は県IDだろ 11埼玉 12千葉 13東京 14神奈川 これでわかりませんか?
つうかテーブル設計がどうなってるのか考えてみればどうやってデータ取り出すか想像つくだろ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。