【PHP】質問スレッドpart34【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/21(火) 10:19:14ID:???【ガイドライン】
質問の前にgoogleやマニュアルを検索してください。
http://www.php.net/manual/ja/
http://php.s3.to/namazu/
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄には何も記述しないでください)
2. ハードウェア、OSのバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。
5. 質問者としても態度をわきまえること。
◆質問後の注意
・質問者は必ずIDを表示させてください。
書き込む場合はメール欄に何も記述しないでください。
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
過去スレ、関連リンク、FAQ等>>2-10辺り
0766nobodyさん
2006/05/09(火) 09:46:19ID:???今はserialize()して、ファイルをアップロードして、
次のページでそのファイルをunserialize()するって
作業をしてるんですが、ファイルを作るのがどうも
ひっかかるんですよね。
http://jp.php.net/manual/ja/language.oop.serialization.php
0767763
2006/05/09(火) 09:47:59ID:???0771nobodyさん
2006/05/09(火) 11:36:45ID:???文章中の特定の語句を、「str_replace」を使って別の語句に一括置換する際、
htmlタグ内部の語句についてはエスケープさせたいのですがうまくいきません。
[文章例]
<a href="ttp://abc.def/" title="リンク先">某サイト</a>へリンクします。
上記例では、「 title="リンク先">」の「リンク」については置換せずに、
「リンクします。」の「リンク」だけを置換したいのです。
どなたかヒントを含め、何か教えていただけると助かります。
0772766
2006/05/09(火) 11:50:43ID:???マジ初心者ですみません。単にサーバ上でファイルに書き込むだけです。
>>769
serializeした文字列をPOSTしたあと、次のページで
http://jp.php.net/manual/ja/language.oop.serialization.php
の例の
$s = implode("", @file("store"));
$a = unserialize($s);
に対応する部分が書けず、仕方なく例と同じ手段をとってます。
>>770
まだセッションについて全く理解してないので調べてみます。
まさかこんなにレスが付くと思いませんでした。感謝です。
0773nobodyさん
2006/05/09(火) 12:15:28ID:???str_replaceでやるのは難しいんじゃないかい。
preg_replaceとかで正規表現駆使せんと。
0774nobodyさん
2006/05/09(火) 12:17:38ID:???普通にやりゃいいだけの話なのに自分が未熟だからコードが書けないだけで
> ファイルを作るのがどうもひっかかるんですよね。
とか言われても回答に窮するだけだと思うんだが。
0775771
2006/05/09(火) 14:16:59ID:???やはりそうですか。
少し考えたのですが、htmlタグをエスケープするのが難しいです。
置換前の語句を\wordとして、次のようなコードなどを含め何個か試したけど全滅。orz
$text = preg_replace('/^(<\/?)('.$word.')^([^>]*>)/e', '<a href="/link.php">\\2</a>', $text);
正規表現の才能が欲しいです。。
0776nobodyさん
2006/05/09(火) 14:48:06ID:hIUILZCE、そのようなことは可能でしょうか?
ファイルはコピーできたのですが、ディレクトリのコピーができません
0780nobodyさん
2006/05/09(火) 15:51:24ID:???>>754って日本語が変なんだもん。全部で1つの文になってて、
「共有サーバとかで、〜(中略)〜共有サーバでも使えますか?」
もうちょっと他人にわかるように書きなさいな。
0781nobodyさん
2006/05/09(火) 15:53:44ID:???まあ意地悪してやんなさんな。
大体わかるでしょ(間違ってたらしょんぼりだけど)
>>779
正しく設置、includeされていればいけるはず。
というか、なんで試さないの?
無料のところでもいいから試して見れば早いかと。
0783nobodyさん
2006/05/09(火) 18:32:44ID:???0785nobodyさん
2006/05/09(火) 22:59:03ID:???0786nobodyさん
2006/05/09(火) 23:31:47ID:???お前、質問する態度としては最低の部類に入るクチだな。
そういう態度ではなおさら答える気にもならん。
情報はタダで手に入るのが当然だ、と思ってる感じが気に入らない。
しかも自分でもロクに検索すらしてないようだし。
0787nobodyさん
2006/05/09(火) 23:45:55ID:???基本的には該当文字の両脇が>と<で挟まれてたらマッチ対象になると考えればいい
preg_replace("/(>[^<]*)$from([^>]*<)/", '$1'.$to.'$2', $text);
>>784
>745で答え貰ってるだろ
0788nobodyさん
2006/05/09(火) 23:51:41ID:???まず SELECT COUNT(*)して全体のレコード数を取得して
その値に+1したものをPRIMARYにしているのですが、
beginTransaction();
した後にはクエリーを1回しか発行できないようです。
beginTransaction();の前にPRIMARYを求めるのが普通なのでしょうか
0789nobodyさん
2006/05/10(水) 00:35:21ID:WURMeF5pという設定がphp.iniありますが、これはどうことをするためのものなんでしょうか?
0790nobodyさん
2006/05/10(水) 00:37:12ID:???>beginTransaction();
>した後にはクエリーを1回しか発行できないようです。
どうして
0791nobodyさん
2006/05/10(水) 00:38:21ID:???ttp://www.php.net/manual/ja/ref.mbstring.phpより
>シングルバイト対応の関数を mbstring 関数の対応する関数でオーバーロード (置換)します。
ドキュメントくらい読もうよ…
0794nobodyさん
2006/05/10(水) 01:23:33ID:EkcMnrpqxamppをインストーラーで全てインストールしました。
apacheを起動して
http://localhost/xampp/
や
http://localhost/
にも接続してみましたがxamppのコントロールパネルなどに接続できず、
テスト用のphpにもひょうじされません。
これはどのような原因が考えられますか?よろしくご指導ください。
環境はXP・IE6です。
0795nobodyさん
2006/05/10(水) 01:34:01ID:???PRIMARYキーとなる$idをSQL発行で取得。
そのごprepareを受け付けてくれないのです。
>>792
mysqlに依存しているので、できればauto_incrementは使いたくないですね。
0796794
2006/05/10(水) 01:49:33ID:EkcMnrpqとでてしまいます。
わかりにくい説明でもうしわけありませんが、よろしくお願いします。
0797nobodyさん
2006/05/10(水) 03:15:21ID:hRdDy7dia.phpとb.phpで共通利用する関数などは
common.php等に書いておいてincludeするものだと思いますが、
複数の共通関数があるとincludeしたものの使用しない関数もあると思います。
高アクセス条件下においてはメモリの消費も馬鹿には出来ません。
極論を言えば関数毎にファイルを分ければ良いのでしょうが、
それもなんだかめんどくさいので、何か良い知恵があれば
教えてください。
0798nobodyさん
2006/05/10(水) 03:37:14ID:???とりあえずそういう挙動は単にhttpdが動いてない時のもの
/logs/error.logに何か書いてあるかも
>>797
ベンチマークの取り方を覚えるといいんじゃないかな
0799nobodyさん
2006/05/10(水) 05:26:20ID:???Winのスタートメニューのアパッチに「Monitor Apache Servers」ってのもあるよ
アパッチがきちんと起動出来ているかこれで確認できる。
0801nobodyさん
2006/05/10(水) 09:19:05ID:???共通関数を別ファイル(ライブラリ化)するメリットは、メモリ消費云々よりも後々のメンテや生産性の向上の為であると思うけどね。
最近の鯖スペックなら多少の事なら誤差の範囲。
決め付けるわけではないが、そういう細かい事にこだわる人に限って、肝心な部分が見えてない人が多いと最近特に感じる。
0802nobodyさん
2006/05/10(水) 11:08:25ID:???コードキャッシュ型のアクセラレーターを使うのがいいんじゃないかな。
でもまず、commonとかに全部押し込まないで機能カテゴリー別にファイル分けれ、って思うけど。
まさか10個やそこらの関数でメモリ消費云々言うとも思えないし。
0803nobodyさん
2006/05/10(水) 12:34:18ID:ADlLU0Cj0805803
2006/05/10(水) 13:47:10ID:ADlLU0Cjレスありがとうございます。
関数ごとにベンチマークをとる場合、全ての関数に時間を測るコードを埋め込むしかないでしょうか?
0807nobodyさん
2006/05/10(水) 19:28:55ID:???xdebugでプロファイルすればー
ttp://www.glamenv-septzen.net/pukiwiki/index.php?PHP%2Fxdebug
0808794
2006/05/10(水) 21:44:19ID:qX9rDLEhありがとうございます。
ApacheMonitor.exeを立ち上げましたが、
running all apache services
と表示されて特に問題はなさそうです。
>>798
ありがとうございます。
ログですが、かなり溜まっているようです。77kBありました。
下の10行ほどを抜き出してみます。
C:\Program Files\xampp\apache\logsから
PHP Warning: Function registration failed - duplicate name - openssl_pkcs7_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_private_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_private_decrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_public_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_public_decrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_error_string in Unknown on line 0
PHP Warning: openssl: Unable to register functions, unable to load in Unknown on line 0
[Wed May 10 21:39:24 2006] [notice] Child 3656: Child process is running
[Wed May 10 21:39:24 2006] [notice] Child 3656: Acquired the start mutex.
[Wed May 10 21:39:24 2006] [notice] Child 3656: Starting 250 worker threads.
[Wed May 10 21:39:25 2006] [notice] Child 3656: Starting thread to listen on port 80.
[Wed May 10 21:39:25 2006] [notice] Child 3656: Starting thread to listen on port 443.
こんなエラーが出ているのですが、原因はなんなのでしょうか?
ご存知のかたいらっしゃいましたらどうかよろしくお願いします。
0809spam業者のアドレス
2006/05/10(水) 23:28:55ID:???apacheスレ池
0810nobodyさん
2006/05/11(木) 00:25:10ID:???0811nobodyさん
2006/05/11(木) 01:26:06ID:???0812nobodyさん
2006/05/11(木) 01:53:39ID:???htmlspecialcharをしてから格納をしたほうがいいですか?
それとも
DBから引き出した後にhtmlspecialcharしたほうがいいですか
0813nobodyさん
2006/05/11(木) 02:17:25ID:???お、お前・・・・・・・・。
その関数の働きや、それを使う意味を全く理解してないからこその質問だな。
まず一回氏んでこい。そしてとりあえず「サイテロ」でも読んでこい。
0815nobodyさん
2006/05/11(木) 08:47:25ID:Nnnm8SbYこれで一応動くのですが、カッコ悪いので。
使い方としては、ファイルの一レコード目にキーを書いておいて、
2レコード目以下の条件にあったものを連想配列でアクセスする
といったことを考えています。
$keys = array("id","name");
$value = array("99999","小泉純一郎",);
//-----
$count = count($keys);
for($i = 0;$i < $count;$i++){
$rensou [$keys[$i]] = $value[$i];
}
//-----
0816nobodyさん
2006/05/11(木) 08:53:26ID:???ずばりarray_combine。
つーかファイルから読み込んでる時点で$rensouにちゃんと入れてけばいいんでないの?
0817nobodyさん
2006/05/11(木) 09:21:14ID:???後者が良い。
>>813
初心者の内は誰もが疑問に思う事だと思うが、addslashes()とかと勘違いしてない?
0818nobodyさん
2006/05/11(木) 09:26:46ID:???でも使っているのは4.xだ。
ファイルで読み込むときは$rensouに直接放り込んでます。
サンクスです。
0819nobodyさん
2006/05/11(木) 10:23:28ID:???>>812じゃないけどDB格納後の方が良いメリットってある?
DB格納前にサニタイズしておけば
表示側でのサニタイズのコード入れてなくていいから
それはそれで楽でセキュアなような気もしなくもないんだけど
(HTMLコード自体を入れるカラムとは例外として)
0820nobodyさん
2006/05/11(木) 10:38:15ID:???0821nobodyさん
2006/05/11(木) 10:56:38ID:???>>817じゃないが、うちもそのままサニタイズして表示するようなものの場合は、基本的に処理後にDBに記録してるな。
動的動作のものが殆どなので、多少コストも緩和されるしね。
まぁ、前か後か1アプリ内で統一させておかないと後々ややこしい事になると思うけど。
メリットとしてはなんだろうね。
CSVとかで保存した時に、色んなものでログの使い回しが利くとか…?
0822nobodyさん
2006/05/11(木) 11:19:59ID:???必ずどこかで漏れが生じてセキュリティに問題が発生する。
HTMLにしろSQLにしろ、エスケープはとにかく「直前」&「確実」が基本。
0823nobodyさん
2006/05/11(木) 11:23:25ID:???ファイルの内容(ソース)を変数に格納するのに最も簡単な方法はなんでしょうか?
直接file_get_contents()みたいなものを使えればいいんですが、
一旦一時ファイルを作って、それをfopenしてftp_fgetみたいな方法しか
思いつきませんでした。
もっとシンプルな方法あったらお願いします
ttp://jp.php.net/manual/ja/ref.ftp.php
0824nobodyさん
2006/05/11(木) 11:32:12ID:???サニタイズって呼ぶなキャンペーン。って
http://takagi-hiromitsu.jp/diary/20051231.html
のことなんだけど。
正しくは『サニタイズ言うなキャンペーン』だったが。
0825nobodyさん
2006/05/11(木) 12:26:52ID:???不可逆変換して保存すると元のデータに戻せないから
後でデータから"<a"タグを検索して抜き出したいとか思ったときに"<a"が変換でそうなったのか元からそうなのか判断できない
0826nobodyさん
2006/05/11(木) 12:34:00ID:???DBに対する考え方の違いかな?
先の例でいうとhtmlspecialchar()で変換後のデータをDBに入れるとか俺的にはありえないな。生理的に気持ち悪い。
例えば検索処理で要らないものまで拾ったりしそうだしさ。
例えば少しでも負荷の軽減をと考えるのであれば、処理後のデータをキャッシュしておいて、
そのキャッシュを表示させると考えるのが普通だと思うのだけどね。DB接続も入らないし。
0827nobodyさん
2006/05/11(木) 12:48:25ID:???0828nobodyさん
2006/05/11(木) 13:15:26ID:0g4oanFp(細かいバージョンは今頃SEがつめてるはず)
特にデータを落とす先のファイルの形式指定はありませんが、
ファイルじたいにパスワードをかけなければなりません。
となると、やっぱエクセルか??、と。
エクセルの場合Spreadsheet_Excel_Writerが結構実用的じゃないかってとこは分かったのですが
パスワードがかけれる云々に言及した資料は未だ捜索中です。
この場合、皆さんならどういった開発方法を考えられますか?
よろしくお願いいたします
0829spam業者のアドレス
2006/05/11(木) 15:14:38ID:???落としたファイルをzip圧縮してパスワードとか。
頻繁に落とす意味もよくわからんけど
・・・phpの質問スレっていうのはスレ違い感があるような
0830nobodyさん
2006/05/11(木) 16:09:40ID:???、そのようなことは可能でしょうか?
再帰使ってたら頭こんがらがってきて…
無限ループ・無限ループ・無限ループ・・・・・・
0831828
2006/05/11(木) 16:15:30ID:0g4oanFpまぁ、微妙だけどPHPだしな〜〜と思ったので。すみません
ところで、Zipに圧縮ってPHPでできましたっけ?
・・・.netにしてくれりゃー一発で終了なのに・・・クソSE
0832nobodyさん
2006/05/11(木) 16:18:25ID:???0834830
2006/05/11(木) 16:34:26ID:???レスありがとうございます
>mv
もしよろしければ詳しく教えていただけないでしょうか?
830を分かりやすくいうと、ディレクトリAの中のディレクトリやファイルをBにそっくりそのまま移すという感じになります
0835nobodyさん
2006/05/11(木) 16:47:17ID:???http://www.php.net/manual/ja/function.rename.php
0836nobodyさん
2006/05/11(木) 16:47:43ID:???ディレクトリを移動させればいいわけだから
`mv -f $from $to`;
でいいんじゃない?
phpのrename()はディレクトリには使えないっぽいからね。
移動させるときに他の処理が必要なら頑張って再帰かな。
5.1以降ならSPLにRecursiveDirectoryIteratorなんてのがあるけど、これどうなんだろう?
0837836
2006/05/11(木) 16:52:07ID:???renameでもディレクトリ移動できたorz
0838830
2006/05/11(木) 17:18:20ID:???移動ではなくコピーです
言葉足らずで申し訳ありません
0839nobodyさん
2006/05/11(木) 17:31:13ID:???http://jp.php.net/manual/ja/function.copy.php
あのねぇ……
0841nobodyさん
2006/05/11(木) 17:43:24ID:???839じゃないがどこに目をつけてるんだ
頭は生きているうちに使うもんだ
つUser Contributed Notes
0842823
2006/05/11(木) 18:01:21ID:???0843nobodyさん
2006/05/11(木) 18:12:23ID:g/mQfyCdテーブル「name」が[hoge]の場合に表示する。
変数を$list[name]に置き換える。
$conn = mysql_connect(localhost, root, 1111);
$selectdb = mysql_select_db(list, $conn);
$sql = "select * from list where name=hoge";
$rst=mysql_query($sql,$conn);
while($list=mysql_fetch_array($rst)){
echo $list['name'];
}
しかし、whileの行がmysql_fetch_array(): supplied argument is not a valid MySQL result resource
というエラーが出ます。どうしたら良いのでしょうか?
0844nobodyさん
2006/05/11(木) 18:16:03ID:???ftp_fgetでやれや。どうしてもってんならSocket使えば?
>>843
mysql_queryでエラーになってんじゃ?
name = 'hoge'
0845nobodyさん
2006/05/11(木) 18:21:20ID:???リモートファイル開いて一行ずつ処理するか
http://jp.php.net/manual/ja/features.remote-files.php
ソケット関数で原始的に処理するか。
"簡単に"ということなので後者なら、お膳立てされたライブラリがないか
まずは探してみることだね。PEARのはftp関数と同じでファイルとして落とす必要がある。
0847844
2006/05/11(木) 18:34:02ID:???今しがたの思いつき
file_get_contents("ftp://user:password@example.com/pub/file.txt")
とかはどうよ。
0848843
2006/05/11(木) 18:40:03ID:???以下のようにしろと言うことですよね?
$sql = "select * from list where name='hoge'";
しかし、特に変化ありません・・。というか、何も表示されません
0850nobodyさん
2006/05/11(木) 18:45:20ID:???エラーはどうなったんだよ?
それとレコードはあるのか? nameがhogeのレコード
つか、デバッグの方法を覚えるというか考えろよな
$sql = "select * from list LIMIT 10";
にして最後に
echo "読み込んだ件数:".mysql_num_rows($rst);
とかしてみるとか
0853nobodyさん
2006/05/11(木) 20:49:14ID:???komagataさんに何があったんでしょうか・・・。
随分長い間blog更新しないなぁと思ってたらいきなり「退職しました」ですもの。
なんかすごい気になる・・・。
いつもblog楽しみにしてたので、何かマイナスな事があったのなら悲しいなぁ・・・。
0854nobodyさん
2006/05/12(金) 01:13:33ID:???whileの前でmysql_error()を表示すればいい。
$rstをvar_dumpしても載ってたと思う。
0857nobodyさん
2006/05/12(金) 12:58:53ID:???0859nobodyさん
2006/05/12(金) 17:22:14ID:???0860nobodyさん
2006/05/12(金) 17:50:08ID:???0862nobodyさん
2006/05/12(金) 20:08:50ID:???apacheを設定しないとだめなのでしょうか?
0863nobodyさん
2006/05/12(金) 21:09:48ID:???可能だけど、PHPでスクリプトを処理した後
その出力を更にSSIとしてhttpdに処理させなくてはならない。
ApacheなんかだとApache2じゃないと無理だし、設定も必要。
全部PHPで処理した方が良いよ。
0864nobodyさん
2006/05/12(金) 23:47:57ID:???効率悪すぎるけど・・・
その前に、phpではなくssiで処理する必要があることって何だろう?
0865nobodyさん
2006/05/13(土) 00:29:00ID:???というよりDBの内容をメールしたいとなった時どうするの?
データってHTMLだけに出すものじゃないでしょ?
検索したりさ。
0866nobodyさん
2006/05/13(土) 09:09:58ID:sR0lmg54PHPを自分のパソコンで動かそうとしたんですけど
Apacheをインスコしたのは良いものの、どうやってするか教えていただけませんか?
■ このスレッドは過去ログ倉庫に格納されています