【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辺り
0320nobodyさん
2006/04/09(日) 02:46:33ID:???file_get_contentsのように全て読み込まないで、特定の文字列が来たら終わりというようにしたいのですが。
0323nobodyさん
2006/04/09(日) 03:12:58ID:???fgetsだと標準で改行まで読んでくれますが、
仮に特定の文字列が3文字だった場合などはどうすればいいですか?
その行を取り込んで更に処理するしかないでしょうか?
0324nobodyさん
2006/04/09(日) 03:16:04ID:???普通なら読むだけ読んで不要なデータを捨てた方が
結果的に処理が速いケースの気がするが、
読み込み自体を防ぎたいという目的(理由が分からんが)なら
freadで1バイトずつ読み込んで該当文字列を探せばいいと思う。
0325nobodyさん
2006/04/09(日) 03:28:30ID:XN61lwuX$d="2006-04-25";
という形式で保存されているデータがあるとして、この翌月を「5」ではなく「05」求めたい場合、
date("Y-m-d" , strtotime("+1 month",strtotime($d)));
これしか思いつかなかったんですが、もっとスマートな方法はありますか…?
0326nobodyさん
2006/04/09(日) 04:47:34ID:???date("Y-m-d",strtotime($d ."00:00:00 +1 month"));
細かいところにはあえてこだわらない
05の月部分を求めるなら date("m", だろう。
0327nobodyさん
2006/04/09(日) 21:24:55ID:???(
[0] => hogehoge
)
このようなオブジェクトの0プロパティ(?)にアクセスするにはどうすればいいですか?
$obj->0 としても数字使うなって怒られます。
0328nobodyさん
2006/04/09(日) 21:52:21ID:???0329nobodyさん
2006/04/09(日) 21:55:38ID:???シングルクオーテーションですか?それでやってもエラーになってしまいます。
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting T_STRING or T_VARIABLE or '{' or '$'
0331nobodyさん
2006/04/10(月) 02:48:26ID:???本当にプロパティ名が 0 で値を持つなんていうオブジェクト作れるのか……?
まぁもし本当にあったら俺は get_object_vars 使って中身を配列で取得するな。
0332nobodyさん
2006/04/10(月) 03:41:33ID:???どうやればいいですか?
0334nobodyさん
2006/04/10(月) 04:05:15ID:???プロパティ名を数字にすること自体はPHP4でもPHP5でも可能ですよ。
常用してると後で取り返しの付かないことになりそうだけど。
$ちんぽ = array('10cm', '20cm', '30cm');
$中出し = (object)$ちんぽ;
print_r($中出し);
0335nobodyさん
2006/04/11(火) 03:56:23ID:???例えばソースや内部エンコードをEUCに統一していたとしても、どうやらSJISでしか出力しないようで。
昔1を使用していた時は問題なくできたのですが、今はPHP5では2しか使えないようで困っています。
0337nobodyさん
2006/04/11(火) 10:54:39ID:???0338nobodyさん
2006/04/11(火) 12:04:35ID:???0339nobodyさん
2006/04/11(火) 13:40:40ID:???mb_convert_encodingをかければちゃんと出るみたいなのですが、
全ての箇所にかけるのは手間がかかりますし文字コードの設定で直るならそっちがベターかなと
0340nobodyさん
2006/04/11(火) 22:19:23ID:2AXtnnt+出力の方は忘れた。
0341nobodyさん
2006/04/11(火) 22:20:41ID:2AXtnnt+0343nobodyさん
2006/04/12(水) 10:30:37ID:p8Vzvn2B0344nobodyさん
2006/04/12(水) 18:50:59ID:???原因がわかるでしょうか?
とりあえず、phpinfoではpngは使えるけどjpegは使えないです
0346nobodyさん
2006/04/12(水) 18:57:51ID:6+o4oJzb0347nobodyさん
2006/04/12(水) 19:06:20ID:???--with-gdでjpegも全部使えるはずだけどね。
jpeg-6bとかgdの再インストールとか試してみたら?
0348nobodyさん
2006/04/12(水) 19:10:08ID:6+o4oJzbgd library install
http://www.hizlab.net/app/install/gd.html
とかみながら再インストール試したりしてるんですがダメなんです…
一度消さないとダメですかねぇ。あんまり環境変えたくないんで
なるべく被害すくないのがいいんですけど。
--with-gd
はつけてます…ダメな場合とこかにエラーでたりとかしますでしょうか?
0349344
2006/04/12(水) 19:13:36ID:6+o4oJzbzlib-1.1.4-8
libjpeg-6b-26
がRPMで入ってるます
0351nobodyさん
2006/04/12(水) 19:56:23ID:???http://www.php.net/image
ここに
> jpeg-6b To enable support for jpeg-6b add --with-jpeg-dir=DIR.
って書いてあるけど、この--with-jpeg-dir=DIRってやついれてphpのconfigureからしなおしてみたらどうだろう?
(元のconfigureオプションはphpinfoに出てるから、その通りやればたぶん環境が変になったりはしないでしょう)
それでも解決しないなら俺にはちょっとわからんかも。
つーかjpegが使えないってことはfunction_exists('imagejpeg')とかがfalseになるの?
phpinfoはJPG Supportの欄がなかったりdisabledになってたりするの?
0352344
2006/04/12(水) 19:58:06ID:6+o4oJzb>phpinfoはJPG Supportの欄がなかったり
の状態です。欄がないっす
>>351さんの方法を試してみます
0353nobodyさん
2006/04/12(水) 20:40:44ID:???たとえば、$_SERVERを書き込もうとして
fputs( $fp, $_SERVER);
のようなことをしたら、最初の一行しか書き込まれませんでした
0356nobodyさん
2006/04/12(水) 21:54:51ID:???apache 2.0.52を使用しています。
phpはutf8で記述しています。
HTMLのフォーム(euc-jp)からフィールドに""の文字をポストして、
echo mb_detect_encoding($_POST['field']);
とすると、EUC-JP と表示されます。
echo mb_convert_encoding($_POST['field'], "UTF-8", "EUC-JP");
とすると ASCII と表示されます。
echo mb_convert_encoding($_POST['field'], "UTF-8", "SJIS");
としたら UTF-8 と表示されましたが、
echo $_POST['field'];
したところ "鐔?"こんな風に表示されました。
どうしたら 汲ェ表示できるのでしょうか。
ちなみにmb_language( 'Japanese' );を設定しています。
0358nobodyさん
2006/04/12(水) 22:09:44ID:???0359nobodyさん
2006/04/12(水) 23:17:40ID:???次のようなテーブルがあり、ブラウザで内容を表示して
該当レコードを削除する処理を行っているのですが、
何故か一致しないレコードまで消えてしまいます。
仕様上、HTML・PHP・DB(PostgreSQL)の文字コードは変更できないため、
Unicodeでクエリを送信することができません。
(HTMLはSJIS、PHPはEUC、DBはUTF-8)
何かいい方法がありましたら、教えて下さい。
/ table / / ブラウザ /
+---+----+ +--------------------+
| old | new | | |
+---+----+ | old | new | del |
| あ | い | |----+----+-----|
| 龍 | 竜 | | あ | い | del|
| 國 | 国 | | 龍 | 竜 | del|
| 齊 | 斉 | | 國 | 国 | del|
| 邊 | 辺 | | 齊 | 斉 | del|
+---+----+ | 邊 | 辺 | del|
+------+---+---------+
※delに張っているリンク
<a href="javascript:del_rec('あ','い')">del</a>
<a href="javascript:del_rec('龍','竜')">del</a>
0360nobodyさん
2006/04/12(水) 23:18:24ID:Rd5VnMi6function del_rec(old_value,new_value){
var frm=document.forms[0];
if(!confirm("このレコードを削除します。")){ return }
frm.ov.value=old_value; // ┐
frm.nv.value=new_value; // ┴hidden要素に格納
frm.action="del.php"; // レコードを削除するPHP
frm.submit();
}
※PHPでの削除部分(若干省略)
$item=cnv_enc_arr($_POST,ENC_EUC,ENC_SJIS); // $_POSTをSJISからEUCにエンコード
$item=sp_char_arr($item,ENT_QUOTES,ENC_EUC); // $itemのHTMLエンティティ文字を変
換
$old_v=$item['old_value'];$new_v=$item['new_value'];
$sql="DELETE FROM table WHERE old=:old and new=:new";
$stmt=$db->prepare($sql);
$stmt->bindParam(":old",$old_v);
$stmt->bindParam(":new",$new_v);
$stmt->execute();
/ 実行結果 /
「old=あ , new=い」のレコードをdelしたところ、
「old=龍 , new=竜」のレコード以外が削除される
表がズレた & ID忘れてましたorz
0361356
2006/04/12(水) 23:23:08ID:???mb_convert_encoding( "" , "JIS", "UTF-8");
メールで梶A汲ネどを送信する場合はどうするのでしょうか。
0362344
2006/04/12(水) 23:32:27ID:6+o4oJzb別鯖で設定してみたらあっさりできたのに、入れたい鯖だけはいってくれないー
JPEGサポートだけだめってどういうことなんだー
0365361
2006/04/13(木) 00:10:49ID:???メールってjisいがいでおくれるの?
0366344
2006/04/13(木) 00:33:25ID:KnVEm6m2configure:34024: checking for the location of libjpeg
の跡にnot found がでてなければみつかってるはずですよね・・・
あとは何をチェックすればいいんでしょうか・・・
0367nobodyさん
2006/04/13(木) 00:42:32ID:???送れなくはないが、ちゃんと表示できるかは相手次第。
というか、それを言い出したら汲ニかの機種依存文字自体、送っちゃダメ。
0368344
2006/04/13(木) 01:44:41ID:KnVEm6m2ご存知のかたいませんか?
GDを別にセットアップしても
2.0.28のままで新しくいれたはずの2.0.33にかわらないので・・・
0370nobodyさん
2006/04/13(木) 03:49:08ID:???とやると、demo.phpは正しく読み込まれるのですが
<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] . "/img/powered-by.png" ; ?>" title="powered-by.png" alt="powered-by.png" >
だと、ソースを見ると正しく
<img src="/www/img/powered-by.png" title="powered-by.png" alt="powered-by.png" >
に正しく変換されているのですが、絵が出ません
これは何が悪いのでしょうか?
PHPは正しく動いているのでPHPの問題じゃないと思うのですが
ほかにどこで聞けばいいのかわからないのでここで質問させてもらいます
すいませんがわかる方いればよろしくお願いいたします
0371nobodyさん
2006/04/13(木) 03:59:35ID:???$_SERVER['DOCUMENT_ROOT'] はサーバ上のディスク上のパス
/www なんだろうけど
imgタグに指定するパスはHTTP上のパス例えば
src="http://〜/img/hoge.jpg"
またはドキュメントルートに/imgがあるなら単に
src="/img/hoge.jpg"
でよろし
0372nobodyさん
2006/04/13(木) 04:11:09ID:???ありがとうございます・・。
単に src=/img/powered-by.png で、できました。
これに4時間近く悩んでました・・・。 orz
なんで、requireする時はフルパスで・・・
うぅーーむ、わからん。y
0373344
2006/04/13(木) 05:13:08ID:KnVEm6m22.0.28ってのはrh9に最初から入ってたみたいでどこにあるか
よくわからないままに、落としてきた33をコンパイルしていれたので
同じところなのかどうかわからないっす
0374nobodyさん
2006/04/13(木) 05:26:46ID:???ブラウザというか外から見るときはApacheのドキュメントルートが一番上になるわけ。
だから /wwwの下がブラウザから見るとルートになる。
ブラウザで/varとかして外から見られちゃまずいでしょ。
requireだって相対パスで見れる。例えば/www/demo.phpで読みたいスクリプトも同じとこならなら
require "./demo.php"でOK。ドキュメントルートからの絶対パスで指定すると他のサーバに持っていって
パスが変わると面倒、と言う理由で相対パスを使うことが多いけど。
0375nobodyさん
2006/04/13(木) 07:45:44ID:???php付属のやつだろ
php***/ext/gd/libgd
libgd.soを使うなら
./configure --with-gd=/usr
0376nobodyさん
2006/04/13(木) 08:13:44ID:???識者のご意見をお聞かせ下さい。
1.$FOO
2.$_FOO
3.$_foo
0377nobodyさん
2006/04/13(木) 08:51:12ID:???自分が(他に開発者居るならその人達と相談の上で)分かりやすいのを選べばいい。
俺は1だな。
>>359
テーブルの設計がおかしい。
ID
0378377
2006/04/13(木) 09:00:18ID:???>>376
自分が(他に開発者居るならその人達と相談の上で)分かりやすいのを選べばいい。
俺は1だな。
>>359
テーブルの設計がおかしい。
IDをふってそのIDを指定して削除処理を行うべき。
挙動の理由については↓でも見て。
http://www.kanzaki.com/docs/jcode.html
PHPの話しではないが↓とかも参考になるかと。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
>>353
fputs($fp, implode("\n", $_SERVER));
要するに$_SERVERの中身を改行で繋いで1行にしてからfputs()って事。
>>354,355
どこがエスパーなのやら。。
0379nobodyさん
2006/04/13(木) 10:00:07ID:???>>353
>たとえば、$_SERVERを書き込もうとして
>fputs( $fp, $_SERVER);
>のようなことをしたら、最初の一行しか書き込まれませんでした
本当に($_SERVER以外も含めた何かの)最初の1行なのか?
試してないが、全く無関係に「Array」だと思うんだが・・・
0380nobodyさん
2006/04/13(木) 12:47:19ID:y+t9041BROOT
├LIBLARY
│├ARRAY
││├_array.php
││└arrayFunction.php
││
│└error_code.php
│
└WEB
├ABOUT
│└about.php
│
└index.php
------------------
●_array.php
include_once '../error_code.php'; //★
include_once 'arrayFunction.php';
●about.php
include_once '../../LIBLARY/_array.php';
●index.php
include_once '../LIBLARY/_array.php';
------------------
ファイルの配置と中身なのですが、★の部分でエラーが出ます。
理由は分かっており、includeしたファイルで更にincludeした場合、
カレントディレクトリ→一回目のincludeファイルのディレクトリ
という順でファイルを探すため、error_code.phpが見つからないからです。
それを承知の上での質問なのですが、
上記と同じ処理をできるだけ簡単に実現するには
どうすればいいでしょうか?
今の環境はWindowsXP、PHP4です。
0381nobodyさん
2006/04/13(木) 13:00:02ID:???・絶対パスを使う。(よくある方法は「ROOT」にあたる絶対パスを共通のconfigファイル的な部分でdefineしておく)
・php.iniのinclude_pathを利用する。
・どうしても相対的じゃなきゃ嫌な場合はdirname(__FILE__) . '/../error_code.php'のように指定する。
0382nobodyさん
2006/04/13(木) 13:01:48ID:???俺だったらconfigファイル作ってパスを定数で宣言しておく。
config.php------------------------
define("DOCUMENT_ROOT", "ROOTのパス");
---------------------------------
about.php-------------------------
include_once("../../CONFIG/config.php");
include_once(DOCUMENT_ROOT."'LIBLARY/_array.php');
---------------------------------
index.php-------------------------
include_once("../CONFIG/config.php");
include_once(DOCUMENT_ROOT."LIBLARY/_array.php");
---------------------------------
_array.php-------------------------
include_once(DOCUMENT_ROOT."LIBLARY/error_code.php");
include_once(DOCUMENT_ROOT."LIBLARY/ARRAY/arrayFunction.php");
---------------------------------
0383380
2006/04/13(木) 13:32:36ID:???>>382
絶対パスで実装するのが単純でよさそうですが、
相対パスで実装したいので「dirname(__FILE__)」について調べてみます。
ありがとうございました。
0384380
2006/04/13(木) 14:00:31ID:???「dirname(__FILE__)」でカレントディレクトリ名が取得できました。
応用して「dirname(dirname(__FILE__))」で親ディレクトリ名を取得し、
error_code.phpをincldeすることで解決しました。
>>381さんの「dirname(__FILE__) . '/../error_code.php'」では
途中の../の部分でエラーが出たので…。
0385nobodyさん
2006/04/13(木) 14:18:20ID:???0386nobodyさん
2006/04/13(木) 14:38:32ID:???0388nobodyさん
2006/04/13(木) 14:40:32ID:???ヒアドキュメント内で定数は使用できなかったと思う
どうしても定数を使用したいなら、いちど変数に入れなおすか
ヒアドキュメントを辞めて必要な部分だけ
?>
<html>
<?php
echo 定数;
?>
</html>
<?php
って感じでやる方が…
0389nobodyさん
2006/04/13(木) 15:32:41ID:???あと、Perl や Ruby みたいに
文字列のクォートも指定できるようにしてほしい。
print qq|<a href="$link">{$array['index']}</a>|;
みたいに。
0391nobodyさん
2006/04/13(木) 18:14:36ID:???ここはPHPを使っているらしいのですが、
どうやって、ないところはnoneにしてるんですか?
0392nobodyさん
2006/04/13(木) 19:04:59ID:KnVEm6m2phpinfoででてくるバージョンが
かわらないままなんですが、どこのgdを入れ替えたら
いいんでしょうか?
libgd.so
のバージョンに依存する?
0393nobodyさん
2006/04/13(木) 19:36:38ID:PiezBhsDなかなか上手くいきません。良い方法があればご教授いただけませんでしょうか。
宜しくお願いします
0395nobodyさん
2006/04/13(木) 19:55:52ID:PiezBhsDご親切にありがとうございます。調べてやってみます♪
0396392
2006/04/13(木) 21:27:38ID:IrbHDKpJ0397359
2006/04/13(木) 22:25:17ID:???ですよね('A`)
IDがあれば削除しやすいんですが・・・
ひとまず、WHERE句の条件を = から Like に変更したら正常に動きました・・・・・('A`)
なんなんだよいったい・・・・・・・
0398nobodyさん
2006/04/13(木) 23:36:07ID:???PHPは自分がコンパイル時に指定されたディレクトリ上のライブラリファイルを読み込むから、
同じディレクトリで上ライブラリを書きするか、別のディレクトリを指定してPHPを再コンパイルするか
どっちかしないとそのライブラリは認識できないよ。
0400nobodyさん
2006/04/14(金) 01:02:21ID:lStBexrZ$keyword ="$_POST[keyword]";
$count=count($fi);
$fi = file("search.txt");
for($i=0;$i<$count;$i++){
$kekka="$fi[$i]";
if($keyword=="$kekka"){ print"$kekka"; }
}
search.txtには
テレビ
パソコン
と入っているとします。form.htmlで「テレビ」と入力した時、検索結果に「テレビ」と
表示して欲しいのですが、何も表示されません。search.txt内が1行の時は表示されます。
search.txtが複数行の場合、どうしたらいいのでしょうか?
0402nobodyさん
2006/04/14(金) 01:08:52ID:???さらに詳しく説明すると、
マニュアルにも書いてあるが、file()は改行文字も各配列要素に取り込まれる事になる。
なので、
if(テレビ == テレビ(+改行文字)) となり、一致しない。
0403400
2006/04/14(金) 01:22:47ID:???私も改行コードについて気になっていました。
しかし、どうやって改行コード(\n)を取り除いて出力するのかわかりません・・。
0405nobodyさん
2006/04/14(金) 02:56:28ID:???$fi = file("search.txt");
$count=count($fi);
だろ。
0406344,392
2006/04/14(金) 04:16:40ID:xKvM6FxT再コンパイルするときって前コンパイルに使ったところでもう一回
./configure
からやっても無駄なのね。
ダウンロードして、解凍しなおしたものでやりなおしたらできますた。
回答してくださった方、ありがとうございました。<m(_)m>
0407nobodyさん
2006/04/14(金) 09:58:42ID:nvaHi/Q00408nobodyさん
2006/04/14(金) 10:02:18ID:???大文字、小文字関係なく、なら見つけたのですが。
あまりにも全角英数字入力する人が多くて。
一旦変数を半角に変換して、ということも考えましたが、
その他の文字列も含むので行えませんでした。
全てが全角ならまだしも一部だけ半角とかで検索する人がいるんで
やっかいです
0409nobodyさん
2006/04/14(金) 10:14:48ID:???それは単なる写し間違いだと思ってたから気にもしてなかった。
だって、本物がそれだったら中身1行でも全く出力されてないはずじゃん。
0411nobodyさん
2006/04/14(金) 10:32:20ID:???$_SERVERの中身を出力してるだけだけど、それの何が分からないのかが分からない。
>>397
お節介だとは思うけど、やはりテーブルの設計(というかDBの設定)からやり直した方がいいよ。急がば回れっていうでしょ。
Likeにしたら正常に動いたってのは偶然の話し。ヒントはUTF-8。
UTF-8とは何なのか理解できてるのかな?
http://e-words.jp/w/UTF-8.html (UTF-8の簡単な説明)
そもそもあえてDBをUTF-8にしてる理由は何なのかが俺には疑問です。きっと理由はあるのでしょうが。
>>400
$fi = array_map('trim', file('search.txt'));
if (in_array($keyword, $fi)) { echo($keyword); }
全く同じ挙動でいいなら2行で書ける。
PHPって何でも関数が用意されてるので、関数リファレンス本を一冊買ってざっと読んでみるといいよ。(trim系の関数も知らないみたいなので)
>>408
>>410に賛成。半角に変換する方法が分からないならmb_convert_kana()を参照。
PHPって本当に楽ちん。
0412nobodyさん
2006/04/14(金) 10:59:38ID:???別にDBは扱いが容易な文字コードであれば何だっていいと思うんだが
(そのPHPプログラムからしか使わないとは限らないんだしな)
それより気になるのは
>>359
> 仕様上、HTML・PHP・DB(PostgreSQL)の文字コードは変更できないため、
> Unicodeでクエリを送信することができません。
> (HTMLはSJIS、PHPはEUC、DBはUTF-8)
なんでUTF-8でクエリを発行できないのかということだよ。
普通にPOSTデータをUTF-8に変換してクエリを組み立てれば済む話じゃん。
ソースコードがEUCだからってデータがEUCしか扱えないわけじゃあるまいし。
0413nobodyさん
2006/04/14(金) 11:06:25ID:???またこの形式の文字を他の文字に変換したいのですがどうすればいいですか?
よろしくお願いします。
0415nobodyさん
2006/04/14(金) 11:14:57ID:???> なんていうんですか?
「数値文字参照」
> この形式の文字を他の文字に変換したい
preg_replace辺りで好きに変換すれば?
0416413
2006/04/14(金) 11:21:53ID:???ご回答ありがとうございます。
そういう変換関数はないということですか?
0417nobodyさん
2006/04/14(金) 11:23:40ID:???preg_replaceはそういう変換関数だと思うが?
0418413
2006/04/14(金) 11:28:51ID:???欲しい関数は
"シ" → "シ"
というような関数です。
■ このスレッドは過去ログ倉庫に格納されています