【PHP】下らねぇ質問はここに書き込みやがれ 72
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/16(土) 12:01:25ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 71
http://pc11.2ch.net/test/read.cgi/php/1216291372/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0452nobodyさん
2008/08/25(月) 02:14:49ID:???ぶっ壊れたデータは戻せないと思うぞ
特に標準がasciiやlatin1だと最悪だ・・・
標準のコードがマルチバイトならbinaryで取り出してから変換すればいい
>>450
<? echo $txt; ?>の省略形な
0454nobodyさん
2008/08/25(月) 14:07:29ID:H4jIBY1A$image=getcwd().DIRECTORY_SEPARATOR.'a.gif';
print('<img src="'.$image.'">');
がIEでは表示されるのにFFだと表示されない。
DIRECTORY_SEPARATORではなく'/'と指定すると表示される。
なぜに?
DIRECTORY_SEPARATORなんか使わず常に/にしとけって意味?
0455nobodyさん
2008/08/25(月) 14:13:54ID:???0456nobodyさん
2008/08/25(月) 14:17:00ID:???0457nobodyさん
2008/08/25(月) 14:47:50ID:+ZyX5O5xリファラーワードによってリダイレクト先を変える場合って
どうやればいいですかね?
リファラーを取るまでは上手くできてるのですが…
0458nobodyさん
2008/08/25(月) 14:56:35ID:???どんな手法を取るか知らんがリファラを解析して宛先を決めるとこまで出来てるなら
header関数でLocationヘッダーを流せばいい
header('Location: 転送先URL');
0459nobodyさん
2008/08/25(月) 15:30:43ID:???0460nobodyさん
2008/08/25(月) 15:51:51ID:???Windowsだと;区切り、Linuxだと:区切りだけど、
配列からパス形式を生成する場合に簡単な方法ないかな
$array = array(
'/path/test_dir/',
'/path/PEAR/',
'/path/Smarty'
);
環境に応じて:や;で区切ってパスの文字列を生成
WindowsかLinuxか判別して
それぞれに応じて作成するのが正しいのか、
むしろそういう関数が既にあるのか・・・
0461nobodyさん
2008/08/25(月) 16:02:40ID:???http://jp2.php.net/set_include_path
>PATH_SEPARATOR 定数を利用することで、 オペレーティングシステムに依存せずに include path を追加することが可能です。
という便利なものがあるようだけど?
0462nobodyさん
2008/08/25(月) 16:04:49ID:???int_setでやってるのか知らないけど
普通にその配列ループしてset_include_pathかけりゃいいんじゃないかな
0464nobodyさん
2008/08/25(月) 16:06:30ID:???初めてしった、まじサンクス!!
こんな便利なものがあったのか、もっと早く気づけば良かった
0465nobodyさん
2008/08/25(月) 16:56:17ID:wWAEdZe4Array ( [name] => 元旦 [year] => 2008 [month] => 01 [day] => 01 )
こういう連想配列の場合、どのようにして比較すればいいのでしょうか?
forで出力してifで比較する以外で、方法がありましたら教えて下さい。
0467nobodyさん
2008/08/25(月) 17:06:19ID:ddePEaRiFromの行からメールアドレスだけ正しく取得する、という処理がうまくいきません。
フォーマットがたくさんありすぎて、対応に困っています。
"name" <mail@mail.com>
<mail@mail.com>
mail.com
のほか、””で囲っていないnameがあったり、ググって出てくるスクリプトを使っても判定できませんでした。
(http://memo.majide.com/index.php?%A5%E1%A1%BC%A5%EB%BC%AB%C6%B0%CA%D6%BF%AE%A4%CE%C0%DF%C4%EA%A4%C8PHP%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8)
プログラムの概要としては、vpopmailの.qmail-XXXファイルからパイプでメール内容を渡し、
標準入力からメールを解析して、From部分を取り出す、というものです。
何か良いライブラリなどございましたらご紹介お願いいたします。。
0469nobodyさん
2008/08/25(月) 17:09:46ID:???エスパーしてみる
比較というより、month=01 day=01 というキーを与えて、
name=元旦 という値を取得したいんじゃないのかい?
ならば、配列の持ち方は、$name = array('0101'=>'元旦', '1231'=>'大晦日')
で参照は$nama['0101']でOK
0470465
2008/08/25(月) 17:10:37ID:???今まで下記のようにして出力していたのですが、
カレンダーの日数毎にforeachでチェックするのも
負荷がかかると思い、他の方法を模索しています。
foreach($date_array as $date){
if($date["year"]=="2008" && $date["month"]=="01" && $date["day"]=="01"){
echo $date["name"];
}
}
0471nobodyさん
2008/08/25(月) 17:17:37ID:???PEAR::Net_POP3だと思う。
>>467
PEAR::Net_POP3のgetParsedHeadersで
ヘッダの内容を連想配列に格納できるから、
それで取得するのが楽だろうな。
0472nobodyさん
2008/08/25(月) 17:35:52ID:ddePEaRiありがとうございます。
POP3に接続せずに、メール内容を解析する方法はないでしょうか?
0473nobodyさん
2008/08/25(月) 17:37:27ID:???ごめん、mimeDecodeのことだわ
PEAR::Mail::mimeDecodeで生メールの解析ができる
0474nobodyさん
2008/08/25(月) 17:43:09ID:ddePEaRiありがとうございます。
しかし、そのライブラリを使っても、>>467のとおり、間に改行が入っていると、
改行後の文字を無視してしまうので、完全ではないんですよね。。
自分で作るしかないのかなぁ。。
0475nobodyさん
2008/08/25(月) 17:53:05ID:???$date_arrayの管理方法を見直した方がイイ
それが出来ないならforeachよりarray_mapの方が今回の例では高速
0476nobodyさん
2008/08/25(月) 21:34:33ID:Ich0UEjQID year month day stage
1 2008 8 1 tokyo
2 2008 8 2 tokyo
3 2008 8 6 osaka
4 2008 8 7 osaka
5 2008 8 13 tokyo
6 2008 8 14 tokyo
7 2008 8 15 tokyo
8 2008 8 20 nagoya
9 2008 8 25 fukuoka
10 2008 8 30 sapporo
0477nobodyさん
2008/08/25(月) 21:38:21ID:Ich0UEjQ----------------------
|2008 8 1 | tokyo |
------------| |
|2008 8 2 | |
----------------------
|2008 8 6 | osaka |
------------| |
|2008 6 7 | |
----------------------
|2008 8 13 | tokyo |
------------| |
|2008 8 14 | |
------------| |
|2008 8 15 | |
----------------------
|2008 8 20 | nagoya |
----------------------
|2008 8 25 | fukuoka |
----------------------
|2008 8 30 | sapporo |
----------------------
0478nobodyさん
2008/08/25(月) 21:39:51ID:???0479nobodyさん
2008/08/25(月) 21:41:09ID:Ich0UEjQmysql_select_db($database_, $db);
$query = sprintf("SELECT * FROM `table`);
$query_list = mysql_query($query, $scdb) or die(mysql_error());
$query_info = mysql_fetch_assoc($query_list);
$totalRows = mysql_num_rows($query_list);
という風に抜き出して
do{
//いろいろ表示
}while($query_info = mysql_fetch_assoc($query_list));
とすると連続で同じ場所のところが縦に結合できないですが
どうすればいいでしょうか?
前の上側のセルと同じなら+1とかはできるんですが、rowspanの設定を書き込むには遅いですし・・・
ご教授願います。
※半角スペースがずれました・・
0481nobodyさん
2008/08/25(月) 21:47:02ID:???「などは」だろ。
>できるんですが
「できるのですが」または「できますが」だろ。
>ですし・・・
「です。」だろ。
>ご教授願います。
「ご教示願います。」だろ。
>ずれました・・
「ずれました。」だろ。
0482nobodyさん
2008/08/25(月) 21:48:06ID:???0483nobodyさん
2008/08/25(月) 22:45:13ID:EsfmR+iCLinux上のApache+PHPですと動くのですが、
Windows系のApache+PHPですと動いてくれません。
errors.txtを見ると
PHP Warning: fopen(./../data/rsc203.dat)
No such file or directory
などとなっており、たしかにrsc203.datというファイルは存在しません。
Windows系のApache+PHPで動かすには何か必要なのでしょうか?
ちなみにWindows系のApache+PHPはいくつか試しているのですが、
Apacheは2.0でPHPは5.2.3、gdは2.0.34とqr_img.phpが要求している
バージョンをクリアしていると考えています。
お願いします。
0484nobodyさん
2008/08/25(月) 23:13:01ID:???http://www.swetake.com/qr/qr_cgi.html
これ?
動作確認環境にwindows含まれてないじゃん。
作成者に聞くのが一番確実かと。
0486nobodyさん
2008/08/25(月) 23:32:37ID:???0490nobodyさん
2008/08/26(火) 01:48:27ID:???この質問は>>484でFA
−−−−−−−−−− 終了 −−−−−−−−−−−
0491nobodyさん
2008/08/26(火) 08:49:21ID:x5C4Qb0iそんなこと言うとこのスレの存在意義がわからなくなる。
知らないなら黙ってれば良いのに。。。
0493nobodyさん
2008/08/26(火) 09:24:20ID:???0494nobodyさん
2008/08/26(火) 10:28:41ID:???0495nobodyさん
2008/08/26(火) 10:43:45ID:x/K+QJ+WあるIPアドレスがcidr表記のアドレス範囲に含まれているか否かを
判定したのです。
0497nobodyさん
2008/08/26(火) 11:25:06ID:???関数はないなぁ
ビット演算子を使ってマスクからネットワークとブロードキャスト出して
各オクテッド毎にチェックさせればいいんでない?
IPはstringだからドットで分割した後intにキャストしないとビット演算子での計算結果狂うから注意
0498nobodyさん
2008/08/26(火) 11:40:43ID:???分かっているとは思うが、
クオートのために*_escape_stringを使っても、不正な文字を埋め込められる場合がある。
http://blog.ohgaki.net/set_namesa_mcb_asc
本文よりコメ欄に注意
なので、
>>439
mb_check_encodingしてからPDOで渡すのがいい。
0499nobodyさん
2008/08/26(火) 11:42:15ID:MPzk6qs2ここは無知を晒して質問する場かと思ってました。
あなたがここの管理人さんだったのですね。
毎日監視お疲れ様です。
>>486
正論ですが、スクリプトを作った方には同じような質問が
何度も届くわけで、すでに同様の質問をした人がこの辺に
居れば情報の共有ができ、さらに以降同様の疑問をもった方が、
ここにたどり着いて問題を解決することもあるわけで。
0500nobodyさん
2008/08/26(火) 11:44:28ID:???mb_check_encoding?
>>444のやり方じゃダメなの?
>>444で設定しなおしたが、問題なさそう。
0501nobodyさん
2008/08/26(火) 11:46:45ID:???1対1なら好きなようにサーバ側で設定したらいい。
0503nobodyさん
2008/08/26(火) 11:52:45ID:x/K+QJ+W回答ありがとうございました。
0504nobodyさん
2008/08/26(火) 12:02:05ID:x/K+QJ+Wa.html
の中で
<?php
virtual("/cgi-bin/x.php?1234");
?>
と記述して
x.phpで
$_SERVER['QUERY_STRING']
を取得してプログラムが動いていました。
これの処理の前にa.htmlにSSI機能を使って、b.ssiを
読み込み、b.ssiの中で
<?php
virtual("/cgi-bin/y.php");
?>
と記述し、動作確認をしました。
y.phpは正常に動くのですが、
今まで動いていたx.phpが
正常に動きません。
x.phpの中の環境変数をechoしてみると
y.phpの環境変数が出力されました。
環境変数の上書きがなされていないようです。
こういう場合、どうすれば良いのでしょうか?
0506nobodyさん
2008/08/26(火) 12:10:04ID:???htmlでPHPが動くようにしてるんだからssiを使わずにphpに統一しちゃマズイの?
と言うかphpの呼び出しにはvirtualよりinclude/requireがイイと思うのは勘違い?
0507nobodyさん
2008/08/26(火) 12:18:43ID:x/K+QJ+W変更ファイルの数が多くて、PHPに統一できないのです。
x.phpの中の環境変数はその前に実行したy.phpを
引継ぎ、上書きされないのがPHPの当たり前なのでしょうか?
0508nobodyさん
2008/08/26(火) 12:27:04ID:???virtualは呼び出し元の環境変数を受け継ぐけど呼び出し元へは反映させないはずだから
ssi経由のy.phpの環境変数がx.phpに適用されるのは良くわかんないな
b.ssiの記述方法によってはy.phpの環境変数がa.htmlに上書きされるかもしれん
b.ssiでphpのvirtual使ってるからそんなはずないんだけど・・・
0510nobodyさん
2008/08/26(火) 12:55:24ID:???0511nobodyさん
2008/08/26(火) 12:57:17ID:x/K+QJ+W0512nobodyさん
2008/08/26(火) 14:07:39ID:???少ないデータなら、HTMLで表示させて手動で登録し直す、ってことが出来るんですけど
大量のデータだとちょっと無理がありまして・・・。
0513nobodyさん
2008/08/26(火) 14:08:41ID:x/K+QJ+W解決が分からん。
y.phpの中で
$_SERVER['xxx']で
環境変数を参照すると
x.phpまで引き継がれ、
y.phpの中で
$_SERVER['xxx']で
環境変数を参照しないと
x.phpの中の環境変数取得で
正しく取得される。
0514nobodyさん
2008/08/26(火) 14:31:02ID:???なら、mb_encodeなんとかで出来るんじゃないの?
0515nobodyさん
2008/08/26(火) 14:47:45ID:???binayなら壊れないからnamesにbinaryをセットしたりして取り出してから
ISO-8859-1(latin1)からutf-8に変換すればイイよ
mysql_dumpとかでも--default-character-set=binaryで出力してから変換すればいい
mysqlから出力する際に自動変換で壊れる可能性があるからbinaryで無変換のまま取り出してみようって案
0516nobodyさん
2008/08/26(火) 14:54:53ID:???これから色々とお世話になりますが、どうぞ宜しくお願いします。
0517nobodyさん
2008/08/26(火) 14:59:38ID:x/K+QJ+Wa.htmlに
<?php
virtual("/cgi-bin/y.php");
?>
<?php
virtual("/cgi-bin/x.php");
?>
と書いて
y.phpで
$_SERVER['xxx']
を取得すると
x.phpの中での
$_SERVER['PHP_SELF']は
y.phpになる。
この値を
x.php
と出来ないもんだろうか?
0518nobodyさん
2008/08/26(火) 15:14:53ID:WAy8FwvQコンストラクタでnewするやつと
factoryメソッドがあって::factoryってやって作るやつとあるけど
どう違うの?
0520nobodyさん
2008/08/26(火) 15:32:06ID:x/K+QJ+W$_SERVER["PHP_SELF"]
を
apache_getenv("PHP_SELF")
に変えたら出来た。
こんな方法で良いのだろうか???
0522nobodyさん
2008/08/26(火) 18:05:39ID:x/K+QJ+Wちと、ダメだ。。。
ssiとPHPは一緒に使わない方がいいみたい。
apacheが1分間隔で再起動して
挙動が変だわ。
ssi辞めて、phpで統一するわ。
相当あるんだよな、書き換えるファイル。
0523nobodyさん
2008/08/26(火) 18:10:11ID:???という文字列を
"20001231"
にしたいのですが、PHPではどう書くのがスマートですか。
今は preg_replace('/-/', '', $str) としています。
もっといい書き方があればおしえてください。
0527nobodyさん
2008/08/26(火) 19:46:19ID:C/n8oxtASQLの「地の文」の?だけを置換するにはどうしたらいいですか?
0528nobodyさん
2008/08/26(火) 19:48:33ID:qM7jKR0bセッションて継続するんですか?
セッションデータはファイルで保存されているので、セッション切れずに
継続するんじゃないかと思っていますが、どうなんでしょう。
使用しているサーバが1日1回apacheを再起動しているらしくて
その時間にセッションの動作がおかしくならないかぁ、とちょっと心配。
0529nobodyさん
2008/08/26(火) 19:49:57ID:x/K+QJ+WSSIってそうなんだ?
今、100万ファイルの更新中です。
0530nobodyさん
2008/08/26(火) 19:51:46ID:???>正規表現使わないならstr_replaceでよくね?
ありがとうございます。str_replaceを使うことにします。
0532nobodyさん
2008/08/26(火) 20:30:03ID:x/K+QJ+W教えられないです。
でも、100万ファイルあって、
SSIでインクルードしてるんです。
これを書き換えて、チェックバッチで確認して、
バックアップして、さらに、もういっこバックアップして、
ってのがつらいので、簡単に済ませようと
しましたげど、もう、統一します。
0533nobodyさん
2008/08/26(火) 21:31:12ID:???手軽にやるならドライバをループさせてpreg_replaceのlimitに1を指定して置き換え?
str_replaceにもlimitがあればなぁ
>>528
セッションファイルなら再起動しても生存時間までは持続
>>532
苦労の分、オーバーヘッドは減りそうだな・・・
0534nobodyさん
2008/08/27(水) 01:07:21ID:???今日は[[とても]]楽しかったね。[[明日]]はもっと楽しくなるといいね。
という文章があったとして[[(..*)]](大カッコ二つ)にヒットする文字列の抽出を行いたいのですが、
どうしても上手くいきません。上記ですと、
[[とても]]楽しかったね。[[明日]]
↑までが一つとしてマッチしてしまいます。
どうしたらよいでしょうか・・・?
0535534
2008/08/27(水) 02:00:55ID:???向こう逝ってきます。。。
0536nobodyさん
2008/08/27(水) 11:36:16ID:RCwwZoSdphpの文字コードを全てUTF-8に統一していたのですが、
ふと読んだ本で、Unicodeには色々あってUTF-8だけではないことを知りました。
UTF-16の方は2バイトなので、そちらの方が容量が少なくて済むらしいですが、
Unicodeでお勧めの文字コードはありますか?
ちなみに私のサイトには色々な国の方が来るので、
できるだけ多くの言語に対応できる方がいいです。
0537nobodyさん
2008/08/27(水) 11:46:08ID:???>できるだけ多くの言語に対応できる方がいいです。
それならutf16でいいじゃまいか
マルチバイトを多く使うならutf16がいいけど、htmlとどっちの割合が多いかで決めればいいかも
utf8は英数を1バイトで、utf16は英数も2バイトで表現するからね
0539nobodyさん
2008/08/27(水) 12:23:18ID:???どっちをつかうべきか判断材料がありましたら教えてください。
0540nobodyさん
2008/08/27(水) 12:25:32ID:???0542nobodyさん
2008/08/27(水) 12:34:18ID:???ステートメントと関数と言う違い
issetは引数を複数持ててANDで評価出来るし、変数自体がなくてもE_NOTICE出ねぇ
後、良く見れ、返り値の型も違うぞ
0543nobodyさん
2008/08/27(水) 12:37:28ID:???0544nobodyさん
2008/08/27(水) 12:40:41ID:???うむそれで計何バイトくらい節約できるのかなと。純粋な興味で。
>>543
もうすこし具体的な質問よろしくお願いします
0547536
2008/08/27(水) 12:43:06ID:???低脳ばかりで嫌になります。さようなら。
0548nobodyさん
2008/08/27(水) 12:46:24ID:???マルチだけを見れば33%OFFだな
asciiの分が逆に2倍だから実際のバランスを見ないと分からんだろうなぁ
しかもファイル毎に違うとキタ
phpで書くんだからシングルバイトが多いはず、だからutf8の方が良さそうだよな
>>543 >>545
そもそもどの回答のことだ? idもないし引用もないし特定できん
0549nobodyさん
2008/08/27(水) 15:39:43ID:???どうせお金もっていないから対応しなくても大丈夫だよね。
イーモバイルの帯域が多すぎて面倒だし、ほとんどユーザー居ないし。
0550nobodyさん
2008/08/27(水) 17:23:38ID:???どうせ、高橋克典と一緒で時間の問題で潰れるのが関の山だよ。
資本力がない会社が、安さだけを売り物に参入したってダメだって。
0551nobodyさん
2008/08/27(水) 17:38:02ID:prLSJkK3ローカル環境でテスト済みのスクリプトを共有サーバーに移したところ、
Fatal error: Class 'DOMDocument' not foundが出て動きませんでした。
共有サーバー(PHP Version 5.1.6)を
ローカル環境(PHP Version 5.2.3)と比較したところ、
phpinfo()でdom項目がサーバー側には無いことが分かりました。
調べたところ、DOMはPHP5.00以降から基本モジュールに内包されており、
外部モジュールは存在しないとのこと。
http://php.benscom.com/manual/ja/dom.installation.php
なんとかDOMを利用する術はありますでしょうか?
# PEARのライブラリはuserフォルダに別途ファイルを設置して、
# スクリプト内でini_set("include_path", "./util/PEAR");としていました。
■ このスレッドは過去ログ倉庫に格納されています