【PHP】下らねぇ質問はここに書き込みやがれpart14
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは
>>970 あたりが建てて下さい
過去スレは
>>2
1乙
できるかと言えばできる。 でも多分お前には無理。
>>5 PHPだけでできない事は無いが、かなり難しい。
PHPでブラウザ(htmlを解析・レンダリグ)を作成するような物だと思ってくれ。
実際にはそんな事はやってられないので、既存のブラウザが画面に描画したものを
キャプチャするという仕組みが使われる事が多い。
そのwebscanってのもそうじゃないかな?
キャプチャの方法は OS・ブラウザのapiに依存するのでPHPのスレの範疇じゃないな。
適切な板やスレで聞くとよい。
Warning: Invalid argument supplied for foreach() in /home1/○○○.ne.jp/WWW/sendmail.php on line 132 Fatal error: Call to undefined function: mb_convert_encoding() in /home1/○○○.ne.jp/WWW/sendmail.php on line 141 本スレ529でご質問したところくだらないってっ却下されましたので こちらでお尋ねいたします・・・ このメッセージが出てきます。テストサイトではちゃんと実行できるの ですが。はじめてのphp初心者です。
>>9 訳すとこんな感じか。つーかなんで俺が訳さにゃならんのだっ!ビタン(AA略
警告 : foreachに渡された引数が正しくない 132行目
致命的エラー : 定義されていないmb_convert_encoding()という関数が呼び出されている
上は、foreachに渡した引数がおかしいと言われているので、その引数を確認してみればよい。
下は、mb_*系の関数は拡張モジュール(標準ではない)なので、
その鯖の管理者さんが不要だと思った場合はインストールされない。
mb_*の一部の関数は、jcode.phpというphpのみで書かれたライブラリを
配布してくれている人がいるのでそれを使うのも一つの手かと。
エラーメッセージでググれ
>>9 foreachの直前に回したい変数をvar_dumpしてみれ
もうこれテンプレに入れといた方がいいんじゃね?
※サーバで利用可能なモジュール及び関数リストの取得方法
<?php
foreach (get_loaded_extensions() as $module)
{
echo "<b>[". $module ."]</b><br>";
foreach (get_extension_funcs($module) as $func)
{
echo $func ."<br>";
}
}
?>
[standard]以下はPHPの標準関数。それ以外はオプションな。
このリストに欲しい関数がない場合はサーバ管理者にいってオプションを
組み込んでもらわないといけない訳。分かった?
>>9
>>13 テンプレに入れたって、ここで質問する人でそれ使って
ちゃんと確認できる人はいないでしょ。意味ねぇ。
なんでエラーが出てるのにそのまま質問するのか理解できん
>>9 sendmail.phpの132行目にあるforeachの変数が配列じゃないらしい。
プログラムの設定か何かをミスってる可能性あり。
あと、使ってるサーバーではmb_convert_encoding()がインストールされてないので
管理者に頼んで入れてもらわない限り動作しない。
>>15 同じPHPスクリプトがサーバーによって挙動が変わるというのが
理解できないからでしょ。
丸投げすれば誰かが解決してくれるだろうという発想なんだろうけど こいつ自身が最大のバグだな
>>13 本スレのテンプレになら意味あるんじゃね?提案してみれば?
PHPのフリーなコンパイラーは存在しないのでしょうか? 有料ばっかりで・・・
そのコンパイラーとやらは何ができるの?
22 :
nobodyさん :2005/12/18(日) 13:19:24 ID:lBRzm0WN
>>21 配布ソースのコード隠蔽じゃないの?
他にPHPコンパイラやPerlコンパイラの用途って無いと俺は思ってたけど。
peclにbcompilerがあるよβだけど つかフリーソフトでコード隠蔽する必然性がないんだからさあ クローズドで儲けたい人はそういう人同士だけでやればいいじゃん
コンパイルしたほうが実行速度早くなるとかないの?
大して変わらないか、むしろ遅くなりそうな… 速くするためならオプティマイザかコードキャッシュでしょう。
inst('A');を使いまわそうとするとループ?に入るのかエラーで処理が中断してしまいいます。 class内でも使えるようにするにはどうしたら良いのでしょうか?。 $this使えというのは無しでお願いします(^^;。 function inst($n){ static $inst; if (!isset($inst[$n])) $inst[$n] =& new $n; return $inst[$n]; } inst('A'); inst('A'); // 既にインスタンスがあるのでA::A()は実行されない class A{ function A(){ inst('A'); // ← A::A()を実行してループに入ってる?? echo 1; } }
('A`)マンドクセ
ひょっとして前スレのグローバルなインスタンスの人か?なんだこりゃ。
>>28 そもそも意図が分からない。
なんでクラスAの中でさらにクラスAを生成する必要があんの?これ。
ループというのは正確じゃなく、クラスAの中で生成するクラスAがさらにクラスAを必要とするから
無限に子供のクラスAを作り続けようとする感じだろ。
(同じトコの実行を繰り返すわけじゃないからループとはちょっと違う)
とりあえずすぐ思いつくのはこんなとこ。
function inst($n){
static $inst;
if (!isset($inst[$n])) { $inst[$n] = 1; $inst[$n] =& new $n; }
return $inst[$n];
}
33 :
31 :2005/12/18(日) 14:31:21 ID:???
あ、駄目か。これじゃクラスAが生成されない。 というか、全てのクラスAが子供のクラスAを必要とするんだから、 原理的にこれは無限実行にならなきゃいけない設計なんだな。 この階層構造を見直さない限り、ロジックを見直そうと思っても無駄だわ。
34 :
nobodyさん :2005/12/18(日) 14:41:52 ID:jwrRezTg
$_SERVER["PATH_INFO"]
やはり孫classが一杯出来てしまうのですね。
最初は1つのclass内で全てを作っていたのですが、だんだん大きくなって来たので
分割しようと考えた次第です。その際にスマートに書き直したかったのであれこれと
変更を加えていたら嵌ってしまいました(^^;。
階層構造を見直さないとだめですよね。お騒がせしました。
>>30 同じ人です(^^;。
>>31 私も試してみましたがclassAの中では空になりますね。
>>34 ttp://***/example.php/1/?a=1 って事かな?
それかRewriteEngineを調べると良いかも
よっぽどグローバス変数の方が美しいコードに見える
そういえば$GLOBALS変数は使った事無いなぁ みなさんは$GLOBALSを使って書いてるのですか?
俺は$GLOBALS使ってるな。 稀にglobal宣言も使うけど、極めて例外的。
質問です。 $file = preg_replace ('<!--([^-]*)-->(.*?)<!--([^-]*)-->', '', $file); print \1; とすると Unexpected character in input: '\' (ASCII=92) state=1 とでちゃうのですが、Perlの print $1; のようにマッチした文字を取り出すにはどうすればいいのでしょうか?
マニュアル読んだ?
2005年度くだ質大賞ベストテンに入る 間違いない
>>41 preg_replaceの中でしか使えない。
eオプション
phpMyAdmin のコード見ると $GLOBALS 使いまくってるが あまりスマートではないな
49 :
41 :2005/12/18(日) 21:07:18 ID:???
なんか遊ばれてるみたいなので、 PerlではできるけどPHPではできないってことにしておきます。
Fatal error: Cannot redeclare vlogiew() (previously declared ... というエラーが出て回避する方法がわからないのですが何方かご存知ありませんか?。 vlogiew()をlogprint()としてもダメでした。
>>51 自己レスーー;
vlogiew()を複数回読み込んでた
>>49 前スレの最後の辺りで同じような話が出てたよ
>>50 仕組み
1.IEのエンジンを使ってブラウザの表示を画像に落とすツールをWindowsアプリで作ります
2.それをWeb上のPHPから呼び出します
3.完了
>>49 とりあえず一言。
せめてマニュアルくらいは読もうな!な!
>>54 Javaの製品もある。
でもまあ世の中にはWindowsのIEでしか
レイアウトが再現できないサイトも沢山あるからねぇ。
57 :
56 :2005/12/19(月) 00:17:06 ID:???
あとASPで提供してるキャプチャサービスもある。 昔はデモで指定したサイトのサムネール生成が出来て、 それをゴニョゴニョして利用出来たんだけど…
あんま関係ないけど前スレ970はsscanfのほうが適してると思う
>>57 ASPで提供してるのはフロントエンドの部分だけじゃないの?
結局、中身はWinIEかJavaか〜って感じかとオモウが
mojavi2でサイトを作っていて、ユーザ登録処理を作りたいです。 emailとパスワードを入力させて、送信するとユーザにメールが送られて、URLを クリックするとユーザ登録されるというよくあるものを作りたいのですが、よくあるコード だと思います。 そういうコードどこかにありませんか? PEARとZendで探しましたが、見つかりませんでした。 XOOPSのは、再利用しづらいです。 探し方だけでもよいので、よろしくお願いします。
>>58 その辺は好みかな。
元C言語プログラマとしてはsscanfの挙動は信用したくない…。
(入力内容がイレギュラーだった場合に変な挙動をすることがあるので)
速度を優先するならsubstrを、同時にフォーマットチェックも兼ねるなら
preg_replaceを、俺なら選択するな。
結局
>>49 の回答を導けない住人
SUGEEEEEEE!!111
>>62 はぁ?
とっくに答えは出ている。
49は理解する気も無いようだが。
そのまんまコピペで動くコードを書かなきゃいかんのかね?
型にはめないと使えないPHPってある意味すごいな。
>>65 自分の事しか考えていない65も負けてないよ
test
guest guest
オススメのエディタ、IDEはないですか?
71 :
nobodyさん :2005/12/19(月) 12:39:54 ID:l+7IklxT
PHP4.3.11です。XML_RSSもXML_Treeもインストールして、 /usr/local/lib/php/XML以下にそれらが入っている事も確認しましたが Warning: main(XML/Parser.php): failed to open stream: No such file or directory in /usr/local/lib/php/XML/RSS.php on line 23 Fatal error: main(): Failed opening required 'XML/Parser.php' (include_path='.:/usr/local/lib/php') in /usr/local/lib/php/XML/RSS.php on line 23 の様なエラーが発生してスクリプトが動きません。 原因分かる方居ますか?
原因は書かれている通りだと思うが・・・ なんか変に曲解しなければならん状況なの?
>>71 原因と言われても「/usr/local/lib/php/XML/RSS.php」がないってエラーだしねー。
>>71 XML_Parserが入って無いんジャマイカ?
75 :
nobodyさん :2005/12/19(月) 13:24:38 ID:pcyIPGNx
メールの送信について質問なのですが、
$header = "Content-Type: text/plain; charset=iso-2022-jp\nFrom:送信者\<
[email protected] \>";
mb_language("Japanese");
if(mb_send_mail($mail,$subject,$message,$header)){
var_dump($header);
}
でのvar_dumpの結果で、Content-Type: text/plain; charset=iso-2022-jp From:送信者\
というふうに、<
[email protected] \>の部分が消えてしまい正しく送信されません。
どこを修正すればよいのでしょうか。
とりあえず突っ込みどころが多すぎる点は置いておいて・・・ ブラウザで「<〜>」がタグとして解釈されて表示上消えているだけ という単純な問題である悪寒
77 :
nobodyさん :2005/12/19(月) 13:44:14 ID:iBVZGmYt
localhostから hoge.comにあるDB接続用のfunctionで hoge.com内にあるDBにアクセスし 結果だけをreturnでlocalhostに返したかったので hoge.comのfunctionをlocalhostのPHPでinclude_onceしました その後でDB接続用のfunctionを実行したところ Call to undefined functionといわれてしまいました (DB接続用のfunctionには問題はありませんでした) 以上のことからfunctionはlocal内に無いと動かないという事でしょうか? もしくはPHPiniなどに設定が必要なのでしょうか??
78 :
nobodyさん :2005/12/19(月) 13:46:22 ID:iBVZGmYt
訂正 誤 hoge.comのfunctionをlocalhostのPHPでinclude_onceしました 正 hoge.comのfunctionが書かれたPHPファイルをlocalhostのPHPでinclude_onceしました
>>77 localのどこにあるファイルをincludeしようとしてるんだ?
それ次第だろ。ちゃんと、エラー表示するようにしてみたら?
hoge.comにあるスクリプトをincludeしようとしているんじゃないか?
>>77 hoge.comがphpをパースしていたら、渡されるのは当然実行結果だけなので
hoge.comにある関数は実行できません。
たとえphpをパースしなくても(スクリプトそのままを渡してくるなら)
localhost内で実行されるので意に沿う結果にはならないと思われ。
どっちにしてもhoge.com内のスクリプトにある関数をlocalhostで実行するのは
無理があると思うけど。
include_once('外部URL'); つーことなら、次のような動作になる。 1. include_onceで外部URLのファイルを取得しにいく (URL fopen wrapper) 2. hoge.comのweb鯖が処理をする。 拡張子phpならhoge.comのPHPが処理して、実行後の結果(出力)をテキストとして返す。 実行結果をファイルにして、それをlocalhostでincludeした時と同じ様に考えるとよい。 ・phpファイルの内容がfunctionだったら関数定義だけなので、何も返さない。 ・実行の結果が<?php 〜 ?> ってな内容(文字列)だったら、 そのような内容のファイルをlocalhostでncludeした事と同じになる。(localhostのPHPが処理する) 3. 残りの処理を続行。
82 :
75 :2005/12/19(月) 14:28:53 ID:pcyIPGNx
>>76 その通りでした・・・。ありがとうございます。
なんとか送信まではできたのですが文字化けしてしまいます。
mb_language()
mb_send_mail($mail,$subject,$message,$header)
mb_language()
mb_send_mail($mail,mb_encode_mimeheader($subject,"ISO-2022-JP"),mb_encode_mimeheader($message,"ISO-2022-JP"),$header)
mb_language()
mb_send_mail($mail,mb_convert_encoding($subject,"SJIS"),mb_convert_encoding($message,"SJIS"),$header)
どれも文字化けしてしまいました。
マニュアル見ると1番最初のでいいような気がするのですが、よくわかりません。
どこが問題なのでしょうか。
84 :
nobodyさん :2005/12/19(月) 14:39:46 ID:iBVZGmYt
>>79 hoge.comにあるファイルをincludeしました
>>80-81 やはり無理があるようですね…
別の方法を模索したいと思います
ありがとうございました
>>84 よくわからんが、そのlocalじゃないほう(hoge.comは存在するので)にある、
関数とかのファイルってローカルにもってこれないのか?
86 :
nobodyさん :2005/12/19(月) 14:46:21 ID:vPAKLJvF
<?php
$site='
http://yahoo.co.jp/ ';
?>
<form method="post" name="test" action="<? echo $_SERVER[PHP_SELF]; ?>" >
<textarea name="text" cols=20 rows=20>
<?php
$page = file($site);
if($page=="") die("Connection Failed");
while (list($num, $line) = each($page)){
$line=htmlspecialchars($line);
echo "$line";
}
?>
</textarea>
この状態でテキストエリアにヤフーのソースが入力されるのですが
実際に表示したいサイトが私のIPからしか接続出来ない状態です。
※PHPをUPしているサーバは別なところにあります。
ですので$siteに本来接続したいURLを入れても弾かれてしまいます。
javascriptなども覗いてみたのですが解決策が見当たりません。
PHPでなんとかなりませんでしょうか?
>>86 理由があってIPアドレス制限をしてるのだから、それを回避できるようなものじゃまずいかと。
まぁそれは置いておいて、自宅鯖を建てるくらしか手は無いんじゃないかねぇ。
>>87 それがDBのあるところになきゃいけない理由がわからんのだが……
90 :
71 :2005/12/19(月) 15:00:43 ID:???
>>74 RSSとTreeの他にもParserが居るんですね!
どうもです!
>>86 >私のIPからしか接続出来ない状態
私の所にproxyを置く
>>89 localhostからの接続しか許可していないDBを他のサーバから使いたいのかもね。
DBと同じサーバのphpをincludeしたら使えるかもしれないと思ったんじゃないの
そんなことが出来たらセキュリティもクソもあったもんじゃないが。
94 :
nobodyさん :2005/12/19(月) 15:37:17 ID:iBVZGmYt
>>92-93 ご心配をお掛けしましたができるようになりました
ありがとうございます
結果としてincludeした時点でlocalファイルとして扱われており
動かなかったようです
なので、hoge.comにGETで渡して結果をechoで吐き出させ
それをfileでarrayにして満足な答えを得ることが出来ました
どうもお騒がせしました
>>94 別に心配なんざしちゃいないが、
もっと日本語も勉強した方がいいぞ。
で、あんたはhoge.comの持ち主なの?
>>95 hoge.com(仮名)のサーバーは持ち主です
(hoge.comのドメイン名は仮名なので持ち主ではありません)
>>96 だから、hoge.comは実在するドメインだから、使うなっていってんだよ。
example.comってのを使うの、そういうときは。
>>97 しらなかったとは言え、申し分けありませんでした
以後はexample.comを使用します
99 :
82 :2005/12/19(月) 15:57:35 ID:pcyIPGNx
>>83 大変参考になりました。
なんとか文字化けせずに送信する事ができました。
>質問するときはバージョン書きましょう。
以後気を付けます。
ありがとうございました。
>>97 example.comも実在するドメインなわけだが・・・
fooとかhogeっていえばそれが例えだっていうのは
ほとんど誰もがわかると思うが?
>>100 実在しないわけではないな、確かに。
例えとして使う場合には、example.comやexapm;e.netを使いましょうと
規定されているといえばいいのかな。
PHPからMySQLのINTデータに+1ずつ更新していきたいのですが、 SQL文の中で演算させることは可能でしょうか? たとえば、こんな感じで ”UPDATE table_name SET hoge= +1 WHERE id=100;” hogeを+1ずつさせていきたいと思ってます。 宜しくお願いします。
mysqlって hoge=hoge+1 ってできなかったっけ?ってDB板向けの話の気が。。
>>105 ありがとうございます。
それでいけましたm(_ _)mペコリ
[ a ] が文字列の先頭の場合だけTRUEにしたいのですが、 以下でやると両方でTRUEになってしまいます。 何がいけないのでしょうか? $str_1 = "abc"; $str_2 = "def"; if(strpos("$str_1",a) == 0){ print "TRUE"; } if(strpos("$str_2",a) == 0){ print "TRUE"; }
0と(aが見つからないときの)falseの区別がつかないから。 多分、==を===にするとうまくいく。 あと文字列なんだから'a'と書こうよ
111 :
50 :2005/12/19(月) 19:54:06 ID:???
112 :
7 :2005/12/19(月) 20:13:35 ID:???
ウリの説明は全然分からなかったニダカ?
113 :
50 :2005/12/19(月) 20:54:49 ID:???
>>112 >>7 すみません ぬけてしまった・・・orz
ありがとうございます。
とあるオープンソースのコードを見ていたら $fuga = $hoge{0}; という記述を 初めて見たのですが{0}は、どういう意味ですか? ただの間違いではないですよね?
ん?それってPHPの話なの?
スクリプト言語でオープンソースと断りを入れるのには恐れ入りました。
文字列への文字単位のアクセス 波括弧の後に任意の文字をゼロから始まるオフセットで指定することにより、 文字列内の文字にアクセスすることが可能です。 注意: 過去の互換性のため、配列括弧を使用することが可能です。 しかし、 この構文はPHP 4に依存しています。 つーことらしい。
>>117 文の意味がわからないですが、サンスコ
>>116 暗号化とかエンコードできなかったっけ?
ちなみに、moodle/lib/html2text.phpの38行目あたり
$len = strlen($badStr); // Moodle
$chr = $badStr{0}; // Moodle
$goodStr = ''; // Moodle
で、Notice吐くんですよね
Uninitialized string offset: 0 in fileって。
先に $badStr =''; しておけば大丈夫ですか?
$a = 'abc'; $b = $a{0}; // $b = 'a' = $a[0]
>>116 オープンソースのオープンは
公開とか公知の意味合い。
>>120 ソースコードを可読できるって意味では?
質問です。 みなさん、コード書いてて煮詰まってしまったらどんなことをしますか?
寝る、お茶を飲む、トイレに篭る、風呂に入る…
あ、そうそう煙草は止めた方が良い、一酸化炭素の影響で脳みそさらに回らなくなる。
>>122 自ら答えを出しているのでは?
「2ちゃんにカキコする」
>>122 熱い茶を一杯 -> 風呂 -> 仮眠 -> 知人に相談 -> 断念して別の方法を模索
128 :
nobodyさん :2005/12/20(火) 11:14:59 ID:bFU5ghZ7
おなぬ タバコ以上に頭が回らなくなるw
129 :
nobodyさん :2005/12/20(火) 11:34:40 ID:2GuOb5lJ
$lines = file( $filename ); をソートする方法を教えてください
131 :
nobodyさん :2005/12/20(火) 11:45:37 ID:2GuOb5lJ
>>130 ありがとうございます。
$linesに「名前,個数」って入っていてこの個数でソートしたいんですが
教えて頂いたとこでみてみます
132 :
nobodyさん :2005/12/20(火) 12:00:12 ID:2GuOb5lJ
関数1ちでは無理なんですかねこれは $linesには以下のような感じ(名前,個数)で値が入っています あああ,5 うううう2 いいいい,4 これをこんな感じで個数でソートしたいのですが・・ うううう2 いいいい,4 あああ,5 どういう関数の組み合わせでできますか
>>132 あー、 , 区切りでやるときはちょっとややこしい事をしなきゃいけない(関数一発では無理)。
, 区切りをexplodeするなり多次元の配列にしてから、array_multisort ってのが一番楽かな。
PHPのスクリプトってのはいろんな場所から読み込まれるのが前提だろ? なのにスクリプトの中のファイル操作は読み込まれた場所からのパスじゃないと アクセスできない。つまりスクリプトを置いた場所からではなくスクリプトが読み込まれる 場所からどうやったら目的のファイルにアクセスできるかを考えなくちゃならない。 これがPHPのファイル操作関連を複雑にしている諸悪の根源だと私は確信しているんですよ。
>>135 すごい狂った人が来ましたね。
データファイルを置く場所に関して悪習慣ができているようなので直すことをお勧めする。
138 :
nobodyさん :2005/12/20(火) 13:15:22 ID:2GuOb5lJ
>>133 ありがとうございます。
listで二重ループで普通に個数を比較しての単純ソートをしてたんですが
これがどうも数が多くなると正常にいかなかったもので
139 :
nobodyさん :2005/12/20(火) 15:07:53 ID:qvzJW6a+
質問です! <SPAN class="class">ここに文章 </SPAN> 上記のように途中で改行があるソースから文章を取り出したいのですが $C = preg_match_all("%<SPAN class=\"class\">(.+?)\n</SPAN>%is", $A, $B); と書いてもうまくできません。\r\nや\rにしたり、 実際に改行してみたんですがダメでした。どうしたらいいですか?
>>139 preg系のパターンは/で囲むんじゃないの?
141 :
139 :2005/12/20(火) 15:26:33 ID:qvzJW6a+
>>140 そうなんですか?改行のない場所ではうまく取れてますが。。
142 :
139 :2005/12/20(火) 15:34:15 ID:???
あああ、ごめんなさいごめんなさい。 全然違う所($Aのところ)でミスしてました。お騒がせしました。
>>140 英数\以外なら何でもいいよ
括弧系は対応する括弧で閉じる
htmlで出力するとき、改行コードを\nにしてるんだけど、ソースを見ると\r\nになっちゃうのは仕様ですか?
>>144 んなことは無いんじゃないかなぁ。
間に変なフィルターが入らないように、proxyを使わずにtelnetで確認してみたらどうかな?
>>145 すまん、PHPじゃなくて、Perlでの話だった。
単純に誤爆してた、スマソorz
外部ファイルを取得して保存する要領で外部の画像を保存することはできますか?
PHPでそれまでに出力された内容(ブラウザから見たソース)を取得する関数ってないですか?
150 :
50 :2005/12/20(火) 17:45:22 ID:???
名前は誤爆誤爆誤爆
XXXXserAAAAAAA;XXXXX でAAAAAAAの部分を取得したいのですが、簡単な方法はありませんか? Xは不特定、serと;は固定です。
>>149 そうではなくて、例としては以下のような感じです。
――――――
<?php
$a="あいう";
echo $a;
?> えお
<?php
$X=出力取得関数();
?>
――――――
で$Xに"あいうえお"が入ってくれればいいんですが。
155 :
152 :2005/12/20(火) 18:40:56 ID:???
AAAAAAAの部分も不特定です。 i-modeの端末情報です。
>>155 933 名前:nobodyさん:2005/12/17(土) 01:04:26 ID:???
preg_match('/hoge(.*)hage/', $str, $pattern);
$result = $pattern[1];
158 :
154 :2005/12/20(火) 18:54:35 ID:???
>>156 ありがとうございます。ちらっと見た感じ、これでいけそうなんでこれを参考にして色々やってみます。
159 :
155 :2005/12/20(火) 19:01:46 ID:???
画像のサイズを取得する関数を教えてください
>>160 ttp://www.php.net/manual/ja/ に行き、search for にキーワードを入力する。
今回は画像だから image あたりが良かろう。
で、検索すると、、、いかんな・・ダイレクトにヒットしてしまった・・
まぁいいか、、、イメージ関数つー関数群があることが分かる。
その中を見ていくと、画像のサイズに関係する関数が見つかるだろう。
さらに image size と2つのキーワード(or 検索)で探してみると、
いかにもそれっぽい関数が列挙される。
>>148 $fp = fopen("save_filename", "w");
fwrite($fp, file_get_contents("ext_filename"));
fclose($fp);
163 :
162 :2005/12/20(火) 20:09:02 ID:???
こっちの方が単純か。 file_put_contents("save_filename", file_get_contents("ext_filename"));
>>161 ただの誘導に10行もかけて勿体つけて書くなよキモいなお前
165 :
148 :2005/12/20(火) 22:18:27 ID:???
はじめて行読み込みをしようと思ったのですが以下の物だと行が無くてもbreak;しません。 私は何か思いっきり勘違いしているのでしょうか?。 if (is_readable($file)){ $fp = fopen($file,'r'); for($i=0;$i<10;$i++){ if (!feof($fp)) break; echo fgets($fp);; } fclose ($fp); }
>>167-168 feof()
ファイルポインタがEOFに達しているかまたはエラーの場合にTRUE 、 その他の場合にFALSEを返します。
だった(・・;。手っきり反対の動作をするのかと思い込んでいました。
ありがとうございます。
while(!feof($fp)) は無限ループに注意
171 :
nobodyさん :2005/12/21(水) 12:39:22 ID:RHXLhrgR
htmlspecialchars()でENT_QUOTESが、デフォルトでなく オプション扱いになっている理由って、何が考えられますかね?
>>171 PHP/FI Version 2.0の同名の関数が<>&"しか対応してなったから後方互換性のためだと思われる
PHP/FIが ' に対応しなかった理由は知らない
173 :
nobodyさん :2005/12/21(水) 13:02:28 ID:RHXLhrgR
>>171 なるほど、歴史的な理由である可能性が高いですか。
デフォルトでついてた方が楽なんだけどな〜。
これ、ただでさえ関数名長いから、めんどくさいですね。
>>173 ENT_QUOTESをいれた形でユーザー関数にしておけばいいだけでは?
>>173 関数名や引数の補完機能の付いているエディタや開発環境を使うと便利ですよ。
この板にもエディタや開発環境のスレが3つくらいあったかな。
おいらはシンプルなエディタで補完機能を使わずにキーワードの強調表示だけしてますが。
(補完時の入力・表示に瞬間的に引っ掛かる感じがどーも苦手で。。)
date<>title<>message<> となってて、長いmessageを携帯用に分割して表示するようにしたいのですが 何か良い方法はありますか?
>>172 JavaScriptとかで「'」を利用する場合の方が多いと考えられてるんじゃないのかな。
逆に「'」を常に変換したい場合ってそんなにあるもの?
JavaScriptで普通に「'」を使うように、通常は「'」なんて参照文字に変換する必要って無いと思うんだけど。
あれ?DWのPHPってそんなに使い勝手良かったっけ・・?
>>180 それってただ並べてるだけじゃないの?
User Raitingは低いよ。
一番はPHP Designer 2005
それより更に下をいくZendStudio・・・
エディタは補完機能+軽さかなぁ いろいろ使ってみたけど、どれもしっくりこないんだよね・・・ 何か良いのがないかしら あ、本題です。require('./'.$dir.'.dat');とする場合に$dirに含まれると問題がある文字は あるのでしょうか?。先頭に「./」を付けていてもディレクトリをさかのぼられる事はあり ますか?。
いろんなエディタを使って結局xyzzyに落ち着いてる自分ガイル。
>>186 ある。 ../ は .././.././ のようになっててもきちんと動く。
英語よめんからphp_editor使ってる
Eclipse(TruStudio)だろ。 サーバでテストするまでもなくエラー箇所出してくれるし。 細かい手間が省ける。
こんばんは。お邪魔します。 テキストファイルに書き込む毎に1増やすようにしたのですが 1,2,3,4,5,6・・・ と記入されていきます。 ここまではいいのですが、例えば3と5を消す処理をしたとします。 1,2,4,6・・・とテキストファイルには表示されます。 ここで次にファイルに書き込む時に3を、その次に書き込む時は5としたいのです。 漠然とした例えで分り難いかもしれませんが、よろしければ教えて頂けないでしょうかm(_ _)m
193 :
186 :2005/12/21(水) 19:31:24 ID:???
>>188 どうしたら良いのかなぁ
while(preg_match('|\./|',$dir)) $dir = str_replace('./','',$dir);
これでどうでしょうか?
>>191 欠番補完したいなら分割して1つずつ確かめて行くしかないと思うよ(^^;
194 :
186 :2005/12/21(水) 19:36:34 ID:???
$dir = '.././..././///////'; while(strpos($dir,'./') !== false) $dir = str_replace('./','',$dir); 結果が「////」となりましたが、これは問題があるでしょうか?
GDを使って折れ線グラフを作るのは難しいんですか? 調べてもよく分からないのですが。
特に難しいもんでもないよ。 かといって、配列を渡せば折れ線グラフが自動作成される つーよーな便利関数があるわけでもない。
ライセンスの心配がある場合は、phplotってのもありかな。
ファイルをアップロードするPHPを記述した時に $filename = $_FILES['rep']['name']; if(file_exists($_FILES['rep']['tmp_name'])){ //ファイルの存在を確認 tempの状態で確認 if(ereg("(^[a-zA-Z0-9_-]+)\.(lzh)",$filename)){ list($filenamea,$filenameb) = explode(".",$filename); $repnum = $_GET['repnum']; move_uploaded_file($_FILES['rep']['tmp_name'],$repnum.".".$filenameb); exit; } } とし、「aiueo.lzh」を送信した所、「.lzh」と保存されてしまいます。 ちゃんと$_GET['repnum']が通っていないのかと思い、 echo $repnumすると、きちんとGETによって渡された数字が表示される様子。 何がおかしいのかさっぱりなのですが、どこか間違った点があれば教えて下さいm○m
>>199 $repnumが日本語で文字コードが絡んでるとエスパってみる
>>200 さん
レスありがとうございます
$repnumには10や11など数字がはいっております…。
アプロダのあるphpは一つ上の階層なんですが、関係無いですよね。
>>191 $list = "1,2,3,5,8,9";
for($ar = explode(",", $list), $i = 0; $i < (count($ar) - 1); $i ++) if($ar[$i + 1] != $ar[$i] + 1) break;
$num = $ar[$i] + 1;
print "ret = $num";
>>199 素朴な疑問なんだが、アップロードしてるってことは<form>のmethodはPOSTなんだろ?
なんでrepnumはGETで渡した値を参照してるの?
repnumの値をどこでどのように確認したのか気になる…
204 :
nobodyさん :2005/12/22(木) 02:11:34 ID:f6FkYizC
mail関数が使えない現象が出ています。 phpinfoのstandard項目にsendmail_pathの記述がない。 ぐぐった結果、qmailのwrapperをシンボリックリンクにして 再度コンパイルしてインスコ。 それでも現象は変わらぬ。 php.iniも確認してsendmail_pathの記述は書かれているの 確認したんだけどなー
現象ってどういう現象が出てるんだ。 何かエラーメッセージが出てくるの?
206 :
nobodyさん :2005/12/22(木) 02:18:08 ID:f6FkYizC
出てきません。 mail関数が有効にならない。 qmailのsendmail-injectでサンプルメールを飛ばしたが それは動いています。
207 :
nobodyさん :2005/12/22(木) 02:39:47 ID:NhSg4vO8
eregi_replaceを使って >>[0-9]+ の数字の部分をリンクにしたいのですが >>の部分を認識して貰えません。 $str = eregi_replace("(>>)(0-9]+)","<a href=\"#\\2\">\\1\\2</a>",$str); >>と書くだけでは駄目なのでしょうか?他にも適当に試しましたがうまくいきませんでした。
208 :
修正 :2005/12/22(木) 02:42:23 ID:NhSg4vO8
× "(>>)(0-9]+)", ○ "(>>)([0-9]+)",
ここまで独り言
>>207 「>>」はhtmlspecialchar()しないとブラウザじゃまともに表示されないかも
>>210 "(&gt;&gt;)([0-9]+)",
で出来ました。
ありがとうございました。
>>193 $dirって外から入力された値?
だったら".."が含まれた時点で不正な入力と表示して終了。
>>203 さん
レスありがとうございます。
http:// 〜/a.phpには
http:// 〜/upload/b.php?repnum=15
というリンク先にリンクしております。
このような感じでGetでrepnumを渡しているのですが…。
空白が表示されるという事は
値が入っていない = ファイルをPostされた時点でGetの中身が消えてるのでしょうか…。
$repnum = Get_['repnum'];
の位置を変えてみるも駄目でした。
相変わらず「.lzh」になるようです
>>213 $newfilename = $_GET['repnum'].".".$filenameb;
echo $newfilename;
move_uploaded_file($_FILES['rep']['tmp_name'],$newfilename);
とやって$newfilenameはどう表示されるの?
まさかと思うけど、typoしてるってことないよね。
>>214 さん
レスありがとうございます。
只今外出先の為確認できないので、お昼休憩の際に早速確認させて頂きます。
ちなみに、聞き覚えの無い言葉ですが、typeoとは何でしょう?
無知で申し訳ないですTT
>>213 ブラウザにもよるんだが、POSTでフォーム送信したときは
URLの後ろに?〜でパラメータつけても無視される場合があるぞ。
設計から見直した方がいい。
>>215 ty・po
━━ n. 〔話〕 誤植, タイプミス.
三省堂提供「EXCEED 英和辞典」より
>>213 >
http:// 〜/a.phpには
>
http:// 〜/upload/b.php?repnum=15
> というリンク先にリンクしております。
意味が分からん。
a.phpがアップロードのFORMが書いてあるページなのか?
それともb.php?repnum=15がアップロードFORMのページなのか?
ちょっとFORM部分のHTMLを書いてみろよ。特にacdtion=がどうなってるか。
なんかWebプログラミングを根本的に勘違いしてるヨカーン
おっと。typo。acdtionでなくactionな。
>>216-220 さん
レスありがとうございます。
>>216 さん
そうなのですか、知らなかったです…。
当ブラウザはIE6.0ですが、設計の見直しも必要かもしれないのですねTT
>>217 さん
ありがとうございます、勉強になりました。
>>218 さん
formが書いてあるのはbの方法です。form部分は
<form method="post" enctype="multipart/form-data" action="b.php">
<input type="file" name="rep" size="30">
<input type="image" name="submit" src="画像のURL">
</form>
となっております。
HTML部分はPHP記述の下です。
皆さん意見下さってありがとうございます。
もう少し面倒見て頂ければ嬉しいですm○m
>>218 さん
formの記述はb.phpの方にしており、a.phpには
http:// 〜/upload/b.php?repnum=15
へのリンクだけとなっています。
やはりform部分に問題がありそうでしょうか…?
>>223 b.phpに以下を足して中身を確認したら…
print_r($_POST);
print_r($_GET);
すみません。PHPを勉強中のものですが、以下のエラーがでてどうしても 原因がわかりません。おしえてください。 エラー:Errors parsing D:\Program\APACHE~1\Apache2\htdocs\1-5.php PHP Parse error: parse error, unexpected $end in D:\Program\APACHE~1\Apache2\htdocs\1-5.php on line 15
226 :
225 :2005/12/22(木) 11:59:40 ID:nKaKNsDz
本文:ちなみに一番下の行が15行目です。 <?php if($_POST['user']){ print "Hello,"; print $_POST['user']; print "!"; } else { print <<< _HTML_ <form method="post" action="$_SERVER[PHP_SELF]"> Your Name:<input type="text" name="user"> <br> <input type="submit" value="Say Hello"> </form> _HTML_; } ?>
>>223 さん
レスありがとうございます。
もうすぐお昼なので、確認してみたいと思いますm○m
>>225 さん
定義されていない変数があるという事だと思います。
$_SERVER["PHP_SELF"]
ではないでしょうか?
ヒアドキュメントまったく使わない俺だがよく見る質問なので覚えた。 {}で括れと
>>222 > <form method="post" enctype="multipart/form-data" action="b.php">
> <input type="file" name="rep" size="30">
> <input type="image" name="submit" src="画像のURL">
> </form>
この中に
<input type="hidden" name="repnum" value="<?=$repnum?>">
を追加しないとそもそも2度目の送信(アップロード時)にはrepnumは渡らん。
おまえ、1度送信しとけば値はずっと保存されると勘違いしてるだろう。
その上で、アップロード時のrepnumの受け取りは$_GETから$_POSTに変更シレ
230 :
225 :2005/12/22(木) 12:17:07 ID:???
>>227 様
速レス感謝です。
今、偶然、違う本に解決方法がのっていました。
ヒアドキュメントの終わり、_HTML_;の行には、
タブ、スペース、コメント又その他の文字は書いていけないらしいです。
書いていいのはヒアドキュメントの終わりの印(この場合だと_HTML_)と
文の終了を示すセミコロン(;)だけだそうです。
速レス感謝します。
失礼しました $_SERVER['PHP_SELF'] かな…?
解決しましたか^^; 的外れでしたが良かったです。
235 :
225 :2005/12/22(木) 12:21:45 ID:???
>>228 様
使用しなければいけない場面になったら、参考にします。
ありがとうございます。
236 :
1.0008(破滅挑発) ◆rzOmotimAo :2005/12/22(木) 14:59:24 ID:DhSg+gn2
新スレ、誰か立てて
自分で立てようとしたら
「このホストではしばらくスレ立てができません」
ってなる。
【板名】webprog板
【板のURL】
http://pc8.2ch.net/php/ 【タイトル】中央銀行システムを作らせながらPHP屋を捕獲するスレ2匹目
【名前】Omoti
【本文】
中央銀行システムをつくることで
経済、金融を理解しようというスレ。
( ´,_ゝ`)プッ
Omotiさんそろそろやめとけっていう神の思し召しじゃないの?
>>238 あなたは神の声が聞こえちゃう人ですか?
_ \ヽ, ,、 `''|/ノ .| _ | \`ヽ、| \, V `L,,_ |ヽ、) ,、 .| ヽYノ / r''ヽ、.| / ,.. -──- .、 `ー-ヽ|ヮ .| , ‐'´ __ `ヽ、 `| | / , ‐'"´ ``''‐、 \ | | / / \ ヽ | ヽ, y' /` ‐ 、 ,.. -'ヘ ヽ. }ノ ヽ,' / /`,ゝ' ´ ヽ Y. . i ,' { { ヽ `、 l ,イ─- 、.._ ヽ ,, _,.. -─:} ! . | r‐i| ー=ェェ:ゝ ,.∠ィェェ=ー' |r 、. l | {ト」l|. : | " ``: |!トリ | . │ ヽ、| ;.」_ |'ソ ! . │ ヽ r──ッ /ノ | | lヽ  ̄ ̄ / イ │ . ! 丶ヾヽ ~ , ' ノ │ ! ト. ミ.ゝ ヽ.____./ / l / ヽ ヽ イ ,' / , ' ┼ヽ -|r‐、. レ | \. ノレ'/ d⌒) ./| _ノ __ノ
>>236 俺は貴重なスレ立て権をそんなクソスレで使うのはいやだ
この板のBBS_THREAD_TATESUGI=64だからあと64個新スレがたてば同じIPでスレが立てられるぞ
ここの立てすぎは新仕様じゃないの
緊急の手段として、 ノーパソ持ってグレ電からダイヤルアップかな
>>1 とかを正規表現で認識する方法を教えてください
247 :
nobodyさん :2005/12/22(木) 17:47:30 ID:3rnz5g5i
>>178 JavaScriptなら、"も変換されると困るわけだから、
デフォルトで、"は変換されて'は変換されない理由にはなってないかと。
"は変換されて欲しいけど、'が変換されて欲しくないケースって、
ほとんどないんじゃないかな、と思う。
それがデフォルト設定になっているけれど。
249 :
nobodyさん :2005/12/22(木) 19:11:47 ID:vwG+O/GX
513 名前:もしもし、わたし名無しよ 投稿日:2005/12/22(木) 18:37:36 505です 先週来、うちのサーバのアクセスログに、こちらの(うちには存在しない)PHPを呼び出そうとする ようなアクセスがあったというエラーが延々と記録されてます。 ありそうな名前のPHPを呼び出して、何かをさせようとしているみたいです。 たとえば /blog/xmlrpc.php とか。 うちは、今のところはエラーログが太る程度で済んでいるのですが。 パターンは2つ。 ひとつは、ある種のスクリプトを起動させて、妙なクエリ渡して、結果をどこかに送信させようとしているみたい。 もうひとつは、直接ブログ(らしい)PHPに対してPOSTで何かを送りつけています。 アクセス元のアドレスを探ってみると、多くは個人サーバ(らしき所)でPHPでブログが動いているようなんです。 あくまで推測ですが、 ある種のPHPに何かの脆弱性が見つかって、これを突いて伝染するのではないかと。 感染した所は別のブログを探して・・・だと怖いなあと。 今回の手口は、ありそうなPHPの名をそのまま呼び出しす機械的なパターンです。 CGIもそうですが、他所から貰ってきたスクリプトなどを置く場合は、 (1)ファイル名を変えるか、設置する場所の名を標準的な名でなくする。 (2)変数や引数の名を推測しにくい名に変更する。 ぐらいはしておく方が安心だと思います。 というレスを別の板で見たんだけど、 この板で話題になってるスレってありますか?
>>249 それウイルスだよ
うちにも来てた
こんな文章書かずに/blog/xmlrpc.php でぐぐれば直ぐ解ると思うが・・・
釣りか-;
251 :
nobodyさん :2005/12/22(木) 20:49:52 ID:iK3Yz+s2
<form action='entry.php' method='post'> <input name="password" type="password" value="" size="12" maxlength="12"> <input type='submit' name='update' value='更新'> <input type='submit' name='delete' value='削除'> <input type='hidden' name='id' value='hogeid'> </form> 上記のようなフォームを作り、掲示板の中身を更新、削除を実行したいと思っています。 このとき、1つの<form>に二つのボタンが存在するのですが、どちらが押されたかを正確にPHPに伝えるにはどうしたらよいのか分かりません。 「更新」や「削除」というテキスト情報が送られるのでそれでチェックとか やろうとすると文字コードとかその辺が原因なのかうまくいきません。。 また、下記のように情報が入っているかでやってみましたが何度か成功するものの、やはり高確率で失敗します。 if(isset($_POST['delete'])){ delete($_POST['id']); } else if(isset($_POST['update'])){ update($_POST['id']);} 何卒、よろしくお願いしますm(_ _)mペコリ
>>251 submitのnameを統一して
<input type="submit" name="action" value="更新">
<input type="submit" name="action" value="削除">
if ($_POST["action"] == "更新") ・・・・・
ってやればいいんじゃね?
>>251 PC用のブラウザが相手ならその書き方で普通に動かないか?
携帯はボタン2個は無理な端末があるからどうしようもないけど。
>>250 釣りじゃないです。それほど詳しくないもので・・・。ありがとうございました。
255 :
nobodyさん :2005/12/22(木) 21:09:21 ID:wNhRz1jC
そんなまわりくどいことしないで素直にラジオボタンかセレクトボックス使えや
input type="password" の中で打ち込んだ後で、 よっこいしょっとリターンキーを押してるんじゃないかなぁ。 そんくらいしか不都合が起きるケース無さそう。
>>229 さん
レスありがとうございます。
思ったより忙しくなってしまった為、現在まで仕事というハメになってしまいました。
ご報告が遅れてしまって申し訳ないです。
先程、試してみた所、見事$repnumを表示させる事が出来ました。
仕組みを理解しておらず、恥さらしとなってしまいましたが、
今後とも頑張って勉強していこうと思います。
教えて下さった方々、本当にありがとうございました。
丁寧なレスだけどどうみて精子ですがチラついてしょうがない
配列の途中を削除して空いた場所を詰める関数はないのでしょうか? $a = array(0,1,2,3);を$a = array(0,1,3);という風にしたいのです unset($a[2])では空白が出来てしまいます
261 :
260 :2005/12/22(木) 23:13:15 ID:???
勘違いでした(・・;失礼
今酷い自爆を見た。
imagettftextを使って日本語を縦書きで出力したいのですが、 どうもうまくいきません。 $arry1="【ぬるぽ!】"; $count1=mb_strlen($arry1); $i=0; while($i <= $count1) { imagettftext($image, $size, 0, $yoko, $tate, $fontcollar, "$font", mb_substr($arry1,$i,1)); $tate=$tate+25; $i++; } こんな感じでやって、一文字ずつやれば一応できるんですが、 それだと【】なんかが文字列に含まれていると、それは横向いたままで出力されるから不恰好で、、 どなたかうまい方法あればご教授願えませんでしょうか?
【】があったら縦のものに置き換えればいいだけの話じゃないのか?
画像使うとかね
むしろ単に縦書きにするなら角度に270を指定すればいいんじゃ?って感じだが、 回転させないといけない特定の文字だけ1文字ずつ処理が必要な感じだな。 特定の文字が指定されたときだけ、1度別のイメージリソースに出力しといて、 それをimagerotate()で回転させてからimagecopymerge()で本来の画像に マージコピーする、って手順じゃダメか?
Fatal error: Call to a member function on a non-object
in /local/Web/sites/phpweb/include/ip-to-country.inc on line 65
http://www.php.net/ m9(^Д^)プギャー
269 :
nobodyさん :2005/12/23(金) 20:52:53 ID:gfPK9X7h
くだらない質問ですが、公式マニュアル見ようとしたら
>>268 みたいなエラーが出て見れなかったので質問させてください。
includeを使う時、相対パスで…
<?php include("../include.inc"); ?> は大丈夫でしょうか?
以前includeは「絶対パス」で書けって言われたのですが、相対でも出来てしまうので
どっちが正しいのか分からなくなってしまいました。
>>267 angleに角度を指定したら、縦書きじゃなくて全体的に回転させただけになると思う
回転させるとおかしい文字をテーブルにしておき、1文字処理する際に
出くわしたらangleに90や270を指定してやればいいのでは?
>>269 プログラムを配置する環境さえ間違えなければ
相対パスで全然問題ない。
ページの配置がディレクトリレベルでコロコロ変わるなら
絶対パスの方が安全で自由度が高い、ってだけだろう。
mb_send_mailで以下のようにヘッダーに日本語を使いたいのですがこのままではメールサーバーに 怒られてしまいます。日本語の部分をどう変換したら受け取ってもらえるのでしょうか?。 $headers = "From: 日本語 <post@mail>\nReply-To: post@mail\nX-Mailer: PHP/".phpversion();
どう怒られるの? メールヘッダがちゃんとJIS+base64エンコードになってないってこと? それと改行は横着せずちゃんと¥r¥nした方がいいと思うよ。
276 :
nobodyさん :2005/12/24(土) 16:04:00 ID:fujLuwhq
<?php system("ほげほげ"); system("ふがふが"); system("ふー"); system("ばー"); ?> のようなものがある場合、 「ほげほげ」の実行が終了してから「ふがふが」の実行がはじまる 「ふがふが」の実行が終了してから「ふー」の実行がはじまる 「ふー」の実行が終了してから「ばー」の実行がはじまる という順番になっているのでしょうか? あるいはそうでない場合、 上記順番で順次に実行させるにはどうすればよろしいのでしょうか? よろしくお願いします。
マニュアル読め
>>276 ほげほげとかの後ろに & つけなきゃ大丈夫
mb_send_mail()でccとかbccとか 付けられないのでしょうか? よろしくお願い致します。
>>280 いえいえ、そういわずにこちらこそよろしくお願いします。
どこ見てんだオラオラァ!
最近、ファイルシステムよりMySQLの方が読み書きが早い感じがするのですが 実際の所どうなのでしょうか?
mysqlもOSのファイルシステムに依存してる
>>285 データの分量とか入出力の方法とかマシンのCPU・メモリ・HDD性能とか
色んな要素で違ってくる。
メモリー上にキャッシュされる状態を作ればファイル直より速いなるが、 そうでなければファイルを読んだ方が速いことが多い。 ただ、PHPってファイルアクセスや配列のメモリアロケーションとかがかなり遅いので、 その辺を同じように処理させてないと一概にどっちが速いとか判断できなくなる。
DBと体感差が出るなら相当むちゃしてると思われ ベターな方法を選ぶのは大事だよ
290 :
nobodyさん :2005/12/25(日) 00:12:45 ID:BQDdD2yN
xmlベースの簡単なCMSを作ろうと思うのですが、 phpでのXML読み書きを解説した良いページってありますか?
ソケット取得も出来ないヘタレですー。 とある板では、専用スレなるものが立っていて、スレが進むと 「過去ログ倉庫」にきちんと整理しているところがあります。 手動でログを収集し、dat2htmlなどでhtml化してwebサイトに まとめているようです。 これを、アンテナみたいに2ch鯖から現行スレを自鯖に随時ミラーし( ミラーも随時読めると良)、1000いったらそのまま過去ログ として保存・・・みたいに自動化されている方はいらっしゃいませんか? こんだけ板があってスレがあって有能な人たちがいれば、ありそうな気がする。
292 :
nobodyさん :2005/12/25(日) 01:17:51 ID:xdx8WIxl
自鯖立てて専ブラの dat 公開すりゃいーじゃん(*´・д・)(・д・`*)ネー
業者ウザス
>>292 >他のサイト掲示板に一括で書き込むの
その行為の目的が正当なものであることを説明して頂戴。
こっちがスパマーでないと判断できる理由をね。
296 :
292 :2005/12/25(日) 01:57:06 ID:xdx8WIxl
目的は当方のお客さんが広告を宣伝する為に当方が提携している サイトの広告用掲示板に一括で書き込めると言う サービスを提供する為です。 もちろんスパムのような行為を行う気もございませんし、 他のサイトへの書き込みが出来る様にも致しません。 よろしくお願い致します。
>>296 相手が関連サイトなら、許可REFERERの中に
自分とこも加えてもらえばいーじゃん。
298 :
292 :2005/12/25(日) 02:13:00 ID:xdx8WIxl
>>297 許可REFERERの中に入れる事で解決致しました。
ありがとうございます。
ちなみに、それ以外の方法はないでしょうか?
PHPではそういった事はできないのでしょうか?
>>298 できるけど相手サイトのセキュリティを破る方法の公開になるから
こんなとこで書きたくない。
REFERERチェックがいくら軽度のチェック方法でしかないとしても
クラック方法を公にしていいってこたあるまい。
300 :
292 :2005/12/25(日) 02:19:14 ID:xdx8WIxl
301 :
291 :2005/12/25(日) 09:54:59 ID:???
>>293 なるほど。
自鯖でP2使ってるんで、公開用のスクを書けばいいですね。
あとはdat取り込みを自動化させる、と。ふむふむ。
parse error, unexpected '=' ってどう意味デツカ?
お前が変なところに'='を置いてるって意味。
ワンタイムトークンのクラスってPEARとかにあります? 無かったらXOOPSとかにあるのを移植するとかしなきゃだめかなぁ?
やあ、サンタだよ。 クリスマスプレゼントとして、君たちの質問になんでも答えてあげようじゃないか。
306 :
nobodyさん :2005/12/25(日) 12:57:24 ID:BQDdD2yN
フォルダの生成はmkdirで出来たけど、 ファイルはどうやって生成したらいいですか?
eval()って邪道ですか?
メールの添付で日本語名を使おうとしているのですがmb_encode_mimeheaderで変換しても 正しく受信できないようです。日本語をどう変換すると良いのでしょうか?。 Content-Type: image/jpeg; name="日本語" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="日本語"
>>306 file_put_contents("ファイル名", "");
現在1つのPHPで1つのページしか出力できないんですが、 複数のページを出力するようにしたいと思っています。 PHP等でできた掲示板を見ると、修正削除などの処理を、 1つのPHPでできるようになってますよね? 語尾に?mode=modifyとかついているやつです。 ソースを見てもいまいちわからなかったのですが、 どういった関数?を使えばいいのでしょうか? やり方などにもヒントがあれば教えていただきたいです。
スナソMySQLの方は今一盛り上がりに欠けているので、ホットなここでオナガイシマス time_1というレコードでMySQL側でのデータ形式はtimeとなっています、 ` time_1` time NOT NULL default '00:00:00', phpの方から First time:<input type="text" name="first_time" value="<?php echo $first_time ?>"><br> テキストタイプのデータとしてデータベースにインサートしているのですが データベースでは、見かけ上、正常に登録されている様に見えるのですが、 問題ないのでしょうか? <input type= の方でデータ形式を特別に時間の形式を指定してやらなければならない様な事は 無いのでしょうか? 御教授お願いします。
盛り上がりに欠けるのは 聞き方がまずいからだろうね
>>313 特に関数がある訳ではない。
ifとかswitchなどで処理を切り替えてるだけ。
>>313 んじゃヒント
if($mode == 'コマンド1') {
コマンド1の処理とHTMLの表示
} else if($mode == 'コマンド2') {
コマンド2の処理とHTMLの表示
} else if($mode == 'コマンド3') {
コマンド3の処理とHTMLの表示
}
HTMLと分けておくと管理もラク。
ifで処理を分けることも想像できない人が 外部HTMLファイルなんて扱えるのか?
>>314 読みにくい質問だなぁ…
しかも結局何が聞きたいんだって感じ。
> <input type= の方でデータ形式を特別に時間の形式を指定してやらなければ
inputの部分で形式の指定なんてことはできません。
> データベースでは、見かけ上、正常に登録されている様に見えるのですが、
> 問題ないのでしょうか?
入力内容を何のチェックもしないでDBに放り込んでるなら問題ありまくりです。
PHPでちゃんと形式チェックして必要があれば加工シル!!
>>316 modeに合わせて丸っきり別のプログラムをinclude()するって手もあるけどな
322 :
313 :2005/12/25(日) 19:10:24 ID:???
>>316 >>317 >>321 レス、ヒントどうもありがとうございます。
ifとswichですか。
swichは使ったことがないので、早速マニュアル引いて
やってみたいと思います。
クリスマスですが。
仏滅ですので、
結局、友引です
マイフレンドのPC君です つPC
つまり みんなで(´Д⊂
>>313 漏れはcase文を使う。
もう一つチェック用の変数をセッションで持ち回せばそのフラグで管理者だけしか表示させないとか、同じページでも管理者だけ[削除]とかを表示させたりできる。
ただ、うまく分けないとスパゲティになるから注意
とりあえず、マニュアル検索しながらcaseでわけて HTMLと分けて管理するのを作ったら見事にスパゲティ になりました
おまえ、才能ねーな
331 :
nobodyさん :2005/12/26(月) 02:48:31 ID:xVIqedOU
正規表現でも使用する文字のエスケープがイマイチ理解できないんですが、 "[TEST]"という文字列を処理したい場合は "\[TEST\]"であってますでしょうか?
あってる
333 :
313 :2005/12/26(月) 03:11:44 ID:???
>>328 レスどうもありがとうございます。
swichのマニュアルを見ていたところ、
同ページにcaseもでてきていたので、
小さなスクリプトを書いて、動作を検証しています。
まだいまいち思ったとおり動きませんが、
なんとかなりそうな気がします。
本当にどうもありがとうございました。
以下、お礼の文脈で精子ネタ禁止
別におもしろくないから引き伸ばさなくていいよ。
どうみてもPHPです。 本当にありがとうございました。
PHPのスレ乱立してるけど、 よくよく見るとこういったネタで埋まってるのな。
>>339 どうみても釣りです。
本当にありがとうございました
つかswitchとcaseは別々に使うもんじゃないだろ
どうみてもネタスレです。 本当にありがとうございました。
どうみてもネタスレ・・・じゃなかったです。 本当にありがとうございました。
こんばんは、お世話になります。
ホットメールに以下の要領でメールを送信しようとしているのですがmb_encode_mimeheader($char)を
加えるとメールを受け付けてくれなくなります。
$headers = "From: ".mb_encode_mimeheader($char)." <
[email protected] >"
件名を省いて以下のようにすると受け付けてくれるのですが件名を加えてメールを受信して貰う方法は
ないのでしょうか?。
$headers = "From: <
[email protected] >"
迷惑メールフォルダに入ってたりして。
>>346-347 だめでした(^^;
ErrCode = -81
ErrString = [MAIL FROM:] not permitted by remote SMTP server
ErrInfo = 501 Invalid Address
SMAIL SMTP-Send MX = "pamx1.hotmail.com." SMTP = "test.co.jp" From = " =?ISO-2022-JP?B?GyRCJGYkJiRsJCQbKEI=?= <
[email protected] " To = "
[email protected] " Failed !
SMTP-Error = "501 Invalid Address"
SMTP-Server = "pamx1.hotmail.com."
>>348 ちなみに345には「件名」ってあるけど、Subjectのことじゃないんだよね。
>>349 Subjectです。ホットメールから逆に送ってみて比較したりするのですが良くわかりません。
ISO-2022-JPでエンコードしたら日本語が使えるというものではないのでしょうか?。
>>350 へ?
お前、Fromのとこに書いてるじゃん。
>>351 mailもしくはmb_send_mailのパラメーターをよくみてみな。
>>348 エラーメッセージは「そのアドレスは無効」と言っているから,
日本語云々以前の問題…というオチじゃないんだよね.
日本語入れなきゃ通るみたいだし.
ダブルクォーテーションは関係ないかなぁ.
うちのメーラーは「てすと <
[email protected] >」とするとエラーが出て,
「"てすと" <
[email protected] >」に訂正してしまうので.
半角英数のみだとクォーテーションなしでも通るけど.
的外れだったらゴメン.
>>351-353 あ、勘違いしていました。
subjectではなくて差出人名です(^^;すいません。
「"」を試してきます。
355 :
354 :2005/12/26(月) 19:59:49 ID:???
そもそもhotmailのSMTP鯖がそれに対応してるのかが大前提の問題な気もするが。
PHPで添付メールを受け取りたいのですが、メールの仕様が良く分かりません。 メールの仕様を詳しく解説してるサイトありませんか? 探したんですが見つかりませんでした。
>>356 俺んとこでは普通のメーラーからニックネームつきメアドが届いてるから大丈夫じゃないの?
1度、全く同じFromアドレスを一般的なメーラーで送ってみて、
エンコ内容やヘッダ内容の違いでも比較してみればいいんじゃないかと。
>>357 RFC2045〜RFC2049にMIME1〜5の規定が書かれてるから
それの邦訳をググればよろしい。
array_searchで配列を検索しヒットしたときだけ処理を行いたいんですが、 戻り値が「0」のことも考慮すると、 if (array_search($foo, $bar) === false) { } else { (やりたい処理) } という極めて美しくないソースになります。 こんなとき皆さんはどうされますか?
in_array()を使う。
362 :
360 :2005/12/26(月) 23:04:46 ID:???
>>361 マニュアル確認しました。
まさに求めていたとおりの関数です。
ありがとうございました。
363 :
354 :2005/12/26(月) 23:11:06 ID:???
メールサーバーのバージョンアップしたらヘッダーの内容が変わった
Received: from home ([127.0.0.1]:1859)
by nature.dip.jp with [Mail Server]
id <S21> for <
[email protected] > from <
[email protected] >>;
Mon, 26 Dec 2005 23:05:58 +0900
「>>」とかなってるし・・・
前はここにも from =?ISO-2022-JP?B?GyRCJGYkJiRsJCQbKEI=?= <
[email protected] >
とかなってたから、これが原因な気がします
どちらにしろ送信できないんですけどね(^^;
364 :
354 :2005/12/26(月) 23:14:02 ID:???
てか失敗した(*ノ-;*)見逃してっ
>>363 エラーの内容がMAIL FROMがおかしいって言われてたよね?
それってヘッダじゃなくてSMTPのエンベロープFROMアドレスの事じゃないの?
sendmailで送信してるなら -f オプションでちゃんと指定してみたら。
366 :
354 :2005/12/27(火) 10:10:17 ID:???
>>366 ならmb_send_mailではなくてmailでやってみては?
header ("HTTP/1.1 403 Forbidden"); echo ("<html><head><title=\"403 Forbidden\"></head><body>"); echo ("403 Forbidden<br>"); echo ("$host_name<br>"); echo ("$host_ip"); echo ("</body></html>"); exit; こんなのって有りですか? IEとFirefox で挙動が違う。
Return-Path: っていうと、-f オプションで指定したんだね? まさか extra-headers にReturn-Path:行を追加したのではないよね ちなみに、OSとPHPのバージョンとか、関連する設定はどうなってる?
371 :
354 :2005/12/27(火) 10:39:39 ID:???
>>367 結果は全く同じでした(*ノ-;*)
PHP > X-Mail > メールソフトは差出人名を入れても上手く行くのですが
PHP > X-Mail > HotMail になるとエラーになります(^^;。
372 :
354 :2005/12/27(火) 10:42:40 ID:???
>>370 あ、すいません。
Windowsなのでsendmail_path = の設定は出来ないと思うのですがどうなのでしょうか?。
XPSP2+XMail+PHP5.1.0です。
>>372 塚さ、WindowsでX-Mail使っているとか情報小出しにするなよ。
要するに、SMTPがX-Mailとかいうので、
宛先がホットメール以外だとうまくいくけど、
宛先がホットメールだとダメってことか?
差し出し人名を日本語でなくて英字だとどうなる?
ちなみに、ソース晒してみたら?
>>370 windowsならメールを送る前にini_set("sendmail_from","
[email protected] ");
してみたらどうかな。
ヒマなのでソースを斜め読みしたら、windowsの場合そいつがエンベロープFromに
優先的になってるようだ。
なんかfrom:ヘッダーから自動的に抽出してるみたいだけど、
そこのところが腐ってるのかも。
376 :
354 :2005/12/27(火) 11:08:31 ID:???
色々すいません(^^;。
ヤフーには正しく届きます。
ソースと言っても以下のようにやっているだけなのでこれと言って特別な事はしていないのです。
ホットメール厳しい(*ノ-;*)。
mb_language('Japanese');
mb_detect_order('sjis-win,eucjp-win');
mb_internal_encoding("UTF-8");
$mime_from = mb_encode_mimeheader(mb_convert_encoding($headers,"JIS"))." <
[email protected] >\r\n";
$headers = "From: ".$mime_from;
$headers .= "Return-Path: ".$mime_from;
$headers .= "X-Mailer: PHP"."\r\n";
@mb_send_mail(
$to
,$subject
,$message
,$headers
);
377 :
354 :2005/12/27(火) 11:13:14 ID:???
(ノ´▽`)ノオオオオッ♪ 374さんのおっしゃるとおりでした。 ini_setしたら届きました<(_ _)>。 php.iniをちゃんと設定しろという話しでしたね・・・。 みなさま、ありがとうございました。
ああ、たぶんwindowsの場合はどうも強制的に<>でくくって
MAIL FROM でエンベロープを指定するようだ。
だから "From: hoge <
[email protected] >" の場合は
MAIL FROM: <hoge <
[email protected] >>
という事になって、これがSMTP的に正しくなくてエラーになるんじゃないかな。
つまりini_set("sendmail_from","
[email protected] ")しておくのは必須の気がする。
と、ここまで書いたところでもう解決してたのね。
>>368 とりあえず
<title=\"403 Forbidden\">
これは無いな
<title>403 Forbidden</title>
だろ
それとecho に( )使うのも違和感ある
>>379 echo () はどうかわからないけど
"" でくくってるから<title=\"403 Forbidden\">でいいんじゃない
jpgraphですが、 txtファイルから読み込んでグラフの値に代入する時 txtファイルを配列に格納→y軸データの配列にそれぞれ変数を代入する。 の流れで出来ないのでしょうか?
>>381 やりたいことが良くわからんが、やってできなかったの?
だったらルーチン晒しなさいな。
>>380 title要素とtitle属性がごっちゃになってないか
要素もないのに属性だけはありえんだろ
385 :
380 :2005/12/27(火) 12:26:41 ID:???
で、
>>368 はどう違うのか?
あれで 403 エラーページ作る気か…
387 :
381 :2005/12/27(火) 15:16:55 ID:???
失礼しました。 上手く出来なかったのです。 jpgraph1.19使用、レンタルサーバのphpinfoを見るとGD関連はenableでした。 解凍した中にあるsrcを public_htmlの下にアップロードしました。日本語使用予定は無いので日本語化しておりません。 public_html/src/Examples/testsuit.phpを起動すると この時点でいくつかのグラフは表示されませんでした。 この中で表示された一つのexample0.phpのソースを試しに改変する事に。 適当にy軸値を変えるとグラフも変わり、感動しつつ本題のテキストファイルのデータをグラフに反映しようとしました。 追加したのは、example0.phpのinclude以下に $ufile = "./ufile.txt"; $fp = file($ufile); list($a1,$a2) = explode(",",$fp[0]); とし、$ydataの最後二つを$a1,$a2としてみたのですがグラフにはこの二つの変数は表示されませんでした。 public_html/ufile.txtとなっており、ファイルの中身は 10,15 となっています。 分かりにくい点などあるやもしれませんが、どうぞアドバイス宜しくお願いします。
>>387 example0.phpの<?phpの次に
ini_set("display_errors", 1);
error_reporting( E_ALL );
を追加する
PHPでは、数値や真偽値のラッパークラスってありますか? JavaではintやbooleanのラッパークラスとしてIntegerやBooleanがありますが、それに相当するものです。 自作するのは簡単なのですが、PHPあるいはPECLなどにすでに用意されてあればそちらを使おうと思います。 あと、日付や時刻をあらわすクラスなんてのも探しているんですが、あれば教えてください。 よろしくお願いします。
なんか、PHP使いはじめのとき自分の書いたメソッドの引数を 全部型チェックさせてたのを思い出した。 いま? やめた。なんか文句言われたから。
392 :
381 :2005/12/28(水) 00:00:11 ID:???
>>387 氏
ありがとうございます、お陰様で出来ました。
感謝ですm(_ _)m
ファイルではなく変数内のデータのmime-typeを得たいのですが一度ファイルにして mime_content_typeするしかないのでしょうか?。
>>394 変数にバイナリデータがあるって事は、そのデータは作ったか取得したかのどっちかだよねぇ?
作ったのならmime-type決定してるはずだし、取得したならどーせ保存するんだからファイルに落とせばいいし。
何がしたいかによってやり方も変わる。
>>395-396 それがファイルに落とすなら良いのですがDBに入るので出来る事ならファイルに落とさずに処理したいのです。
やはり自作関数作るしかないですよね。そこまでするなら最初の何バイトかファイルに落として識別させるかな、
なんて考えています。ファイル名は拾得出来るので拡張子から判断するのも手だとは思うのですが、なんか
スッキリしない感じがします。
>>397 DBにファイル入れるのはあまりオススメできないが・・・
そーゆーことならテンポラリ作って処理するしかないだろうねぇ
地震なかった?
しらねーよ バカ? おれはいつも揺れてるから関係ないし
新しいwindowの大きさを指定する時、JAVAを使いますが、 アドレスに、PHPの変数を混ぜたい時どうすればいいのでしょうか? <SCRIPT language="JavaScript"> <!-- function winopen(w,h){ win1=window.open("$x.html","","width="+w+","+"height="+h); } //--> </SCRIPT> などにしたいのですが・・・。
関係ない話はよそでやれ。
>>401 JavaじゃなくてJavaScriptだ。
で、言ってることがよくわからん。
お堅い人ねぇ。 ちょっとくらい外れてたっていいじゃない。
授業だって先生いつも話しが脱線してたでしょ!
<SCRIPT language="JavaScript"> <!-- function winopen(w,h){ win1=window.open("<?php echo $x;?>.html","","width="<?php echo $w;?>","height="<?php echo $h;?>"); } //--> </SCRIPT> ってことじゃないの?
407 :
401 :2005/12/28(水) 19:47:07 ID:???
ごめんなさい(´・ω・`)
>>406 ありがとうございますm(_ _)m
408 :
nobodyさん :2005/12/28(水) 20:05:27 ID:HUgW2hhm
メールフォームを作ろうと思い 連続送信対策をしたいのですが 方法として、 送信者のIPを記録するログファイルを用意し 送信しようとするたびに、ログファイルから送信者のIPを 探し、ログファイルに存在しない、 もしくは存在してもタイムスタンプが規定の時間を経過している場合 送信を完了させる。 というものを考えています。 そこで、ログファイルからのIP検出の際 fgets()でシーケンスに調べていく他に、 一気に調べたりする方法 (1行ずつ見ず指定文字列がファイル内にあるか見るような関数) はありますか? あるなら、よろしければ関数名だけでも教えてください
PHP内の<STYLE>タグでリンクの下線を消すコマンドを書こうと思い、 <STYLE type="text/css"> <!-- body { background-color: black; font-size : 14px; line-height : 27px; word-spacing : 3px; letter-spacing : 3px; font-family : Verdana,sans-serif; overflow-x:hidden; } --> </STYLE> とした所、リンクの下線は消えず・・・。 もしかして、PHP側にスタイルの制限あったりでしょうか?
次のような文字列 $s と配列 $a があります。 $s = 'xx<0>x<3><2>x'; $a = array('A', 'B', 'C', 'D'); これを、<0> を $a[0] で置き換える、<1> を $a[1] で置き換える、.... ということをしたいです。 今はこうしています。 for ($i = 0; $i < count($a); $i++) { $pat = '/<' . $i . '>/'; $s = preg_replace($pat, $m[i], $s); } しかし、これだと配列の長さが長くなるほどループの回数が増えます。 できれば、preg_replace()を1回だけ呼び出すだけにしたいのですが、できますでしょうか。 preg_replace_callback() を使えばできるのかと思いましたが、コールバック関数に $a を渡すことができないため、できなさそうです。 どなたか教えてください。
それPHP関係ない。 CSSスレ行きなされ。
>>398 ファイル保存も考えたのですが、そのファイルをURL自打ちされて外部からアクセスされたくないので
特定のディレクトリに置いてしまうのは気がひけたのです。ファイルを作成してURL外において要求
された時だけPHP経由で公開すると言うのが良いのでしょうか?。
>>408 私は邪道だからIP毎にファイル作成してます(^^;。
>>410 <style type="text/css" media="all">
<!--
a {
text-decoration: none;
}
-->
</style>
>>410 PHP以前の問題でしょ。
文体からして
>>401 と同じ人だと思うけど、
もうちょっとcssスレやjsスレで勉強してからきたほうがいいと思う。
これだけじゃかわいそうなので、
下線を消すためのcssは、border-style:none;など。
>>414 リンクの下線消すとアクセシビリティが低下するって聞いたぞ。
:hover なら俺もやってるが。
417 :
416 :2005/12/28(水) 20:50:50 ID:???
418 :
415 :2005/12/28(水) 20:56:23 ID:???
リンク下線か、早とちりしてた。 border-style:none;ってのはきにしないでください。
cssとjsが分からなくて・・・。 申し訳ないです。 サイトで勉強してきますorz 答えて下さった方ありがとうございました。
板違いなのに答えてくれる住人テラヤサシス('・ω・`) 良スレの悪寒……w
冬厨の悪寒……w
>>408 in_array($IP, file("ファイル名"))
とかダメか?
同じファイルに書く(書ける)からってHTMLとCSSとJavaScriptとPHPはそれぞれ違うぞ〜
>>411 preg_replace('/<(\d+)>/e', '$a[$1]', $s);.
コマンドっていうのに不覚にもワロタ
426 :
408 :2005/12/28(水) 22:26:08 ID:HUgW2hhm
>>409 さん
file_get_contentsを調べてみました
確かに便利ですね
どうもありがとうございます
>>413 さん
それも、便利そうですね
だけど、アクセス数が高くなってくると
ログファイルでパンパンになりませんかね^^;
利用人数に応じてそれも検討してみます
ありがとうございます
>>422 さん
file()で配列扱いになるんですね
知りませんでした^^;
よろしければ、どういう形式で配列に入るか教えていただけませんか?
***.***.***.****(IP) , 2005/12/28/23:00(改行)
***.***.***.****(IP) , 2005/12/28/23:25(改行)
という形式とさせてください
427 :
408 :2005/12/28(水) 22:26:50 ID:HUgW2hhm
IPの桁数がおかしい・・・不覚
>>426 1行の内容がそのまま配列1要素(改行付き)
なので、in_array()じゃ探せないな。
preg_grep('/^'.preg_quote($IP).',/', file("ファイル名"))
ってとこでどーよ?
$IPにも改行つけたら良いのでは(^^?
>>429 後ろに不確定な日付文字列が入ってるからin_array()じゃ無理っしょ
>>430 あ、日付かぁ・・・それは無理だ(^^;失礼
それで先頭からの正規表現なのですね
432 :
408 :2005/12/29(木) 00:50:22 ID:ziv/ZkA5
>>レスくださった各位 勉強不足で、教えてもらった関数が使いこなせないので とりあえず、勉強しなおしてからまた明日にでも質問させていただきます どうもありがとうございました。 IP 時刻 IP 時刻 ・ ・ ・ みたいな書き出しかつ、シーケンス方式でIPを検出させれば楽なんですが あまりにも、芸がないもので・・・ ちなみに、 アクセスするたびにDB(mysql)にログを残していって DBから調べて・・・エラーか否かっていうのは アクセス量にも寄ると思いますが、どんなもんでしょう?(鯖負荷など) それではまた明日・・・ありがとうございました
>>432 大量のアクセスがあるならファイルに保存するよかDBがいいだろ。
その辺はアクセス数次第だから両方実装してみてベンチでも取って
想定されるアクセス量のときに速い方を選べ。一般的正解など無い。
434 :
nobodyさん :2005/12/29(木) 04:10:14 ID:1WTCJJ6c
引数が ?test=hoge の場合 文字例 AAAを出力し、員数が無い 場合何も表示しないようにしたいのですが: $mode = $_GET['test']; if ($mode = 'hoge'){print("AAA");} とまではやってみたのですが、員数が無い場合 何も表示しない方法が分からなくて行き詰まってしまいました。 こんな私ですがよろしくお願いします。
員数ってなんじゃ?ってのはとりあえず置いといて。 if(count($_GET) == 0) { exit; } とか if($_SERVER["QUERY_STRING"] == "") { exit; } とか。 POSTデータもチェック要るのか?これ。
436 :
434 :2005/12/29(木) 04:56:52 ID:1WTCJJ6c
>>435 ありがとうございます、員数は誤字でした。
>POSTデータもチェック要るのか?これ。
よく考えてみたら必要ありませんでした。
<?php
if($_GET['test'] == 'hoge'){echo "<p>マンセー</p>";}
if(count($_GET) == 0){exit;}
?>
としてみましたが、何故か「<p>マンセー</p>」がprintされません。(当然ですが「.php?test=hoge」としました)
echoの使い方は間違ってないと思うのですが…
エラーも出力されません。
すいません。 2chのIDからホスト名生成してください
>>436 <?php
var_dump($_GET);
if($_GET['test'] == 'hoge'){echo "<p>マンセー</p>";}
if(count($_GET) == 0){exit;}
?>
とするとどんな内容が表示される?
440 :
434 :2005/12/29(木) 05:19:55 ID:1WTCJJ6c
>>438 あ、何かの手違いでした。
ちゃんと 「まんせー」と表示されていました。すみません。
>するとどんな内容が表示される?
ちなみにやってみるテスト…
array(1) {
["test"]=>
string(4) "hoge"
}
でした。ありがとうございました。
441 :
434 :2005/12/29(木) 06:00:20 ID:1WTCJJ6c
やっぱり exit関数を使うとスクリプトを終了してしまうので 後ろの処理が全部駄目になってしまいます。 そこで、[test]キーの値が[hoge]の場合のみ 「<p>まんせー</p>」をプリントして、それ以外または引数が指定されてない場合は 何もプリントしないでそのまま…なんてことは出来るのでしょうか?
>>441 if ($_GET['test'] == 'hoge') {
echo "<p>まんせー</p>";
}
443 :
nobodyさん :2005/12/29(木) 07:41:42 ID:N/LCxJEV
マルチバイトで正規表現つかいたいんですけど、 マニュアルを探す気力がありません。 "あいうえお。かきくけこ★さしすせそ" この文字列から「。★」以外を配列に入れるには どう書いたらいいですか? 文字コードはUTF8です $matches[0] に "あいうえお" $matches[1] に "かきくけこ" $matches[2] に "さしすせそ" っていう配列を得たいです
> マニュアルを探す気力がありません。 まず精神科か心理カウンセラーの診察を受けて然るべき治療を施した上でマニュアルが読めるようになるまでは来なくていいよ。 マニュアル読めればその程度の問題は非常に簡単。mb_splitで一撃。
446 :
443 :2005/12/29(木) 09:13:34 ID:N/LCxJEV
>>444 マニュアル読めたyo!
寝たら読めた。みんなありがとう
>>434 もしかして「引数」を「いんすう」って読んでる?
なんで 引数は「ひきすう」って読むんだよ と書かないんですか?
思ったことをそのまま書いたから
頭が悪いですね
少し考えればできそうな質問なんですが、頭がこんがらがっています。 $a = 0; if ($a) { echo "あ"; } if (!$a) { echo "い"; } if ($a == "") { echo "う"; } if ($a != "") { echo "え"; } if ($a == 0) { echo "お"; } の結果が いうお になります。 $aに0〜の数字が入っていれば真としたいのですが、条件をどのようにすればよいのでしょうか?
とりあえず入門書の1冊なり読みなよ…
=== !==
>>451 少し考えればできそうなのに頭がこんがらがるお前は頭いいね。
つーか
> $aに0〜の数字が入っていれば
って意味ワカンネ。
つ is_numeric()
>>451 数字限定なら
if (is_numeric($a))
質問の仕方が悪かったですね。
$aが数字の場合、真
$aが空や数字以外なら偽
としたかったのです。
>>455 でできました。ありがとうございました。
>>456 かぶってました。ありがとうございます。
459 :
434 :2005/12/29(木) 15:45:06 ID:1WTCJJ6c
>>442 クエリが test=hoge 以外だとエラー吐いたのですが
ちょっと強引に error_reporting(0); で誤魔化しました。
>>447 「ひきすう」だったのね…orz
おかげで解決しました。
本当にありがとうございました。
>>459 じゃあ
if (isset($_GET['test'] ) and $_GET['test'] == 'hoge') {
echo "<p>まんせー</p>";
}
>>441 たしかにサンプルなんかだと
むやみにexitとかdie使っててどうすりゃいいんだ!とか悩んだな。昔は。
ちゃんとhtmlのケツの方まで出したかったりするんだったらエラー処理時の関数を作っておくとよい。
そういう事をしてるうちに見通しのよいソースが書けるようになってくるし、自分の関数をほかのプログラムでも使い回ししやすくなる
ファイルを扱うプログラム書いてるんですが、 ファイル処理時にファイルの内容なんかをmysqlにもデータ保持させて、 読み込む必要がある場合は、 mysqlから読み込んだりしてます。 この方法ってやっぱりナンセンスでしょうか? 今まで簡単だからとmysqlに逃げてましたがそろそろ真剣に 考えなきゃいけないかなと感じてます。 理由はデータベースからひっぱってくるデータは非常に処理が しやすいからです。 でも整合性(ファイルとデータベースの違い)とかで たまに苦しみます。整合性自体も考慮して書けばいいんでしょうが。
>>462 「整合性」って具体的に何の話をしてるんだかよくわからんけど、
DBで処理できる範囲ならそのままでいいんじゃない?
負荷が大きくなってくると少し考えなくちゃいけないけど。
>>461 どっちにしろエラー処理でプログラム終了しちゃったらそこで終わっちゃうし、
かといって終了させないと、実行させたくない正常時処理まで走ってしまう。
結局のとこ、全体の流れをちゃんと組めてないだけだろ?
その程度のごくごく基本的なロジックも組めないならプログラミングなんてやめてしまえと。
関数化しないといけないのはエラー時の表示はもちろん、メインの処理も含めて全体。
元の質問者は「他にどんな処理があるかは教えませんが、表示だけしないで終わるように、
かつ自分で考えなくてもそのまんま動くプログラムを教えてください」とアホ質問してるだけなので、
ここはそういうスレだからそれ自体を怒りはしないけど、ちっとは考えて回答を読めと。
>>462 ファイルをどのように扱うプログラムなのかが分からんので何とも。
ざっと読んだ限りじゃ、そもそもファイル扱う必要ないんじゃない?って思うけど。
でもやってることはファイル内容をキャッシュして扱ってる、ってのと同じだと思うので、
そういう処理は当然のように整合性問題がついて回るけど、だからといって
その種の手法がナンセンスだとは思わない。必然があるならどんどんやればいい。
検索の高速化やファイルロックの堅実性など、下手に悩むよりずっといいこともある。
メリット・デメリットを全然考えずにやってるならナンセンスなんだろうけどね。
a,b,c,d,e・・・と40個ぐらい配列$hairetuに $hairetu = array( "a","b" ); 格納してあるんですが、これをランダムに順序を並べ替えて r,d,c,g,aみたいに40個順に出力するにはどうすればいいでしょうか。
あれい_らんど
しゃっふる
>>467-468 どうも。shuffleなんてあったんですね。
array_randはポケットリファレンスに載ってないのはなんでだろ。
shuffle()が用意されたのはPHP3.0.8以降で非情に古い関数。 それに対してarray_rand()はPHP4以降。 そのリファレンス本が古いんじゃね? つーかPHPは仕様の変化が早いからマニュアル系で良書と呼べる本はあんま無いぞ。 テクニック本ならともかくリファレンスとして使うなら本家なりミラーなりの オンラインマニュアルに勝るものなし、って感じ。 俺は普段、それをローカルに保存して使ってるけど、それだって年に1度は 保存し直しとかないといつの間にか内容変わってて怖いくらいだ。
PHPなんて比較的最近の4.3.xでも関数が増え続けてるし、 (このスレの回答でも出てきてるfile_get_contents()とか4.3.0で追加された) 戻り値とかの仕様も変わっちゃう(特に配列系はかなり変わってる)んだから、 その辺の安い本なんて読みながらコーディングしてるようなやつは 現場じゃ使い物にならないと思うけどな。 ま、趣味で書いてる分には別に構わないけど、それなら他人に質問すんなって感じ。 自分の使ってるバージョンのマニュアルも読まずに質問するのは失礼じゃね?
どうでもいい
現場も9割方はレベル低いから大丈夫!w
474 :
nobodyさん :2005/12/30(金) 10:31:47 ID:FPBgif0X
バージョンPHP4.3.11です。 「test.php」というファイルに別のディレクトリにあるtest2.phpもしくはtest3.phpというファイルの どちらを上書きするか、セレクトメニューで選択した方を上書きコピーしたいのですが ■select.php (選択した方を読み込むファイル) require("filecopy.php"); if ($sentaku == true) { //選択ボタンが押された時コピー実行 copyfile(); } ■filecopy.php(select.phpで呼び出された動作) function copyfile{ switch ($datafile) { case "test2": //test2が選択された時はtest.phpにtest2.phpを上書き chmod ("test.php",0666); copy ("file/test2.php","test.php"); chmod ("test.php",0666); case "test3": //test3が選択された時はtest.phpにtest3.phpを上書き chmod ("test.php",0666); copy ("file/test3.php","test.php"); chmod ("test.php",0644); } という感じで書きましたが、 Fatal error: Call to undefined functionエラーが発生します。 どうすれば良いでしょうか?
むーぶ_アップロード_ファイル
>>474 >Fatal error: Call to undefined functionエラーが発生します。
>どうすれば良いでしょうか?
エラー表示を全部書かないのは嫌がらせか?
あとエラー行の位置を示さないのも嫌がらせの一種だからな。
あと、function copyfile{}って書き方は見た事が無いが ()は省略可能かどうかは確認したか?
> Call to undefined function 〜 つーのは、 〜って関数が定義されて無いのに呼び出そうとしたのでガッした、って事。
>>476 失礼。
Fatal error: Call to undefined function: copyfile() in /home/rika/public_html/test/select.php on line 23
23行目は上のselect.php の copyfile(); の部分
480 :
474 :2005/12/30(金) 10:43:04 ID:???
>>477 function copyfile() {
〜
}
って感じで書きましたがやはり同じエラーが出ます。
481 :
474 :2005/12/30(金) 10:44:50 ID:???
>>478 すぐ上でrequireしてるので定義されているはずなんですが、、
括弧が空じゃ意味無いんじゃぼけ
意味ないってことはないけどな。 呼び出し元も何の引数も与えてないんだからfunction側をいくらいじったところで… こいつ、PHPとPerlを勘違いしてそうな予感。 そのレベルでいきなりrequireで別ファイル定義してたって解決が遅くなるだけだ。 まず最初のうちはselect.phpの中でfunctionの定義して、動くようになってから分離シレ
484 :
474 :2005/12/30(金) 10:50:44 ID:???
>>482-483 すいません、select.php側の()を消すとエラーは消えました。
が、コピー動作が作動していない様です。
>>474 エラーに関係ないけど,
switch内のcase文は,きちんとbreakしないと,次のcase文まで実行してしまうよ.
test2が選択されても,最後にはtest3がコピーされるね,このままだと.
486 :
474 :2005/12/30(金) 10:55:27 ID:???
>>485 あ、本当だ。忘れてました。。
でもコピーはされてない様です。
エラーは出ていないのに、、
488 :
474 :2005/12/30(金) 10:58:34 ID:???
実行すらされてないですね。
>>487 ぼけとかアホとか・・・ここは下らない質問スレじゃないんでしょうか?
>>484 今のうちに言っておくが、エラーがなくなったところでそのコピーは絶対動かないぞ。
$datafileってどっから出てきたんだよ。
「HTMLのフォームで渡してます」とか勘違い回答禁止。
質問者も痛いが、妙に気性の荒い痛い香具師が居るなww
お前は分かっとるのかと。
ちなみに
>>482 括弧が空でも動くぞ。
>>488 下らない質問スレだが、その質問に親切丁寧に回答してやるスレではない。
無視しないだけありがたく思え。
492 :
474 :2005/12/30(金) 11:03:19 ID:???
>>489 $datafileはデータファイル(data.dat)の中に。
例えばtest2を選択した時はdata.datの中には
test2 という値が保存される様になってます。
この値は既に確認済みです。
493 :
474 :2005/12/30(金) 11:06:00 ID:???
print $datafile; を実行すると正常に test2 と出力されます。
>>492 function copyfile() の中で
print $datafile;
とかやってみれ。でてこねーから。
495 :
491 :2005/12/30(金) 11:07:06 ID:???
functionなんかで呼び出さずに、フォームで実行する部分 require("filecopy.php"); if ($sentaku == true) { //選択ボタンが押された時コピー実行 ここ } に、functionの中身を書けば動くだろが ボケカス氏ね糞
496 :
474 :2005/12/30(金) 11:07:45 ID:???
>>494 それだと出て来ない。何ででしょう・・?
ちょっとまてこら。人の名前を勝手に騙るんじゃねー
498 :
474 :2005/12/30(金) 11:09:54 ID:???
>>495 その手がありました・・・
まあ最終手段ですが・・・
すいません、これでやります。。
>>496 PHPはPerlと違って、普通に$datafileとか書くとローカル変数として扱われて
関数内の$datafileとその外の$datafileは別物だから。
501 :
485 :2005/12/30(金) 11:15:50 ID:???
>>498 …いや,これが最初の手段でしょ.
関数を作るのは,その処理を頻繁に行う必要が出てきてから.
>>494 で変数が出てこないのは,変数のスコープが違うから.
そのレベルでいきなりcopy()とかchmod()とか使うのは危険だから、 最初のうちはprintだけ書いて処理の流れを確認した方がいいと思うぞ。
503 :
474 :2005/12/30(金) 11:19:47 ID:???
>>501 「ファイルは分けた方が動作が軽快」と聞かされてたんで、
requireを使って、動作の目的ごとにファイルを分けてたんです。
>>502 了解です
>>503 基礎も分かってないうちからいきなり複雑にしても動くわけがない、ってことですな。
結論・基礎からやれ
>>462 データだけでなくタイムスタンプも保存するようにして、
ファイルのタイムスタンプと比較したら?
つかそういうの何もせずにデータが分散しちゃうのは
全然よくない方法だと思うんだけど。
echo 'kudaraneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!';
>>503 あるスクリプトを3つに7つぐらいに分割したのと、
まとめたものの出力タイムを算出したら、
倍ぐらい違ったぞ。
もちろんまとめたほうが早かった。
スクリプトを分けるのはいいけど、早くなるってわけじゃないってこと。
・スクリプト自体は小さい方が速い。 <- コメントアウトを1MBくらいすると体感できる。 ・includeやrequire処理は遅い。 <- まぁファイルを開く処理なんで当然っちゃー当然。 なので、 ・滅多に使わない処理を別ファイルにすると、普段の処理は速くなる。 つーあたりが落とし所かと。 スクリプトの管理が楽になるってのもあるけど。
別々のページを表示させる複数の機能をまとめるよりは分割した方が良くて、 その上で共通の部分は1つにまとめてrequire()しましょ、って話でしょ。 理由もなく分ければ速いとか遅いとか言ってもしょーがないよね。
513 :
nobodyさん :2005/12/30(金) 22:14:09 ID:WrjQPiei
>>510 アクセレータは入れてる?
速度向上を求めるなら、スクリプトをまとめるよりも、
アクセレータ入れた方がいいよ。
高速化の話をしたいわけじゃなく、分割が高速化に役立つのかの話だし。
話題ってのはどんどん流れていくものなのだよ。
DreamWeaverみたいな入力支援機能があるPHPエディターって何がありますか?
519 :
nobodyさん :2005/12/31(土) 03:35:38 ID:TV9EjbIm
自分で作ったブラウザ連出ブラクラを間違って起動させちゃったんだけど 再起動させれば問題ないよね?
自分に聞け
間抜けやなぁ
522 :
nobodyさん :2005/12/31(土) 09:25:13 ID:GIcF9gPa
ダウンロードするときにhtml表示させて、そこにダウンロードURLが書かれてるみたいなphpのあぷろだないっすかねえ。 Sn Uploaderのphp版があれば最高なんだけど・・・詳しい人いたら教えていただきたいです。。
普通のロダとどう違うのか分からん そして、何がしたいのかも分からん DL用のリンクじゃなくてURLを単純に文字列として表示したいのか? それならスクリプト内のHTML出力部分をちょっと手直しするだけだけど、それだったらスレ違いやし エスパーキボン
そもそもスレ違い
>>522 そうだ、sourceforgeでいいじゃん。
ミラー管理、会員管理、ファイルのバージョン管理、ML、
なんでも付いてるphp製アップローダだぞ
527 :
nobodyさん :2005/12/31(土) 14:26:52 ID:NkWpneAF
>>424 返事がおくれましたが、それでいけました。あまりに素っ気ない回答だったんで最初はわからなかったんですが、
よくみてみるとeオプションなんてのがあるんですね、勉強になります。
どうもありがとうございました。
528 :
nobodyさん :2005/12/31(土) 16:26:59 ID:ytK+M4x0
サーバにMySQL(MyISAM)がインストールされているかどうかを 調べる構文はありますか?
>>529 MySQLライブラリがPHPに組み込まれているかどうかでは無く、
MySQLがサーバにインストールされているかどうか、
そのMySQLでMyISAMが有効であるかどうか、です
>>530 PHPから使えなくてもMySQLが入ってればいいってこと?
PHPから使えない=PHPからアクセスできない=MySQLが入ってても認識できない
ってことだから「構文」としてはそんなものは存在しないと思うけど。
強いて言えば
passthru("find / -name mysql");
とかやれば探せるかもしれない。が、共有サーバーとかでこんなの走らせると怒られるかも。
で、さらにMyISAMが有効かどうかを調べるなら、findで見つかったmysqlのコマンドを実行して 現在のmysqlの状態を表示させるしかないんじゃないかな。 つーか、こういうのはサーバー管理者に質問して確認すべきものであって、 ユーザが勝手に調べたりしていいものじゃないと思うぞ。
>>531-532 なるほど、一発で調べる構文など存在しないという事ですね。。
ありがとうございました。
MySQLに接続しに行って、 show variables like 'have_myisam' でYESになればサポートしてる。
それ、まず接続できることが大前提だけど、 接続に失敗するのが ・MySQLがインストールされてないため ・DB接続の指定を間違っているため のどっちなのかをどうやって判別するんだ
あけましておめでとうございます 年の初めから、悩んでおります・・・ 送信元 html <form name="form1" method="post" action="c.php"> <input type="text" name="a"> <input type="submit" name="Submit" value="送信"> </form> 受け取りphp <? $a=$_POST['a']; print($a); ?> これは動作しました。 ですが↓はヘッダのメタ部だけ読み込まれて POSTで情報を送ったものは失敗しているようで表示されません
送信元 php <form method="POST" action="hogehoge.php" name='reserve'> <input type="text" name="name" maxlength="30"> <input type="text" name="mail" maxlength="50"> <input type="text" name="phone" maxlength="15"> <select name="select" onChange="PushPulldown(this.options[this.options.selectedIndex].value)"> <option value=''>月</option> <? for($a=1;$a<13;$a++){ echo "<option value='".$a."'>".$a."</option> "; } ?> </select>//javascriptで連動するプルダウンを2つ作っています <select name='day' onChange="this.options[this.options.selectedIndex].value"> <option value=''>日</option> </select> <select name="hour"> <? for($d=1;$d<25;$d++){ print("<option>".$d."</option>"); } ?> </select> <select name="detail"> <option>頃</option> <option>30分頃</option> </select> <input type="text" size="3" name="number"> <input type="submit" value="確認画面へ"> <input type="reset" value="クリア">
受け取りphp <? $name=_HS(_SS($_POST['name'])); $mail=_HS(_SS($_POST['mail'])); $phone=_HS(_SS($_POST['phone'])); $select=_HS(_SS($_POST['select'])); $day=_HS(_SS($_POST['day'])); $hour=_HS(_SS($_POST['hour'])); $detail=_HS(_SS($_POST['detail'])); $number=_HS(_SS($_POST['number'])); echo "$name"; echo "$mail"; echo "$phone"; echo "$select"; echo "$day"; echo "$hour"; echo "$detail"; echo "$number"; //_HS はhtmlspecialcharsと同動作 //_SS はstripslashesと同動作 ?> 同じようなことをしているんですが、片方だけうまくいかないことの 考えられる理由を教えてください… 鯖側PHPは4.3です
あけおめ〜 こんな新年の夜中から何やってんだか。 _HS()とか_SS()とかが正しく動くもんなのかこれだけじゃ判別つかんので、 受け取りPHPの1番先頭に <?php var_dump($_POST); ?> の1行を入れてくれたまい!
>>539 こんばんは、あけましておめでとうございます。
array(8) {
["name"]=> string(3) "aaa"
["mail"]=> string(11) "
[email protected] "
["phone"]=> string(10) "0301111111"
["select"]=> string(1) "1"
["day"]=> string(1) "1"
["hour"]=> string(1) "1"
["detail"]=> string(2) "頃"
["number"]=> string(2) "12" }
1行入れたところこんな、配列が発掘されました・・・
なら_HS()だの_SS()だのという変な関数がおかしいんだろ。
echo "$hoge"; ↓ echo $hoge;
544 :
434 :2006/01/01(日) 00:54:20 ID:xNWERqNS
あけましておめでとうございます。
遅レスですが…
>>460 出来ました。ありがとう。
>>464 ごめんなさい。
マニュアル読んで勉強します。
>>541 そのようでした・・・ほかのところにも使っていたんですが
それでは問題なく動作していたために、灯台下暗し・・・・でしたorz
ありがとうございました。
今夜はよく眠れそうです・・・
ちなみに_SSと_HSはこんなfunctionでした
function _hs($_val){
$_val = htmlspecialchars($_val);
return( $_val );
}
function _ss($_val){
if(get_magic_quotes_gpc()){
$_val = stripslashes($_val);
}
$_val = trim($_val);
return($_val);
}
>>544 君はマニュアルより先に、プログラミングの基礎みたいな本を読んだ方がいいと思う。
マニュアルは命令一覧とかは書いてあってもロジックの書き方は書いてないから。
547 :
434 :2006/01/01(日) 03:12:23 ID:xNWERqNS
>>546 なるほど、本ですか…
ifも他人のスクリプトのソースみて覚えたものなので…
本やサイトを見て勉強したいと思います。
ありがとうございました。
PHPでバイナリが入っている変数から何文字目から何ビット切り出す方法はありませんか? substrはバイトごとみたいで
バイト単位で切り出した上でビット演算をかけるしかないと思う。
>>548 バイナリなのか文字列なのかどっちだよw
おまえみたいな素人はしねよ。
winXP PHP5.0.5(cli)
>>548 見て何となくsubstr試したら、気になる結果が出たので質問
<?php
$str = "abc\0def";
echo substr($str, 5)."\n"; # ef
echo substr($str, 1)."\n"; # bc def
?>
表示出来ない文字列(null含む)は、空白文字として表示されるでおk?
>>551 substrと関係ないどころかPHPとすら関係ない環境依存。
PHPのglob()は、glob('**/*.php') でディレクトリを再帰的に辿ってくれないんでしょうか。 あるいは、辿ってくれるような関数はないでしょうか。
PHP 5.1.1 Released
>>550 すみません〜
「何文字目」じゃなく「何ビット目」ですね。
あと他の人が作ったスクリプトなど読んでいるとやはりビット演算で求めているみたいなんで
それでやってみます。ありがとうございました。
>>553 無いんじゃないかな
再帰的に処理させるだけだから自分で作ると良いと思う。
>>556 ありがとうございます。ないのが確認できただけでもよしとします。
今から自作してみようと思いますが、もしかしたらまたここで聞くかもしれませんが、
そのときはよろしくお願いします。
質問です。 htmlspecialcharsで変換した文字列から、変換前の文字列に戻すにはどうすればいいですか?
560 :
nobodyさん :2006/01/01(日) 12:15:48 ID:ckK+9Xqr
>>559 やっぱりそれしかないんでしょうか…
html_entity_decodeで戻せることはわかったんですけど、サポートしてるのが4.3以上だから厳しい…
>>560 4.3より古いバージョンを使ってるほうがよっぽど厳しいというかなんというか・・・
関数化しときゃいいだろ。
MacOS X 10.4 で PHP5.1.1 CLI つかってます。 ネストしたディレクトリを一気に作成しようとして <?php mkdir("hoge/geji", 0777, TRUE); ?> というプログラムを実行させると、 Warning: mkdir(): No such file or directory というエラーがでてしまいます。 PHP5からはmkdir()の第3引数をつかえば、mkdir -p 相当の動作になると思っていたのですが、勘違いですっけ?
565 :
563 :2006/01/02(月) 10:55:07 ID:???
>>564 MacOS X でやっているので、スラッシュで問題ないと思います。
<?php mkdir("hoge/geji", 0777); ?> <?php mkdir("hoge", 0777, TRUE); ?> この辺りするとどうなる?
substr関数で文字列の末尾1文字を削除することはできますか? 【 abcd 】 → 【 abc 】 【 あいうえお 】 → 【 あいうえ 】
mb_substrで-1かな
>>567 つ substr($hoge, 0, -1);
マニュアル読めばそっくりそのまま出てるんだがな。
<?php $hoge = "a-b_c.d#e"; $enc1 = urlencode($hoge); $enc2 = rawurlencode($hoge); $enc3 = base64_encode($hoge); ?> <html><body> <a href="/?<?php echo $enc1; ?>">LINK1</a><br> <a href="/?<?php echo $enc2; ?>">LINK2</a><br> <a href="/?<?php echo $enc3; ?>">LINK3</a><br> </body></html> このソースをブラウザで表示すると、IE 6では#が%23に変換されるのに、 FireFox 1.5では#のままです(urlencode系)。 #などを含む文字列をurlに埋め込む場合はbase64_encodeを使用する 方が安全なんでしょうか??
つurl_encode_in_sp
572 :
570 :2006/01/03(火) 12:54:37 ID:???
>>571 英語版マニュアルも検索しましたが、url_encode_in_spというのは
見当たらないのですが・・・。
あと、
>>13 のソースで確認しましたが、サーバでは有効でないようです。
(PHP 5.0.5です)
>>572 url_encode_in_spなんてものは知らない(ググル先生もご存知無い)けど、
鯖に文字として#を渡したい場合は、urlencodeで十分だよ。
ブラウザによって変わるつーのは単に確認ミスでしょ。
574 :
nobodyさん :2006/01/03(火) 15:24:35 ID:dg0Kk76m
ほんっとくだらない質問ですみません。PHPはPerlより簡単っていいますけど、 何%くらい簡単なんですか?概算でかまいません。
$url = parse_url($u);
$host = $url['host'];
$path = $url['path'];
$query = $url['query'];
if(isset($query)){
$query = "?".$query;
}else{
$query = "";
}
$fp = @fsockopen($host,80,$errno,$errstr,30);
$header = "GET ".$path.$query." HTTP/1.0\r\n";
$header .= "Host: ".$host."\r\n";
$header .= "User-Agent: PHP/".phpversion()."\r\n";
$header .= "\r\n";
fputs($fp,$header);
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
フォームから受け取ったURLを開くと時々、Apacheのテストページが表示されることがあるんですが正常にそのHPを表示させる方法は無いでしょうか?
環境はXREA S181鯖です。
Apacheのテストページが表示されるURLは
http://hogehoge/?id=hogeなどの場合です 。
>>574 そんな質問をするあなたにはとても難しいです><
>>574 お手軽にいじる分には30%くらい。
真面目にチューニングはじめると-10%くらい。
>>574 Perlが理解できてれば超簡単。10%くらいの時間であっさり習得。
WebProg初めてならどっちもさほど変わらん。
>>575 同じURLをブラウザで開けば正常に表示されるって意味?
前情報がすっぽ抜けすぎててわけわからん。
何%簡単って、100%簡単だとどういう状態?
>>581 氏
同じURLをプラウザで開けば正常に表示されるということです。
本来ならUser-agentを偽装した状態でそのURLのページを表示するってことです。
それが何故かApacheのテストページに・・・
585 :
563 :2006/01/03(火) 18:02:58 ID:???
>>566 どうもありがとうございます。
<?php mkdir("hoge/geji", 0777); ?>
//=> Warning: mkdir(): No such file or directory
<?php mkdir("hoge", 0777, TRUE); ?>
//=> 'hoge' というディレクトリが作成されます。
mkdir()で、せめてファイル名が表示されれば手がかりになると思うのですが。
引き続き、お助けをお願いします。
>>585 いや、前者は「hogeがないからhoge/gejiは作れへんよ」という事だろ。
hoge作ってからhoge/geji作ればいいだけの話。
>>584 portを80番から変えるとしてもフォームから受け取ったURLのポート番号を80以外で見つけるのは無理じゃないですか?
>>583 User-Agent変えられるブラウザ使って見るとどうなる?
単に相手の鯖の仕様だと思うが
>>583 つかテストページ帰ってくるときのhttpエラー番号に何番が返ってきてるんだよ。
>>589 氏
HTTP/1.1 403 Forbiddenです。
画面はApacheのテストページです。
>>588 氏
鯖の仕様だと思い他サイトにあるProxyなどPHPのfsockopenでやっていると思われるもので同じURLを試してみると通常に表示できます。
>>590 User-agentがイレギュラーだと弾くようにしてあるんじゃないの?
まず正常なシーケンスで試してから偽装なり何なりやればいいのに。
つか
>>590 は基礎的な部分がすっぽ抜けてると思われ
mojavi2でアプリを作っているのですが、ユーザのセッションのところで勉強が 足らず足止めを食らっています。 自分で勉強しますので、サンプルや参考になるドキュメントなど教えて頂けないでしょうか? 具体的につまづいている所は、mojavi2では、セッション、認証などあるのですが、誰がどの ユーザIDかをどのようにセッションで繋いでいくのかあたりの知識がなくてよくわかりません。
595 :
594 :2006/01/03(火) 23:01:01 ID:???
ちょっと調べた限りでは、 例えばDBにsessionというテーブルを作ってSIDとユーザIDに結び付けて、ユーザIDを 特定するという感じだと思うのですが、mojavi2だとどうするのかがよくわからないというか
597 :
594 :2006/01/03(火) 23:35:32 ID:???
>>596 そっちで質問するとここは語るスレだと怒られたので…
もしかして > Mojavi初心者なんですが > エスパー募集してもよろしいでしょか? って書いた人? だとしたらその後、質問はOKだけどエスパー募集はナシっていう流れだったんだけど。
>>586 元々の質問
>>563 までリカーシブに読んでやれよ。
> PHP5からはmkdir()の第3引数をつかえば、mkdir -p 相当の動作になると思っていたのですが、勘違いですっけ?
PHP5なら2階層以上のディレクトリを一発で掘れるんじゃないの?って話だろ。
http://php.s3.to/man/function.mkdir.html > bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] )
> 注意: パラメータ recursive は、 PHP 5.0.0 で追加されました。
って話だよな。俺もこのパラメータは使ったことないから正直わかんね。
PHP5のテスト環境は会社に行けばあるから正月終わるまで待ってくれれば試してみる。
他人が書いたソース読んでたら $lv_bSize = (int) ord(($lv_bytes[0]) + (ord($lv_bytes[1]) << 8) + (ord($lv_bytes[2]) << 16) + (ord($lv_bytes[3]) << 24); というのがあったんだが、こういう << ってどういう意味があるんじゃ?
601 :
586 :2006/01/04(水) 01:08:45 ID:???
>>601 >>585 のやつは
>>566 で「これやってみてくれ」って言われたからだな。
意図不明。
とりあえず
>>563 の
> <?php mkdir("hoge/geji", 0777, TRUE); ?>
> というプログラムを実行させると、
> Warning: mkdir(): No such file or directory
だけ着目してればいいんちゃう?
>>585 <?php mkdir("hoge/geji", 0777); ?>
↓
<?php mkdir("./hoge/geji", 0777); ?>
<?php mkdir("/usr/hage/hoge/geji", 0777); ?>
とかでやってみ。Windowsなら¥かDIRECTORY_SEPARATORでセパレート。
604 :
603 :2006/01/04(水) 01:33:03 ID:???
あー違う。適当に摘んでるからこれだ…
>>563 <?php mkdir("hoge/geji", 0777, TRUE); ?>
↓
<?php mkdir("./hoge/geji", 0777, TRUE); ?>
<?php mkdir("/usr/hage/hoge/geji", 0777, TRUE); ?>
だな
605 :
600 :2006/01/04(水) 01:34:26 ID:???
$_SERVER['PHP_SELF']って偽装できますか?
スパムメールを送るんですか?
ちがう。 作ったスクリプトの<form >で結構使ってるから気になっただけだよ。 $_SERVER['QUERY_STRING']とかもどうでしょうか。 鯖がやられてなければ大丈夫だと思いますけど どうでしょうか。
偽装する意味はあるの?
偽装される確率はどうなの?
偽装される確立を議論するなんて何考えてるの?
>>606 「偽装される」ってのが何を意味しているかは知らないけど、
echo $_SERVER['PHP_SELF];
とか
echo $_SERVER['QUERY_STRING'];
とかすると、クロスサイトスクリプティング脆弱性が出来上がるよ。
'
>>610 セキュリティを考える場合確率は関係ないだろ。
613 :
612 :2006/01/04(水) 15:27:07 ID:???
echo $_SERVER['PHP_SELF']; ねorz
なんで echo $_SERVER['PHP_SELF]; がクロスサイトスクリプティングになるの
>>614 パスインフォが通るサーバ設定だと
/hoge.php/">
とかを$_SERVER['PHP_SELF']に入れられるから。
入力側を偽装する意味がわからん・・・ action属性を誤魔化すぐらいならwebサーバに直接叩きにいくだろうし。
>>616 クロスサイトスクリプティングをしらないのか!?
618 :
nobodyさん :2006/01/04(水) 15:51:58 ID:LqFUITlR
class Hoge{ var $hoge; } と、var宣言するのとしないのとで、機能的な違いは何かありますか?
Hoge->hogeで参照できん
俺もよく$_SERVER['PHP_SELF']つかうけど、 チェックボックスと、プルダウン選択だけなら問題ないよね? セキュリティ考慮は全然してなかったからそろそろ考えないといかんな・・・
トラックバック送るのまんどくせ
キーワードから関連するトラックバックURLやらpingurlやらを 自動で収集するプログラムないかな?
627 :
618 :2006/01/04(水) 16:42:38 ID:LqFUITlR
>>619 宣言しなくても、値を入れれば参照できますよね?
>>627 public、protected、privateとか設定汁
ooするならあったほうがよし。
pearとpeclってどういう関係なんでしょう? 久しぶりにWindowsにPHP 5.1.1をインストールしてgo-pear.batで PEARをインストールしたのですが、pear.batは拡張子の後ろに [_old]が付いていました。[_old]をとるとUNIX上と同じくpearコマンドが 使えますが、もう一つあるpecl.batを使うべきなんでしょうか? pecl list-all と pear list-all した結果では表示される内容も異なるのですが このままpearコマンドを使用しても良いのでしょうか???
>>629 PEARはPHPで書かれた拡張
PECLはバイナリ形式の拡張
peclってどう読んでる? pearはペアで間違いないと思うのだけど
632 :
629 :2006/01/04(水) 17:16:41 ID:???
>>630 速レスありがとうございます。
ではpearは推奨されないということではないのですね。
安心しました。
>>631 "pick・le"と読んでます。
ピクルス(漬物)だったかと。
>>632 中身違うがな。推奨されないとかだれもいっとらんがな。
phpとmysql使うつもりですが扱う言語を気にする必要はないですよね? てかphpはutf8扱えるんですよね?
>>636 >扱う言語を気にする必要はないですよね?
ある
>てかphpはutf8扱えるんですよね?
別にphpに限らずperlでもrubyでも扱える。
PHPとMySQLでそれぞれUTF-8使ってれば 言語(日本語でもロシア語でもアラビア語でも)は 気にする必要ないですよね、って質問じゃなかったのか
だね。
641 :
nobodyさん :2006/01/05(木) 10:53:48 ID:JFblkuhc
PHP4.3環境
日本語を含むヘッダーでメール送信をしたいのですが、
MACOSX10.4の付属メーラーで受信したとき送信者の日本語部分が文字化けしてしまいます。
本文、件名は文字化けしません。
WINでは問題ありませんでした。
まだ勉強中で、参考書の通りに書いているようなレベルですので
根本的に解っていないのかも知れませんが、
$header = "From: ROBO-ONE事務局 <
[email protected] >"として
メッセージや件名はmb_convert_encodingでエンコードしていたので
同じように
$header = mb_convert_encoding($header,"EUC-JP","auto")
と書いても文字化けしてしまい
$header = mb_encode_mimeheader($header,"ISO-2022-JP")
では送信すらされませんでした。
OSX10.4環境でも問題なく表示するにはどのようにしたらよいのでしょうか。
642 :
nobodyさん :2006/01/05(木) 11:40:43 ID:GYuqexB9
MySQLのtextフィールドに5%とinsertできるけど、 それをphpで表示しようとすると printfでエラーとなってしまう。 %が問題だとおもうのだけど、いい方法ない?
644 :
642 :2006/01/05(木) 12:34:14 ID:GYuqexB9
646 :
nobodyさん :2006/01/05(木) 17:07:24 ID:Bm50yWip
perlのgrep関数を使いたいときって、 phpではどうやってますか? foreachで回してifで判定して新配列にpushしかないんですかね。
648 :
646 :2006/01/05(木) 17:38:41 ID:???
すいません、自己解決しました。
array_filterで何とかなりそうです。
>>647 ありがとうございます。
正規表現のときはpreg_grepなんですね。
array_grepにすればいいのに・・・。
Perl互換の正規表現をコンパイルオプションでON/OFFしたときに ごっそり利用可否が切り替わるんだから、関数名で識別できた方が分かりやすいよ
2ちゃんのトリップはcrypt関数を使うとおもうのですが これに何を与えると2ちゃんと同じトリップになりますか?
FOXに聞け
ググればすぐでてくるのに
function Trip($name){ if(strpos($name,"#")){ $names = explode("#", $name); $name = $names[0]; $passwd = $names[1]; $salt = substr($passwd."H.", 1, 2); $salt = ereg_replace("[^\.-z]", "\.", $salt); $salt = ereg_replace(":;<=>?@[\\]^_`", "ABCDEFGabcdefg", $salt); $trip = substr(crypt($passwd, $salt),-10); $name = "$name</b> ◆$trip <b>"; } return $name; } Trip関数。
>>651 でもプログラムを作ったのはひろゆき氏じゃなくて?
>>653 見難い。
function Trip($name = '名無しさん'){
list($name, $passwd) = explode('#', $name, 2);
if($passwd) {
$salt = substr($passwd."H.", 1, 2);
$salt = ereg_replace("[^\.-z]", "\.", $salt);
$salt = ereg_replace(":;<=>?@[\\]^_`", "ABCDEFGabcdefg", $salt);
$trip = substr(crypt($passwd, $salt),-10);
$name = $name.'</b> ◆'.$trip.' <b>';
}
return $name;
}
PEARのHTML_QuickForm QuickForm.phpのコードなのだが、エラーを吐く この中の$thisってどういうこと? function accept(&$renderer) { $renderer->startForm($this); foreach (array_keys($this->_elements) as $key) { $element =& $this->_elements[$key]; $elementName = $element->getName(); $required = ($this->isElementRequired($elementName) && !$element->isFrozen()); $error = $this->getElementError($elementName); $element->accept($renderer, $required, $error); } $renderer->finishForm($this); } // end func accept
>>656 自己解決しますた
ただ$rendererの中身がないからエラーとなっていただけでした
すまそ
>>624 pear install Services_Trackback
とかしてもDLできないんだけどなんで?
というかlist-allしてもサービス関連のやつ出てこないし。
自動で探してきてくれるもんじゃなかったんだっけ。
>>658 α版だからじゃないか?
pear install Services_Trackback-alpha
としてみたらどうなる?
POSTするものを複数変数にいれているんですが、 $a=$_POST['a'];$b=$_POST['b'];... 掲示板のスクリプトを見ると、このような書き方はしていないようです。 しかしどのように書いたらいいかわからないんですけど、 スマートに書く方法ありませんでしょうか?
ユーザ関数の返値で$test[color]と$test[size]と$test[depth]の3つを返したい場合はどうすればいいですか?
2006-01-06T13:13:00+09:00 という形式を Y-m-d H:i:s という形式に変換するにはどうすればいいでしょうか…?
>>660 register_globals = on というオチか?
>>661 return $test; // $test:Array
>>663 660はextractでいいんじゃねーの?
>>661 function a() {
return array("color"=>$color,"size"=>$size,"depth"=>$depth);
}
$test = a();
スマートに書かなくても動けばいいと思う。
富豪的プログラミング
>>667 スパゲッティが大好きで毎日食べてると見た。
セッションで質問ですが $name = "aaa bbb"; $_SESSION['name'] = $name; $name = $_SESSION['name']; こんな感じで登録してから中身を取り出すと$nameがaaaになってしまいます。 これはスペース切られてるとおもうんですが、スペースごと登録する方法を教えてください
あ、無理なんですか・・・ ちなみに、色々HPをみていると $_SESSION['name'] = $name; ↑みたいにシングルクォーテーションを使ってたり $_SESSION["name"] = $name; ダブルクォーテーションを使ってたりするのですが これの違いってなんでしょうか?
PHP初心者で本を片手に、ダウンロードしてきた プログラムをテストしたりしているのですが、 (初心者的に)理解できない振る舞いがあったので 誰か教えていただけないかと… サーバ:ロリポップのレンタルサーバ PHPのバージョン:4.3.11 スクリプトのエンコーディング:SJIS という環境なんですが、 var $str1 = "テスト"; $str2 はフォームからテストと入力すると ereg($str1, $str2) ⇒ 偽 になるので、はまっていました。 色々ためしたら、下の2つの書き方では真になるのが 判明したのですが、その理由がよくわかりません。 mb_ereg($str1, $str2) ⇒ 真 ereg($this->str1, $str2) ⇒ 真 mb_eregで正しく動くようになったのは 日本語の処理絡みなんだと思うのですが、 $this->str1にしたら、eregのままでも だいじょうぶになったのは、なぜなんでしょうか…。
>>674 単なる文字列の表現の違い。つかシングルとダブルの違いわかってるよな?
>>641 受信したメールのFrom:部分のソース貼ってみれば?
これだけの情報じゃ、原因が特定できない。
他で起こらないからMail.appのせいっぽいけど。
>>676 PHPでの違いは知らね、Cなら文字と文字列だがな。
URLをフォームに入力してfopenなどで開いてfgetsなどで配列に一行ずつ格納した場合、<a href="
http:// 〜/">の
http:// 〜/を変数に格納するにはどうすればいいんでしょうか。
正規表現で取り出すのがいいと思うけど、
<a href="
http:// 〜/">って形に絶対なっている(ダブルクォートされている)なら、
$array = explode("\"", $query);
$result = $array[1];
みたいな感じでいいかなぁ。
#変数名は適当、$queryは<a href="
http:// 〜/">が入ってるもの。
683 :
681 :2006/01/06(金) 17:48:18 ID:???
あー意味取り違えました。 この場合、explodeは使えないですね。 正規表現がいいとはおもいますが、そのURLによってはアンカータグの書式が違うので、 結構難しいかもです。 <a href="URL">TEXT</a> <a href=URL>TEXT</a> <a href="URL" MOREATTR="MOREVALUE">TEXT</a> などなど。
>>682 その前の奴が偉そうに言ってるからじゃね?
>>680 >URLをフォームに入力してfopenなどで開いてfgetsなどで配列に一行ずつ格納した場合
の流れの繋がりが端折り過ぎで良く判らんが。
><a href="
http:// 〜/">の
http:// 〜/を変数に格納するには
正規表現関数を使うのが一般的だと思う。
preg_match('/<a href="([^"]*)/i',$line,$ary); var_dump($ary);
とかでどう?
>>683 ><a href=URL>TEXT</a>
これって、ありなの?
>>685 683じゃないけれど、"を省略して書いている記述はママある。
もちろんHTML的には正しくないけど、
たいていのブラウザはちゃんと認識する。
687 :
軟式PHP :2006/01/06(金) 18:30:24 ID:???
DreamWeaverとかで作ると""で括らないタグを生成するときがあるからイラつくよな。
>>685 HTML4(てかSGMLかな)の仕様では、特定の文字のみで構成される場合は省略可能な場合もある。
URLに使える文字より範囲が狭いので、" か ' を付けておく方が無難。
689 :
nobodyさん :2006/01/06(金) 18:54:36 ID:Zg0ssy+R
$a = array(0, 1, 2); $b = array(0=>0, 1=>1, 2=>2); $aと$bを見分ける方法はありますか?
変数名以外で
>>691 何がしたいのかよくわからんが、中身的には一緒だから
見分けも何もないよ。
見分ける必要があるのなら、最初から見分けが付くように作りましょう。
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING inはどうやったら解決できる?
syntax error は全体を見ないとな まーがんばれ どこかが間違っている
>>694 しょぼいエラーだしてる癖に態度がでかいな。
単なるコーディングミスだ。よくみれ
単純なミスほど探すのに苦労するってことない?
そうやって苦労を重ねた分だけ人は強くなる
>>694 PHPの構文を理解するエディタ(PHP用のエディタ・開発環境スレもあった希ガス)を使うと、
パースエラーはほとんど防げるかと。
そういうものを利用できない場合は、
・じっくりソースを見る
・show_source()等を使って色がおかしい所を探す。
・エラーが出るあたりを適当に削除しながら、エラーになる/ならないポイントを探す。
たまにfunction名のつけかたで文句言われるけど、IDEは便利だね。
>>685 氏
配列を一行一行読み込んで↓
if(preg_match('/<a href="([^"]*)/i',$line[1],$link))
やってるんですが参照した$line[1]に$linkを挿入して表示したいのですがどうしてもArrayになってしまいます。
702 :
nobodyさん :2006/01/06(金) 23:15:36 ID:oWzCmWic
$list=file("./ldat.log"); $listr=file("./sdat.log"); foreach($listr as $listrs){ list($s0,$s1,$s2,$s3,$s4)=explode("<>",$listrs); foreach($list as $lines){ list($p0,$p1,$p2,$p3,$p4,$p5,$p6,$p7)=explode("<>",$lines); if($s0==$p0){処理が入ります} } } のような2つのファイルのp0とs0が同じ値の場合のみ処理を実行するようにしたいのですが このままだと何も表示されないです。解決の手段をどなた様かお願い致します。
>>702 echoするなりdump取るなりして中身を確認してみては?
704 :
nobodyさん :2006/01/06(金) 23:42:04 ID:wWI7IcSM
外部JavaScriptをHTMLファイルに読み込む感覚で、HTMLファイルとは別に作成したPHPファイルを複数のHTMLファイルに読み込んで実行することはできますか?
>>704 PHPファイルに外部のPHPファイルを読み込ませて実行させることはできる。
HTMLファイルに外部のPHPファイルを読み込ませても、(通常は)サーバ側で処理してくれないので実行させることはできない。
やりたいことは当然前者だと思うので、詳しくはマニュアルでincludeなりrequireなりを調べるがよろし。
>>702 $listrの行の数だけ$listの行を毎回explodeし直しとは糞重そうな書き方だな。
まー、それと動かないのは全然別問題だからいいけどさ。
ifの直前で$s0と$p0をvar_dumpでもしてみりゃ原因は分かるでしょ。
PHP+MySQLでPHPのソースはUTF8でプログラミングしています。 MySQLのデータの中身もUTF8にするべきと思うのですが、ブラウザから来るデータは 全てUTF8に一回変換してからデータベースに入れなくてはいけない という認識であっていますでしょうか? MySQLは、4.0系です。
別にデータの中身をUTF-8にした方がいい理由なんて全然ないと思うけど。 ちなみに表示されるHTMLもUTF-8なの?だったら変換は無くてもいいんじゃない? たまに変なブラウザもあるから変換した方がいいけど。
>>708 >ブラウザから来るデータは全てUTF8に一回変換してから
>データベースに入れなくてはいけない
いや、別に飛んできたままでも良いよ。
それがMySQLでサポートされてるエンコードならば。
仮にサポートされてなくてもbinaryとして扱っても良い
"文字"として扱えないデメリットがあるけど。
でも、現状でもスクリプトの中で扱いやすいように
ブラウザから来るデータをUTF-8に手動なり自動で
変換してるんじゃないの?ならばそのままUTF-8で
データべースに突っ込んだ方が良いよね。
>>709 そうですね。
変換しなくて良さそうなのでUTF8がいいのかなという位に考えてました。
> ちなみに表示されるHTMLもUTF-8なの?だったら変換は無くてもいいんじゃない?
> たまに変なブラウザもあるから変換した方がいいけど。
これは出力という意味でしょうか?出力は、UTF8と携帯用にSJISを想定しています。
入力は、色んな文字コードで送ってくると思われるので、どちらにしても統一の
文字コードに変換する必要があるような気がするのですが、自信がありません。
perlの掲示板ではそんな作業をしたと思いますが、
PHP+MySQLではどうかが良くわからないのです…
>>711 どういう風にデータをいじるのか分からないからなんとも言えないけど、
統一しておいた方が何かと楽でしょ。いちいち変換するオーバーヘッドが
惜しいってほどパフォーマンス要求がシビアなら別だけど。
>>702 つかとりあえず配列につっこみなさい。
見にくいし、凡ミスを誘発するコードの典型だぞ。
>>701 685 じゃないが、意味がわかんね
$link にマッチ結果が配列で入るのが当然であって、
$line[1] になんか何も代入されないだろ?
みなさんデバッグ等の環境は何使ってらっしゃるんでしょうか? 当方今までずっと サーバサイドでEmacs直接編集→Apacheの公開用ディレクトリにコピー→直接WEBから参照 でやってたんですが、 さすがになにかしらマトモなデバッガや開発環境使った方がいいかなと思い始めまして… Eclipse+dbg辺りかなぁと思っているのですが使用されてる方のコメント等聞けたらな、と
717 :
715 :2006/01/07(土) 11:36:33 ID:???
>>716 ありがとうございます
統合環境スレ辺りでログ漁りしてみます
デバッガで追う前にテストちゃんとやれと思うんだが、どうか
719 :
nobodyさん :2006/01/07(土) 12:21:51 ID:jsajv2SX
CSVファイルをダウンロードさせるプログラムを書いたんですが、 テスト環境ではうまく動いたのに本番環境では動きませんでした。 [テスト環境] Fedora Core 3 Apache 1.3.33 PHP 4.3.11/Apacheモジュールとして組込 [本番環境] Redhat Enterprise Linux 3 Apache 2.0.46 PHP 4.3.2/Apache2Filterとして組込 レスポンスヘッダを見てみると、なぜか本番環境ではConnectionヘッダが常にcloseだったので、 これが原因かと思ってhttpd.confでKeepAliveディレクティブをOnにしました。 それでもConnection: closeになってしまうので、 PHP側でheader("Connection: Keep-Alive/r/n");と書いたんですが、 それでも後からcloseが追加されてConnection: Keep-Alive, closeみたいになってしまいます。 他のhtmlやcssファイルなどの静的コンテンツも常にConnection: closeで返ってきます。 httpd.confのHeaderディレクティブで書き換えても同様なので、 何かが後から強制的に書き換えているように思えます。 何か対応策をご存知の方、ご教示頂ければと思います。
>>719 ブラウザ側で Persistent Connection が無効になっていると
当然 Apache は Keep-Alive をしようとしない。
ブラウザ側の設定はどうなってるのか確かめた?
721 :
nobodyさん :2006/01/07(土) 14:03:57 ID:TbKqhVyi
配列の最後に要素を追加したいのですが例えばhoge => hello というデータを入れたい場合どうしたらよいのでしょうか? array_pushだと値だけなら格納できますがキーまで入れることできないみたいなので・・。
キーを指定している段階で「最後」という概念から外れると思うのだが。
723 :
nobodyさん :2006/01/07(土) 14:35:18 ID:TbKqhVyi
>>722 ・あれ・・
配列の認識自体間違っていたら教えてください。
例えば上の値を最初に入れたら
配列の中は 0 => hello,hoge=>hello でこれはあくまで1つの箱に入っているんですよね?
ばかだなー 0 => helloなんてどっからでてきたんだ。 つーかふつうに$array["hoge"] = "hello"ってやれば「最後」に入るし。
hoge => hello という記述自体が hoge がキーで hello が値という
意味なので、「上の値を最初に入れる」という段階でおかしい。
あと
>>724 の言う「最後」は PHP 独自のことなので気をつけておくこと。
他の言語では、ハッシュ(連想配列)に順番なんてものはない。
他人のサイトを紹介するサイト作ってて、他人のページがいつ更新されたかを調べるプログラム作りたいんだけど、どうすればいいの? filemtime()で取得出来るのは、自分のサーバーにある物だけらしいし・・・ 教えて下さい。
>>726 実際に箱を開けて見なきゃ猫が生きているかどうか分からないわけで。。
簡易チェックであれば、HTTPヘッダを調べればよいかと。
>>727 返事トンクス
そのHTTPヘッダを調べる簡易チェックでも更新日とか分かりますか?
また、どのようにすればいいのでしょうか?
ググってるのですが、なかなかページが見つからなくて・・・
$req = HEAD ".$url." HTTP/1.0\r\n"; $req .= "Host: ".$host."\r\n"; $fp = @fsockopen($host, "80", $errno, $errstr, "30"); if(!$fp) { $res .= "Error: ".$errstr." (".$errno.")"; } else { fputs($fp, $req); while (!feof($fp)) { $res .= fgets($fp, 164000); } fclose($fp); } ヒントみたいなもの。
あ、HTTPヘッダからは、htmlとかの静的ファイルしかできませんよ、 (CGI/PHPの類は無理です、と。)
ありがとです! 参考にして頑張ってみます!
PHPを使用していて 2つのサーバーでセッションの共有がしたいのですが 何かいい方法ありませんでしょうか?
>>732 ・DBに格納してDBMSから共有
・ファイルに格納してNFSとかでファイル共有
734 :
719 :2006/01/07(土) 18:41:48 ID:jsajv2SX
>>720 有効になっているので、サーバ側に問題があるんじゃないかと考えています。
テストサーバでは問題なくKeep-Aliveを返すので、
PHPがhandler型じゃなくてfilter型なのも一因となっている可能性ってあるんでしょうか?
apache2 のテスト環境は用意できないの?
736 :
719 :2006/01/07(土) 19:02:51 ID:jsajv2SX
>>735 確かにそうすれば良かったんですが、
工数が少なかったため既存のテスト環境を利用しました。
本番と同一環境であれば今更困ることはなかったと承知しています。
ところで、csvファイルののダウンロードが出来ない件と、Keep-Aliveできないのとは 関係ないと思うけど。
PHPはWeb特化言語らしいですが、 ブラウザを通すことなく、 Windows用のプログラムを作ったりすることは可能なのでしょうか?
>>738 ローカルでwebサーバも起動すればできるけど
PATH通してperl代わりに文章整形につかってる curlとか使って通信するのも便利
>>733 便乗質問
外部のサーバと、だとどうだろ。
やっぱ両サーバからDBアクセスできるようにしておいて、かなぁ…
>>738 php-gtkとかWinBinderとかがあるよ。
>>742 外部鯖とセッション共有って、、、なんて恐ろしい子!
>>733 ありがd
共有のDBにセッション情報を入れるという事でOK?
>>741 Perl 代わりにはすげー使いにくいと思うがなぁ
>>745 mb系関数をメインで使うなら案外便利かもよ
mb_* はバギーだけどね
エンコ関係はバギーだけど、編集関係はそんなこともないと思ってたけど違う?
749 :
nobodyさん :2006/01/08(日) 00:52:50 ID:Gpu+sfrF
初歩的な質問ですいません。 PHPでメールフォームを作成予定です。 mb_send_mailなどで以前メールフォームを作成した経験があります。 ただ今回作成予定のレンタルサーバのサポートに下記のような記述がありました。 >PHPはCGIモードでインストールされている為、モジュール特化の機能は利用出来ません。 これってどのような意味なのでしょうか? 以前作成したレンタルサーバでは拡張子は.phpで実行できました。 >CGIモード とは拡張子を.cgiで実行する場合のことなのでしょうか? また「モジュール特化の機能」とはどのような機能なのでしょうか?
>>749 >>PHPはCGIモードでインストールされている為、モジュール特化の機能は利用出来ません。
>これってどのような意味なのでしょうか?
主にこんな機能
http://www.php.net/manual/ja/ref.apache.php あとCGI版にsuEXECなんかを組み合わせてると
また別に違いが出てくるけど、それは機能の違いというより機構による差異。
>CGIモード
とは拡張子を.cgiで実行する場合のことなのでしょうか?
これは関係ない。拡張子による動作の割り当てはWebサーバの設定の話であって
PHPがApacheモジュールか、CGI版かには関わらない。
751 :
nobodyさん :2006/01/08(日) 01:31:01 ID:Gpu+sfrF
>>750 ありがとうございます。
mb_send_mailなどは使えるようですね。
またいろいろ調べてみたら、ソースの頭に
#! /usr/local/bin/php
などのパスが必要な場合などあるなどを見ました。
以前のレンタルサーバではサンプルソースなど色々
情報が載っていたので初心者の私でもなんとかなったんですが
今回のレンタルサーバにはPHPは使用可能。
とはあるですが、上記のようなパスの設定が必要なのか?パーミッションの設定は?
などは特に説明がありません。
基本を勉強しないとダメですね・・
とにかく
>>750 さん
ありがとうございます。
HTTPが理解できないやつはPEARを使えばいいと思う。
>>752 長距離パスすぎてどれのことか分からん。レスアンカーくらいつけてくれ。
携帯向けにjpgファイルをリサイズして出力するスクリプトを書いています。 指定したサイズより大きい画像をリサイズする処理は完成しているのですが、 それ以下のサイズの画像もimagejpeg()の段階で画像が劣化してしまいます。 何かうまく回避する方法はないでしょうか?
>>754 劣化させなたくなかったらリサイズしなければいいじゃない
>>754 サイズを判定して処理不要ならそのまま出力すれば?
757 :
754 :2006/01/08(日) 05:20:48 ID:???
>755,756 ありがとうございます。 サイズ判定はやっています。 ブラウザにjpgを出力するにはimagejpeg()使う以外に無いですよね? 私の勘違いでしょうか? >そのまま出力する とは画像ファイルにリダイレクトするということでしょうか? なるべくなら、それは避けたいのです。
んー。readfile()とかfpassthru()とかfread()+fwrite()とか。 バイナリで出力できるやつならなんだって構わないと思うんだけど。
759 :
754 :2006/01/08(日) 05:48:57 ID:???
ありがとうございます。解決できそうです。 画像処理にばかり気を取られて頭が固くなってました。
>>748 mb_ereg ってこと?
まぁ出所違うからね。そういう判断もできるかも。
ハッスルサーバーかりて、 <html> <head> <title>SaveCookie</title> <?php mb_language('Japanese'); mb_detect_order('sjis-win,eucjp-win'); mb_internal_encoding("UTF-8"); ?> </head> <body> <?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?> SAVED COOKIE "email" </body> </html> を表示してみたところ下のようなメッセージが返ってきたなり。 Warning: Cannot modify header information - headers already sent by (output started at /home/happylife/public/www/cookie_rec.php:4) in /home/happylife/public/www/cookie_rec.php on line 13 SAVED COOKIE "email" セキュリティの設定をすべてのクッキーを有効にしても、 ファイヤーウオールを無効にしてもこのメッセージが出続けます。 どうしたら良いのでしょう?
[俺サマ訳] 警告: (HTTP)ヘッダー情報を修正することができません - だって、ヘッダーは既に送信されていたんだもん。
>>761 setcookieは、"<?php"の前に何かがあっては送信できませんし、
setcookieより前にecho等があっても送信できません。
"<?php"の前は、たとえ空行でも、入れちゃだめよ。
>762,763 ありがとうございます。 動きました♪
$fp = fopen("hoge.txt", "r+"); flock($fp, LOCK_EX); こんな感じでファイルロックを行うと、ファイルをオープンしてからロックするまでの間に他のプロセスがファイルをオープンすることはないのでしょうか?
>>765 >ファイルをオープンしてからロックするまでの間
どんな一瞬だよw
DBに頼りすぎてファイルロックの基礎も分かってない素人が多すぎだよね >PHP開発者
オープンされてもロックが取得できなきゃいい というか、意外とまともに説明されてることって少なくね? < flock
770 :
765 :2006/01/08(日) 23:30:43 ID:???
hoge.txtを毎回書き換える場合(カウンターなど)これだとまずいですよね。 ロック用のファイルを作っておいてそれをロックするようにすればいいでしょうか?
'w' で fopen しちゃうとアウトだね
強固なflockのサンプルコード ↓よろ
>>770 パターン的には2通り。
1つは複数のプロセスでopenはできることを前提に、flockが解除されて
順番が回ってきたプロセスは「まずrewindして中身を読み直す」ことから始める。
ファイルのオープンモードがw系以外であることが条件。
もう1つは対象ファイル以外にロック専用のファイルを用意しといて
それがロック中は以降の処理全体を止める。いわゆるプロセスロック。
ファイルをいきなり消しちゃう場合や、複数のファイルを扱う場合などはこれ。
この種の「ロックの粒度」の話はRDBMSの試験にも出ますよw
まぁ細かいこと考えずに安心したいっつーんならロックファイルを用意 するのがいちばんやね。ファイルが増えて邪魔くさいって欠点はあるけど
775 :
765 :2006/01/09(月) 00:08:16 ID:???
>>773 rewindするとオープンした後に書き換えられたデータも読めるんですか?
1分置きにクーロンで破損検査すれば解決
rewind しなくても読めるよ rewind が何をするものなのか考えてみよう
他のプロセスに書き換えられた場合ポインタの位置がずれているからですか。
780 :
php developer teams :2006/01/09(月) 13:07:16 ID:r4dXJ2hk
DBに書き込む際、改行(enterでの)が \n となってしまい、PHPで実際に表示してみると改行できていないのです。 どうすれば改行できるようになるのでしょうか?
file()を使えば、1行目を[0]に、2行目を[1]に入れることが出来ますが、 [0]にfile()で読み込んだソース全部を入れることは出来ないんでしょうか?
>>782 file_get_contents使えよ
>>782 >>783 のでいいと思うがPHPのバージョンが古くて(4.2.x以前)使えない場合は
join("",file(〜))で同じことができる。(が、file_get_contents()の方が速い)
>>780 それ、別にDB関係ないし。
改行と<br>の区別くらいつけろ。
マニュアルにもあるけど fopen して fread( filehandle, filesize( filename ) ) って手もあるな
a は1バイトですが、 あ は3バイトですか?
あ は あ は
>>788 「あ」もそうですが「a」も 文字エンコードによって変わります。
>>790 あっ、なるほど
謎が解けました。ありがとです
792 :
nobodyさん :2006/01/09(月) 22:34:46 ID:+5WHmeqf
もし\が2個以上重なっていたら(\\) ひとつ省き\と、又\\\\となっていたら\\\を省きひとつにと\がひとつ以上の場合はすべてひとつに変換するようにしたいのですがうまくPHPでプログラムを組めません。 どなたか簡単なプログラムを作成してください。お願いします。
>>792 preg_replaceで正規表現を使うのが筋だが、嫌なら
$str = stripslashes($str); とか
つか少し頭使うなり調べるなりせんと上達しないよ?
みなさんはワンタイムチケットの実装をどうしてますか? HTML_QuickFormを利用していますが、なんか面倒で。
795 :
723 :2006/01/10(火) 12:55:21 ID:s2ru7jHC
自宅鯖ではなく、レンタルサーバを利用しています。 一つのディレクトリに納まっている複数のファイルをまとめ、一つのファイルにし、 これを圧縮するにはどうしたら良いのでしょうか。 圧縮はさておきまとめるというとtarを使うと思うのですが、 $aaa = system('tar -cf ./after.tar ./before', $bbb); なんてことをしてもできないようなのです。 system関数が使えないとなると、他に手はないでしょうか。
レンタルサーバー、レンタルサーバー言うやつは、どこか晒せよ。 特にさくらの鯖とか、CGI版だって知らないで聞いてるアホも多いんだから。 「system関数が使えない」ってのは、「関数が」使えないの? それとも、`ls`なんかは出来るわけ? パスが通ってない可能性も踏まえ、which tarしたフルパスにするとかしてみれ。 tarが使えないようになっている以外なら多分出来るはずだ。
798 :
675 :2006/01/10(火) 15:23:09 ID:???
>>675 簡単に分からない問題なのか、それとも初歩過ぎてレスがつかないのか…
要素が大杉 var $str1 なんだから本来 $str1 と比較してマッチするはずがない ereg に日本語を突っ込んでも信用できない スクリプトを sjis で書いてると他にもおかしなこと起きやすい 以上から、たぶん晒した以外のところもかなりおかしなことになってるはず 結論としてはもっと勉強してくれ
800 :
nobodyさん :2006/01/10(火) 16:04:59 ID:hzjvsGhO
$2cht = preg_replace("/\\\\+\/","",$2ch);こういった使い方は可能でしょうか? \が1つ以上ある場合はすべて消去したいのですがエラーが表示され機能してくれません。
>>798 判断に迷う質問だから放置してた。
ふつーに考えたら$str1と$this->str1を入れ替えるなんてこと自体がありえないので、
一体何をやろうとして何に引っかかってしまったんだか想像がつかない感じ。
結論:かなり大ボケかましてない?
というか多分、$this->str1は中身が空っぽになってて、
それで何にでもマッチしちゃうだけじゃないの?という気がする。
>>800 "/\\\\+\/" は "/\\\\+/" の間違いじゃないのか。
最後の \ は何に対しての \ なんだよ。
>>798 ありえないというか意味不明でレスのつけようがない
<?php
class test {
var $str1 = "テスト";
function view($str1) {
echo "\$this->str1=".$this->str1;
echo "<br>\n";
echo "\$str1=".$str1;
}
}
$a = new test;
$a->view("ホゲ");
?>
804 :
nobodyさん :2006/01/10(火) 16:55:37 ID:Gn5rV4CT
mysql_escape_stringでエスケープした文字を元に戻す関数とかありますか? \と入力すると\\になったりして入力と異なるのでそれを直したいです。
>>797 申し訳ございません。XREAにてmod_phpで動かしています。
仰るとおり $aaa = system('which tar', $bbb); を試みましたが、
>>796 のコード同様、$bbbには127という値が入っているのみでした。
>>804 入力元をコピーして残しとけば?
普通、mysql_escape_stringなんてDBに書き込む直前以外には実行しないだろー
マニュアルを読むんだ
>>808 Pearなどを使うのは初めてでしたが、適当にいじってるうちに成功しました。
ありがとうございました。
811 :
nobodyさん :2006/01/10(火) 21:57:13 ID:Gn5rV4CT
Wikiを入れる
813 :
nobodyさん :2006/01/10(火) 22:20:29 ID:V6LwtE82
Winの最新IEで試したのですが、 setcookie()する場合、適用ドメインを「.example.com」で発行すると、 それを「hoge.example.com」で上書きすることはできないんですね? 逆は可能なようですが・・・。 この仕様?って普通の感覚とは逆な気がするのですが、どんなもんでしょう?
814 :
813 :2006/01/10(火) 22:27:18 ID:???
どうもPHPの方が変な気がしてきました。 ブラウザが、「.example.com」と「hoge.example.com」 でクッキーを持っていると、 PHPの$_COOKIEは「.example.com」の方を優先して読み込むようです。
PHPでブラウザが送ってきたHTTPヘッダを見ることはできますか?
module版なら、apache_request_headers()で取得できるよ。
>>816 どうもありがとう!!
>>814-815 の続きですが、IEで調べたところ、
「example.com」と「hoge.example.com」で同じ名前のCookieがある時、
hoge.example.com にアクセスすると、
IEは、「example.com」のクッキー、「hoge.example.com」のクッキーの
順番で同時に送信してくるようです。
これをPHPの$_COOKIE['XXX']で取得すると、「example.com」の方の
クッキーが返されます。
広域指定が局所指定よりも優先されているわけですが、
これってクッキーの仕様に合致しているのかなぁ…。
PHPって、どのくらい勉強すればいいんかねぇ。
819 :
nobodyさん :2006/01/11(水) 00:02:19 ID:fOyKkotG
>>801 >>803 レスありがとうございます。
確かにちょっと状況が説明不足ですね。
実は、レッツPHP!にあるTree BBS
http://php.s3.to/bbs/bbs6.php に書き込み禁止処理を追加しようと思ったのです。
$comに納められたコメントの内容にNGワードが
入っていたらエラーが出るようにしようとしました。
それで最初
if(eregi($bad_word, $com))
としたのですが、うまくいかなくて
if(eregi($this->bad_word, $com))
または
if(mb_eregi($bad_word, $com))
にしたら、うまく動いたんです。ちゃんと動いているので
中身空っぽになって何でもマッチしているわけではないようです。
なお、このif分を追加したのは、function add_chkの中の
ifがずらっと並んでいるところです。
最初からスクリプト中にある
if($com=="" || ereg("^( | |[¥r¥n])*$",$com))
というところは、そのままで全角スペースにちゃんと
マッチしているので、ますますわけがわかないのです。
なので、もしかしたら文字エンコーディングに起因する問題?とか
いろいろ考えたのですがよくわかりません…。
>>819 スクリプトの先頭に
ini_set("display_errors", 1);
error_reporting(E_ALL);
と書け。
if(mb_eregi($bad_word, $com))
は$bad_wordが未定義なのにうまくいくはずない。
>>804 エスパー的には、mysql_escape_stringの問題ではなく、
マジッククォートの問題だと思う。
つ php.ini
初心者は問題の本質を捕らえる努力と伝える努力をすべきだと思う。
ま、それができたら最初からバグ出してないと思うがなw
for ($i = 0; $i < $max; $i++) より for ($i = $max; $i > 0; $i--) の方が早いって聞いたんですけどマジですか?
早いのは for($i = $max; $i ; -- $i) じゃないのか? でも微々たるもんだと思うけどね。
826 :
824 :2006/01/11(水) 12:59:20 ID:???
試してみた。 1.for($i = 0; $i < $max; $i ++) {print ""} と 2.for($i = $max; $i > 0; $i --) {print ""} と 3.for($i = $max; $i; -- $i) {print ""} をそれぞれ$max=1000000;で実行した結果、 おおよそ 1.0.50〜0.52秒 2.0.39〜0.40秒 3.0.31〜0.32秒 という結果になった。(複数回、順番入れ替えも行った上での結果) 環境:WinXP PHP4.3.10 CLI版 おまけ。 4.for($i = 0; $i < 1000000; $i ++) {print ""} にするだけで 4.0.39秒 になる。 …PHPの変数参照っておせー
PHP書くのにお勧めにエディタおしえて
>>826 4 と 1 の違いが分からない
他の言語と比べてくれなきゃ PHP が遅いのか分からない
832 :
nobodyさん :2006/01/11(水) 14:22:10 ID:h33/EqTj
データベース内にあるデータを消去するスクリプトを作成したいんだけど普通にdelet from ... を使ってアクセスすると 確認もないままに消してしまう。 同じスクリプト内に消去するまえの確認メッセージを表示してOKボタンをクリックした場合のみ消去させるにはどうしたらいいのでしょうか?
833 :
nobodyさん :2006/01/11(水) 14:27:23 ID:qDYFXRNq
最近の釣りは豪快だね
>>832 OKボタンのFORM入力が無ければOKボタンを表示して終了、
FORM入力があれば実際にdelete実行、ってだけ。
二次元配列で $aa[0][0] = 1; などとCみたいに扱えないんですか?
え、まじですか? $aa[0][0] = 1; として、これの中身を echo "$aa[0][0]";とかすると 1[0] って表示されるのですが・・ 表示方法がまずいとか?
あ、できてますねこれ。 どうやら表示方法がまずかったみたいな $aa[0][0]をいったん別の変数にとって $bb = $aa[0][0]; として、$bbを表示したらうまくいきました。
>>838 echo $aa[0][0];
echo "{$aa[0][0]}";
841 :
nobodyさん :2006/01/11(水) 15:50:27 ID:CQ4aDWhi
843 :
675 :2006/01/11(水) 16:06:44 ID:???
>>820 おー、理解しました(多分)。スコープの問題?
if(mb_eregi($bad_word, $com))
が動いていたような気がするのは気のせいですよね、きっと…。
>>843 if文の前に
echo $bad_word;
echo $com;
とでもして変数の中身確認すれば分かることでは?
846 :
nobodyさん :2006/01/11(水) 16:14:50 ID:CQ4aDWhi
>>842 ,844
またスレ違いでしたか;;
失礼しました
他をあたります
レスありがとうございました
848 :
nobodyさん :2006/01/11(水) 18:08:12 ID:h33/EqTj
PHPで文字化けします。いろいろ調べたのですがShift-JISを使わないと文字化けしないと分かりました。 しかし意味が分かりません。Shift-JISを使わないってどこをどうすればいいのですか?
適切な文字コードを指定すればいいのですよあえr4ん6j34kl
850 :
nobodyさん :2006/01/11(水) 18:25:34 ID:h33/EqTj
指定方法を教えてください。Plz
meta タグや htaccess を使うのでおおっと板違いだぁ
何がどう板違いなんだか;;
>>848 まずマニュアルを読む
マニュアルを読んで分からなければ丁寧な解説がされていそうな本を読む
こんなところで聞くだけ時間の無駄
854 :
nobodyさん :2006/01/11(水) 19:23:12 ID:923d4820
質問です。 簡単なデータの入力システムをphpとmysqlでつくっています。 "select * from テーブル"で <table> while ($col = mysql_fetch_array($rst)) { <tr> <td>$col["あああ"]</td> <td>$col["いいい"]</td> <td>$col["ううう"]</td> </tr> } </table> みたいにして、whileでループして表を表示させてるのですが、 表を見易くするために、一行ごとにバックの色を変えるにはどうすればいいでしょうか? 1行目は白、2行目はちょっとグレー、3行目は白.....みたいな。 よろしくお願いします。
条件分岐させればよいでしょ。 それにしても全角とは恐れ入った。
forの方がやり易いかな. for ( $lp = 0; $col = mysql_fetch_array($rst); $lp++ ) { $bg_class = ( $lp % 2 == 0 )? "bg_white" : "bg_gray"; echo <<<EOS <tr class="$bg_class"> <td>$col["aaa"]</td><td>$col["bbb"]</td><td>$col["ccc"]</td> </tr> EOS; } といった感じ.スタイルシートは自分で書いてね.
>>854 俺はこんな感じでやってる
$max = 3;
$color = array("#000000","#ff00ff","#00ff00");
行 $lineとして
色 $color[$line % $max]
858 :
nobodyさん :2006/01/11(水) 19:58:53 ID:h33/EqTj
JavaScriptでエンコードした文字をPHPのrawurldecodeで元に戻すことは可能ですか?
860 :
まっぷ :2006/01/11(水) 20:35:46 ID:+n0M4RUL
mapserverでphp_mapscriptをつかって地図表示をさせようとしているのですが、 アクセスする際に Warning: dl(): Unable to load dynamic library '/usr/lib/php/20020429/php_mapscript.so' - /usr/lib/php/20020429/php_mapscript.so: cannot open shared object file: No such file or directory in /home/httpd/html/phpinfo_mapscript.phtml on line 21 というエラーがでてしまって困っています。 環境は vinelinux-3.1 php-4.4.1 mapserver-4.0.1 を使っています。 phpの何かがおかしいと思うのですが。。 /usr/lib/php/20020429というディレクトリは存在せず、 /usr/lib/php/の中にはphp_mapscript.soが存在します。 いろんなとこを調べ、php.iniのextension_dir = ./の部分を extension_dir = "/usr/local/php-4.4.1/modules/" にしたりしてみたのですがエラーはかわりませんでした。 何分初心者ですのでつたない文章ですみません。 御指導いただければと思います。。 お願いします。
>>860 /usr/lib/php/20020429/php_mapscript.soを作る
862 :
854 :2006/01/11(水) 20:50:00 ID:923d4820
855,856,857 スタイルシートのclassを変数にして条件分岐ですね。 すばらしいですねー。 最近phpを勉強しはじめました。 forはなんとなく好きになれません。 array()っていうのも使ったことないです。 前途多難ですががんばります。 ありがとうございました。
じゃあ foreach かな
だったらwhileでええやん
865 :
nobodyさん :2006/01/11(水) 21:44:45 ID:a+2jPX+b
なんでもええやん
>>862 漏れは、普通にmysql_fetch_arrayでまわすけど、まわす前にカウント用の変数を$iとして、それが偶数のときはこのcssクラス、奇数のときは・・・って感じだな。
先に件数を取得しておくと、テーブルなんかおしゃれにできる。
(最後の一行がわかるから。)
まじで下らねぇだと思うんですが、インスコ段階で詰まってます。 httpd下で動作させようと思ってるんですが 一応解説サイトや書籍などを見て、 php5ts.dll php.ini-dist を C:\WINDOWS\system32にコピって php.iniにリネームし cgi.force_redirect = 0 に書き換えても Security Alert! The PHP CGI cannot be accessed directly 言われます。 とりあえづXAMPPインスコして、そっちではPHP動くんであまり問題ないと言えばないのですが、 今度はこっちではCGIが動きません(htdocs.confでDocumentRootのパスとかは変えたんですが) 余談ですが、ActivePerlとかXAMPPアンインスコして XAMPPだけインスコした状態で試したりもしたんですがダメでした。 まあそれはどうでもよくて、実際cgiとphpを連動させる事もないだろうから 別にcgiのテストはhttpdでやって、PHPはXAMPPでやればいいだろ、って言われればそれまでなんですが。 原因が気になってオナニーもロクにできません。 あ、オナニーはインスコ中にやってたのでどうでもいいです。 とにかくよろしくお願いします。
868 :
867 :2006/01/12(木) 01:24:21 ID:???
自己解決しました。 オナニーして寝ます。
Smartyの {cycle}
キーと値が格納された連想配列を文字列としてシリアライズしたり、 文字列から連想配列へデシリアライズする手段をさがしてます。そういう便利なものないですか。 (PHP4です)
>>870 extractとcompactではだめ?
>>871 ありがとう。調べてみます。
ぐぐってみたところ、serialize(),unserialize() というのもみつけました。
入力された複数の値→連想配列を作る→シリアライズしてDBに入れる
→別の画面などでDBからシリアライズしてきた文字をデシリアライズ(連想配列化)して表示
といった感じに使おうかと思ってました。
>>872 そういうのは普通にserialize()でよく行われてると思うよ。
874 :
872 :2006/01/12(木) 14:41:36 ID:???
875 :
nobodyさん :2006/01/12(木) 15:00:00 ID:lQx6xwTN
ありがとうございマイケル
構造体の使い方かいてるサイトおしえてください
PHPの構造体って何?
ないの?
ちょっと前に見た、構造体と case 文のない言語はやだって言ってたやつとは違うよな?
あ、無いのか・・・ では、話が変わるのですが、変数の型がバリアントっぽいのですが Cみたいにcharの配列でバイナリを扱う方法を教えてください
何がしたいのだ 知ってる言語の流儀を押し通そうとするのは賢い方法とは言えないぞ
あ、えーっと、じゃあわかりやすくCで書くなら char aa[8]={ 0x01, 0x02, 0x03, 0x04, 0x00, 0x02, 0x03, 0xAA }; short bb = ((aa[[5] << 8) | aa[6]) & 0xFF; 例えばこんなこと↑ char のバイナリ配列なんでコードにNULLが含まれてることもあるみたいな
マニュアルじゃないけどPHPの説明を書いてるHPを何箇所かみたんだけど バイトって概念がないのかわからんけど、なんかできないっぽいなあ ちょっとマニュアルみてくるかな
てきとーなサイト見るよりマニュアルを見る方が何百倍もよい
>>884 概念はあるんだよ。
使っている奴が少ないだけ。
ユーザ側がまだまだCほど錬れていないから。
unpack して配列に突っ込んでやってみたら?
>>885 マニュアルて何故か簡単に説明してくれてないから敬遠しちゃうんだよね
>>886 おろ?まじですか。でもこれってCよりBasicに近い変数の扱いですよね
>>887 ああああああああああああああああああああ!!!
こんな関数があったんですか!!
これ早速ためしてみます
>>882 <?php
$a[] = pack("c", 0x01);
$a[] = pack("c", 0x02);
$a[] = pack("c", 0x03);
$a[] = pack("c", 0x04);
$a[] = pack("c", 0x00);
$a[] = pack("c", 0x02);
$a[] = pack("c", 0x03);
$a[] = pack("c", 0xAA);
$b = (($a[5] << 8) | $a[6]) & 0xFF;
echo bin2hex($b);
?>
>>889 激しくあり(ノД`。)
やっぱりやる方法はあるんですね。感謝です
元がcharの配列だったことには意味があったんじゃないのか??
Cではファイルから読み込んだりする時にchar型が便利だからじゃねえの?
それ以前に躓くPHPで書くよりC言語で書いた方が良いのではないかと。
a.txtというテキストファイルの内容をソートし、保存しなおしたいのですが $a = "./a.txt"; $af = fopen($a, "w"); flock($af, 2); asort($a); fclose($af); このコードでは上手くいきませんでした。正しいコードをご教授願います
>>894 とりあえずマニュアルを読む事をお勧めします。
>>894 asortに与えるべき配列はファイルの中身を配列にしたものであって、"./a.txt"という文字列ではない。
897 :
889 :2006/01/12(木) 18:06:37 ID:???
>>890 すまん。バイナリだと演算できなかった
バイナリをビット操作するときはunpackしてやらないとだめだ
それなら最初からpackするなよってことか
>>894 簡単に言うとファイルを開いてるだけで保存はおろか読み込みもしてない
>>897 あ、ひょっとして論理演算が?
phpはなかなか難しいですねー
つ $aa = "\x01\x02\x03\x04\x00\x02\x03\xAA"; 論理演算て・・・
>>900 シフトは算術演算って言っといたほうがよかったかい?
>>901 ビット演算だろボケが。論理演算はtrue/falseとかand/orの類。
確かにPHPでbool型を使いたくなる時がある
使ったらいいじゃない
Mac OS X 10.4.3 $ /opt/local/bin/php -version PHP 5.1.1 (cli) (built: Jan 11 2006 20:26:52) $ /opt/local/bin/phpunit --version PHPUnit 2.3.4 by Sebastian Bergmann. $ pear -V PEAR Version: 1.4.6 PHP Version: 5.1.1 Zend Engine Version: 2.1.0 /opt/local/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so で、 <?php class Numeric { public function add($x, $y) { return ($x + $y); } public function sub($x, $y) { return ($x-$y); } } ?> を $ ls -a Numeric.php $ phpunit --skeleton Numecir PHPUnit 2.3.4 by Sebastian Bergmann. $ とプロンプトが返ってきて、「Wrote test class skeleton for Numeric to NumericTest.php」はなし。 NumericTest.php という空のファイルが生成されているだけで、中身はなし。 何が原因なのか、誰か教えて…・
phpunitは使ったことないけど、 Numeric Numecir の違いじゃないの?
907 :
905 :2006/01/12(木) 19:04:16 ID:???
>>906 ファイル名とクラス名が同じだから、
名称が問題になっているわけではないと思うんだ。
いちおうスケルトンは生成されているし。
ttp://www.phpunit.de/pocket_guide/2.3/en/installation.html の
ファイル名の変更は問題ないと思うし…。
$ ls -l /opt/local/bin/ | grep php
-rwxr-xr-x 2 root admin 8918652 Jan 11 20:27 php
-rwxr-xr-x 2 root admin 1326 Jan 11 20:29 php-config
lrwxr-xr-x 1 naotaka admin 18 Jan 3 19:32 php5 -> /opt/local/bin/php
-rwxr-xr-x 2 root admin 4107 Jan 11 20:29 phpize
-rwxr-xr-x 1 root admin 1801 Jan 12 18:11 phpunit
xdebug は有効になっているし、assert 関数の評価も有効になっているので、
設定の問題なのかどうかもちょっと切り分けられなくて、困っている…。
ググッても検索結果に参考になるものがないのが、利用者数が少ないのを物語っているよ。
908 :
854 :2006/01/12(木) 19:06:04 ID:pSKfqlaX
みなさんのレスを読んで納得したつもりだったのですが、
家に帰って帰ってみたら、やっぱり分かってませんでした。
857さんのやりかたがシンプルでいいなと思ったのですが、
行$lineを取得する方法がわかりませんでした。
ttp://php.thm.jp/index.php?know=table_color これは、856さんのやり方に近いと思うのですが、自分のコードにはうまくあてはめられませんでした。
866さんの方法もよさそうなのですが。。。
どなたかアドバイスをお願いします。
910 :
854 :2006/01/12(木) 19:26:34 ID:pSKfqlaX
レスどうもです。 自分のコードには866のやり方が合ってると思うのですが、 具体的にどう書くのか、いろいろと試しているのですが、 全部同じ色になってしまって困っています。 ヒントでもいただけるとうれしいです。
>>910 単純に現在の行が何行目なのかを判定するための変数を設定して、
行が変わる毎に何行目なのかを判定して、背景のコードを print 文なりで付加すればいいだけ。
これぐらいは自分で考えて条件式を書けないと、
プログラムのセンスがないのかもしれないよ。
912 :
911 :2006/01/12(木) 19:47:13 ID:pSKfqlaX
ですよねぇ。ありがとうございます。 >単純に現在の行が何行目なのかを判定するための変数を設定して、 >行が変わる毎に何行目なのかを判定して、背景のコードを print 文なりで付加すればいい という理屈はわかっているのですが、「現在の行が何行目なのか」を判断できませんorz もうちょっと格闘します。ありがとうございました。
以前、リファレンス渡しの話題で、リファレンス渡しをすると遅くなってしまう場合がありましたが、 ログをなくしてしまったので、どのような場合にすべきではないかもういちど挙げていただけませんか?
>>913 リファレンス渡し自体をしなければいい。
915 :
911 :2006/01/12(木) 20:49:12 ID:???
>>912 単純に書けば、こんなもんだ。
スマートに書きたいのなら、自分で工夫する。
print("<table>\n");
$i = 0; // 行数を単純にカウント
while($col = mysql_fetch_array($rst)) {
if($i == 0) {
print("\t<tr bgcolor=\"#ffffff\"\n");
$i++;
} elseif($i == 1) {
print("\t<tr bgcolor=\"#000000\"\n");
$i++;
} else {
print("\t<tr bgcolor=\"cccccc\"\n");
$i = 0; // 3行目に来たら、行数を0にして、最初の背景色に戻す
}
print("\t\t<td>$col['あああ']</td>\n");
print("\t\t<td>$col['いいい']</td>\n");
print("\t\t<td>$col['ううう']</td>\n");
print("\t</tr>\n");
}
print("</table>\n");
916 :
912 :2006/01/12(木) 21:30:28 ID:pSKfqlaX
>>915 ありがとうございます!
悩んだ結果一応ちゃんと動作するコードを書けたことを報告にきたのですが、
見にきたらコード全文が載っててびっくりしました。
僕の書いたコードはこれです。
while ($col = mysql_fetch_array($rst)) {
$col[0]=0;
@$i++;
if ($i%2 == 0) {
$body .= "<tr bgcolor='#ffffff'>";
}
else {
$body .= "<tr bgcolor='#cccccc'>";
}
$body .= "<td>".$col["あああ"]."</td>\n";
$body .= "<td>".$col["いいい"]."</td>\n";
$body .= "<td>".$col["ううう"]."</td>\n";
}
$body .="</tr>";
917 :
912 :2006/01/12(木) 21:31:26 ID:pSKfqlaX
$col[0]には自動採番のインデックスが入っていて、 レコードを削除したりすると欠番になったりするので、 強引に$col[0]=0;とやって++しました。 ++の前に@を付けないと、Noticeエラーがでます。 これは、ダメな感じの書き方なんでしょうか?アドバイスお願いします。 今から915さんのコードと比較検証します。
>>917 > ++の前に@を付けないと、Noticeエラーがでます。
$i = 0; ってどこかでやってる?
$col[0]=0; も謎…
919 :
911 :2006/01/13(金) 00:11:54 ID:???
>>917 > ++の前に@を付けないと、Noticeエラーがでます
>>918 が指摘しているけれど、変数 $i を必ず初期化すること。
Notice エラーが出るのは、$i++; を記述する前に、
$i = 0; と初期化していないから。
> $col[0]には自動採番のインデックスが入っていて、
> レコードを削除したりすると欠番になったりする
必要のないカラムなら、SQL で SELECT する際にそのカラムを
取得しない。
必要なカラムなら、条件式でカラムに値が格納されているかどうかを
判定したら?
>>916 css
.line0 { background-color: #ffffff }
.line1 { background-color: #cccccc }
$index = 1;
while ( …
$index = 1 - $index;
$body .= '<tr class="line' . $index . '">';
…
921 :
912 :2006/01/13(金) 01:00:42 ID:SV3c3aSx
レスありがとうございます。 915さんのコードを参考に、本を読んだりしながら検証した結果、 自分の書いたコードがいかにダメかわかりました。 確かに$col[0]=0は謎ですね...。というか、ホントに意味がないです。 mysql_fetch_arrayで取得した配列の中身をどうにかするものだと 思いこんでいた為にひらめいた苦肉の策でした。 変数の初期化はお約束のようなものなのでしょうか? $i=0;をやらないと、Noticeエラーが出るというのは初耳です。 なにより、$hoge++というのを今まで使ったことがなかったので かなり勉強になりました。 本当にありがとうございました。
922 :
912 :2006/01/13(金) 01:06:15 ID:SV3c3aSx
>>920 すごいシンプルですね。すばらしいです。
$hoge++とかはやらないんですか?
いまぱっと見ただけでは、$index = 1 - $index;
がどういう値を出すのか、自分には分からないです。
ちょっと本を読んで研究してみます。
ありがとうございます。
923 :
911 :2006/01/13(金) 01:10:53 ID:???
>>921 > $i=0;をやらないと、Noticeエラーが出るというのは初耳です。
基本的に変数の初期化は必須。今後、Java なり C をやればわかる。
今回、Notice エラーが出るのは、初期化されていない変数 $i には、
何も値が代入されていないため、$i++; をした際に、PHP はインクリメント後の
値が不明なため、Notice エラー が出るの。
そのため、$i = 0; と初期化することによって、0 + 1 = 1という加算が成立する。
もしかして、++$i; と $i++; も曖昧なようなら、演算式が詳しく書かれている
参考書から参考にした方がいいと思うよ。
924 :
675 :2006/01/13(金) 01:18:43 ID:FGHLzOq/
>>845 確かにそうですね。今度検証してみます。
ありがとうございます。
>>920 の $index = 1 - $index; にちょっと感動。
こういうやり方もあるんだねぇ。
>>922 いや、本を読んでも分からないと思う。
ちょっと考えれば分かることだから、紙にでも書いてじっくり考えてみて。
分かるときっとプログラミングが楽しくなるよ。
$color = ""; while ( … ) { $color = ($color == "#ffffff")? "#cccccc" : "#ffffff" ; echo "<tr bgcolor=\"$color\">\n"; これも置いとくね
ところでNoticeってエラーなのか?
>>922 > いまぱっと見ただけでは、$index = 1 - $index;
> がどういう値を出すのか、自分には分からないです。
どういう値を出すのかは、
その直後にecho $indexとでもすれば分かること。
変数の中身を表示して確認しながらやると分かりやすくなるぞ。
>>927 一応エラーだね。
『これは、スクリプト実行時に何かエラーが発生したが、
通常のスクリプト実行を継続できることを示します。
例えば、値が設定されていない変数にアクセスしようとした場合や、
存在しないファイルについて stat() をコールした場合 です。』
NOTICE(通知) < WARNING(警告) < ERROR(エラー) の順。
NOTICE、WARNINGは実行を継続、ERRORは停止みたい。
Noticeはなんか重箱の隅つついたようなモノばっかりでいやになった。
初期化しないで使える、ほぼ形無し変数も凄いと思うけどな。 だから初心者でも使える仕様になっているんだしね。
>>930 でもつぶしておくと変なハマり方しにくくなるのは間違いないよ
そりゃそーだが、ほとんどの場合はそんなとこじゃはまらないようなものばかりで、 Notice対応の方がバグ潰しよりよっぽど手間にならないか? 何のために省略ができるようになってるのか考えると不毛だと思うんだけどな。
別に全部の省略が Notice 対象になるわけじゃないし、そんなに 手間とも思わないけど。
変数名が被ったりすると、たま〜に変数の初期化忘れて嵌る時があるw
$array = array('foo', 'bar', 'baz'); $new_array = array(); foreach ($array as $item) { $new_array[] = $item . '.html'; } これを一発でやってくれる関数はありますか? マニュアル読んだのですが、それらしいのが見つかりませんでした。 しかしPHPならあるんじゃないかと思って、質問してみました。
>>936 $new_array = array_map(create_function('$v', 'return "$v.html";'), $array);
938 :
889 :2006/01/13(金) 12:31:37 ID:???
>>936 >>936 俺に出来るのは
<?php
$array = array('foo', 'bar', 'baz');
array_walk($array, create_function('&$v', '$v = $v.".html";'));
var_dump($array);
?>
ここまでだ
>>935 そんな変数名がかぶるような長いブロック書いちゃダメ
(ひょっとすると全部グローバルかもしれんが)
細かく function で分けるべし
class にしてしまえば必要なものだけ var で(class内で)
共有できる
オブジェクト指向とか考えなくてもメリットは大きいぞ
>>914 できればそうしたいのですが、
70kBほどのXMLのオブジェクトを扱いたいので、 それを値渡しするのはできるだけ避けたいと考えています。
>>940 値渡し(&を使わず代入)を避ける必要がない。素直に書けば不必要なコピーは起こらない。
パフォーマンス改善を目的とするリファレンス渡しはいかなる場合も避けるべき。
>>937 ,938
そのものズバリという関数はないということですね。
素直に関数を定義します。
ありがとうございました。
function array_suffix($array, $suffix) {
if (! $array) return NULL;
$array2 = array();
foreach ($array as $item) {
$array2[] = $item . $suffix;
}
return $array2;
}
>>942 贅沢なやつだな。
$new_array = preg_replace('/$/', '.html', $array);
>>941 分かりました。
PEARのDBのサンプルソースに&が必ずついているので、参照渡しは必須のものだと思っていました。
ありがとうございます。
perlでいうuse encoding()に当たる関数ってないですか?
use encodingは関数じゃないよーな。 そんでもってPHPはその機能は内蔵してないか。 php.iniで入出力文字コードの設定するだけじゃないの?
>>945 Perlは知らないけど、
>>946 の話を聞く限り
mb_http_output() と mb_internal_encoding() あたりじゃないかと思われ。
php.iniいじったり ini_set() 使うのもありだけど。
外部ファイルに設定データなんかを保存している場合、 変数への代入等のPHP文をそのファイルに記述してrequireするのと、file()で読み込んで本体のスクリプトで処理するのとではどっちの方が軽快に動くんでしょうか?
ほとんどの場合、requireの方が速くなるかと
950 :
nobodyさん :2006/01/14(土) 07:45:24 ID:aUotD7Tf
クラスのextends元を動的に選択することはできますか?
そんなにいろんなものが extends できるってのが作りとして よく分からないが… 逆に聞きたい。なんでそんなことしようと思ったの?
とある事情でbody[1]の中にHTMLソースが入ってるんですがこれの中身をまた一行ずつ配列に格納するにはどうすればいいにでしょうか?
改行されてるとこで分割すればいいじゃない。
関数がない、という Fatal と、 array じゃないのを foreach して出る Warning を 検出するにはどうしたらいいでしょう?
>>950 できない。パターンごとのextendsするクラスを作れば
クラス定義のPHPコードを動的生成してevalするとかw
959 :
nobodyさん :2006/01/14(土) 15:43:29 ID:/np9stAG
日付の質問です。 DBに入っている日付型データがn分経過しているかどうかを判定したかったんですが、 日付関数でn分経過した日付型を返すようなものが見あたりませんでした。 よい方法ないでしょうか?
n分経過、でなく、n分前の日付データを生成して、それと大小比較すればいいんじゃないの?
生成するのは「現在時刻のn分前の日付データ」ね。
>>956 起きたエラーの検出じゃなくて
function_exists と is_array でチェックするって方法は?
>>962 全部の関数呼び出しで書き間違いをチェックしてられないから
文法チェックみたいな形で一気に検出したい、ってことじゃないの?
理屈からいくと動的な関数呼び出しも可能なPHPで完璧なチェックってのは不可能なんだけど。
配列の方はis_arrayでチェックするのは割と基本だよね。
ま、直前で配列初期化してるようなものまで書き間違いによるミスが無いか
チェックしようとしてるんじゃないかと思ったりするけど。
書き間違いの可能性まで考えたらis_arrayに渡してる引数からして疑われるわけだし。
>>962 どうしてもチェック抜けがあるので
それを検知したいんです。
965 :
959 :2006/01/14(土) 16:06:43 ID:???
>>964 エラーハンドラ定義して自分でやるって手もあるけど、
たぶん普通に地味にチェックしていく方が楽だと思うよ
>>964 基本的には全ての条件パターンでのロジックを通して実行してみるってのは
プログラムテストの基本であり、それもできないやつはプログラマ失格なんだけどな。
(で、システム全体で全条件を通すのは非常に難しいので、関数単位で単体テストとかするわけだけど)
正規表現で全ての文字(改行を含む)をあらわしたいのですが、 [.\n]って間違ってる?これを使うとなぜかうまくいかないです
969 :
964 :2006/01/14(土) 16:29:19 ID:???
>>966-967 おっしゃることもっともです。
とはいえ、全チェックや二重チェック、地道にテストをしても
人間がやることなんで抜けがあるのでシステム側で検知したいんです。
配列初期化ミスとかは実行時の致命的エラーなんだから 事前にチェックする方法ってのは原理的に存在しないよ。 それって結局、ロジックによって通過先が変われば状態が変わってしまうもの。 諦めたら?
>>968 間違ってる。[〜] の中での「.」はただの「.」という文字であって全ての文字は表さない。
「.|\n|\r」じゃないの?
>>969 いやー
だからね、その方が難しいんだって
エラーハンドラの定義でも例外処理でもいいけど、その分
作り込む量は多くなるし、エラーの処理も全部チェックしなきゃ
いけないわけ。検知ったってさ、検知だけできてもしゃーないわけ
でしょ。何をしたいのか知らないけど、要求レベルがかなり
高いと思うよ
973 :
968 :2006/01/14(土) 16:45:43 ID:???
うわー言われてみればそうだわ、 めちゃくちゃはまってたんでマジ助かりました、ありがとう
974 :
969 :2006/01/14(土) 16:49:39 ID:???
>>970 ,972
ですね。例外を用意せずに
set_error_handler() のように Fatal や Warning, Notice をキャッチして
その場所をメールで報告、とかできれば楽だと思ったのです。
ありがとうございました。
>>969 その目的って事前チェック?それとも致命的エラーを出してもユーザに見えなければOK?
後者だったらset_error_handler()でとりあえずお待ちください画面でも出してお茶濁しとけば。
976 :
950 :2006/01/14(土) 16:54:40 ID:aUotD7Tf
できないですか・・・ DBのデータを操作するDAOクラス(基本DAOクラス)があるんですが、 それのextends元クラス(DBクラス)を変更することで、 対応DB(MySQLなど)を選択することができるんです。 で、普段はこの基本DAOクラスをさらに継承した 個別アプリ用のクラス(拡張DAOクラス)を作成して、利用する形です。 基本DAOクラスはどのDBでも同じ内容(メソッド)なので、 拡張DAOクラスからDBを指定して、基本DAOクラスのextends元DBクラスを 選択できればと思った次第です。 今はextends元だけが異なる基本DAOクラスを複数用意していますが、 これは重複していて無駄だし、ソース改良時も複数ファイルで同じ変更を しなくてはならず手間です。 設計を変えたほうがいいのかなあ。でもすぐにはいい方法を思いつきません。
クラスのextends元を複数選択して、統合されたクラスを作成することはできますか?
>>976 class定義の1行しか違わないんなら、元になるソースファイルを1個だけ用意して
それをベースに改良等を行い、修正したらバッチでDBの数だけ置換コピーして
実際に使用するクラス定義ファイルを生成する。みたいな手順にしちゃえば?
動的に実行時指定できるようにするほどの内容には思えないけど。
>>977 PHPでは多重継承はサポートしていません
>>976 extends したクラスをインスタンス化したものを保持する
ラッパークラスを作る
外からの操作はそのラッパーオブジェクトを介して行う
981 :
950 :2006/01/14(土) 17:23:30 ID:aUotD7Tf
>>980 $this->wrapper->method() となるのはちょっとやだなと思ってたのですが、
よく考えると、それをさらにラップすれば、$this->method() で取り扱えますね。
継承の階層が多くなっちゃいますけど、方法としてはこうなるのかな。
982 :
977 :2006/01/14(土) 17:24:01 ID:???
984 :
nobodyさん :2006/01/14(土) 18:37:40 ID:ILCMT976
こういう場合はどうすれば良いのでしょうか? print("<strong>"$data[0]."</strong>は面白い\n"); こうすると「syntax error, unexpected T_VARIABLE」という エラーが出てしまいます。
986 :
985 :2006/01/14(土) 18:55:25 ID:???
と思ったら違った。 print("<strong>".$data[0]."</strong>は面白い\n"); 「.」が抜けてるだけだ。
>>984 $data[0] の前の . が抜けてるだけ
もっと頑張りましょう
俺はこの種のミスを防止するため、文字列連結の . は必ず . の前後に空白を空けるようにしてる。 同様に引数区切りなどの , は後ろに空白を空けるようにしてる。
989 :
nobodyさん :2006/01/14(土) 19:12:43 ID:ILCMT976
ホントだ、小さなミスを見落としていた。 もっとガンバロ((`・ω・)
次スレ立てときましょうかね。 なんかここって本スレより勢いある上に 本スレよりまともな質問も多い気がするのは気のせい?w
微妙だな、埋めろ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。