【PHP】質問スレッドpart24【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/01 04:09:15ID:???・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
0412410
04/11/09 10:27:13ID:???0414nobodyさん
04/11/09 10:28:32ID:???0415410
04/11/09 10:57:43ID:???ありがとうございました。
事前にマニュアルを確認したところマニュアルには以下のように書いてあり
> 文字エンコーディングとしては、内部エンコーディングまたは mb_regex_encoding()で指定した文字エンコーディン グが使用されます。
内部エンコーディングにSJIS指定してたと思ったのですが、
どうやらそうなっていなかったようです。
mb_regex_encoding("SJIS");
を置換の前に指定することにより解決しました。
ありがとうございます。
0416409
04/11/09 11:58:25ID:???エラーが出るのは PHP 4.3.9 のソースからコンパイルした場合かな?
PECL の pdflib-2.0.2 は PHP4 と PDFlib-lite-6.0.0p1 でも対応して
いるみたいなので、PHP 4.3.9 のソースでは pdflib を入れずに
インストールした後、モジュールとして pdflib のインストールを
試してみれば?
一応、試してみたけど、
$ pear install pdflib
でも大丈夫みたい。
0417nobodyさん
04/11/09 13:17:59ID:???> >>411
> エラーが出るのは PHP 4.3.9 のソースからコンパイルした場合かな?
そうです。情報を小出しにして済みません。
既にpdflib-4.0.3が入っていたので、make uninstallして、PDFlib-lite-6.0.0p1をソースから
configure; make; make install;。
最後にPHP4.3.9を--with-pdflib=/usr/localしてmakeしているときにエラーが発生します。
--with-pdflib=noでPHP4.3.9をインストールした後に、pear install pdflibしてみましたが、
今度は
/tmp/tmpAAT0NG/pdflib-2.0.2/pdf.c:7155:19: pdf4.c: No such file or directory
make: *** [pdf.lo] Error 1
`make' failed
で落ちました。
対象のマシンは実験機でいろんなものを入れたり消したりしているので、不具合が
あるのかもしれません。一度OSからきれいに入れ直してみます。
0418nobodyさん
04/11/09 14:08:28ID:???PHP 4.3.9 のソースに含まれているものは PDFlib-lite 6.0.0 には対応していない。
そのエラーが発生した pdflib-2.0.2/pdf.c のソースの該当行を見てみたけど、
どうやら PDFLib 4 がインストールされているものとして認識されているね。
#elif PDFLIB_MAJORVERSION == 4
/* use the old PDFlib wrapper */
# include "pdf4.c"
#else /* PDFLIB_MAJORVERSION < 5 */
# error "PDFlib version does not match PHP-wrapper code"
#endif /* PDFlib >= 5.0.0 */
どこかに PDFLib 4 用のヘッダファイル(/usr/include/pdflib.h あたり?)が
残っていると思うので、削除するとか、pear でインストールするときに、
pdflib がインストールされている場所を聞かれるはずなので、
自動認識にせずに、/usr/local を指定するとかしてみるとうまくいくかもしれない。
0419nobodyさん
04/11/09 17:51:40ID:???お手数をおかけします。
/usr/local/include に pdflib.h があったので削除して、
pear install pdflib-2.0.2.tgz を行いましたが、今度は以下のエラーで
終了しました。
/usr/local/src/pdflib-2.0.2/pdf.c:7081: error: `gdImagePtr' undeclared (first use in this function)
/usr/local/src/pdflib-2.0.2/pdf.c:7081: error: (Each undeclared identifier is reported only once
/usr/local/src/pdflib-2.0.2/pdf.c:7081: error: for each function it appears in.)
/usr/local/src/pdflib-2.0.2/pdf.c:7081: error: syntax error before "im"
/usr/local/src/pdflib-2.0.2/pdf.c:7099: error: `im' undeclared (first use in this function)
/usr/local/src/pdflib-2.0.2/pdf.c:7099: error: syntax error before "zend_fetch_resource"
make: *** [pdf.lo] Error 1
別のマシン(Minacle Linux 2.0+PHP4.3.9 PDFlib非インストール)で
PDFlib-lite-6.0.0p1を configure; make; make install;した後
pear install pdflib-2.0.2.tgz を行いましたが、ここでも以下のエラーで
終了してしまいした。
gcc: unrecognized option `-prefer-pic'
/tmp/tmp6cYe68/pdflib-2.0.2/pdf.c:87: ext/gd/php_gd.h: No such file or directory
/tmp/tmp6cYe68/pdflib-2.0.2/pdf.c:89: ext/gd/libgd/gd.h: No such file or directo
ry
make: *** [pdf.lo] エラー 1
`make' failed
gd関数は使用可能になっていますが、確かに/usr/local/lib/php/ext には
gd/php_gd.h はありません。
なにかいろいろ問題があるようです。
頭を冷やしてもう一度ドキュメント類を見直してみます。
0420nobodyさん
04/11/09 18:04:30ID:i/oj7Egh過去ログ読んでいると「内部エンコーディング」って言葉が
よく出てくるんですが、いったい何なのでしょうか?
0422nobodyさん
04/11/09 18:19:20ID:???ttp://php.planetmirror.com/manual/ja/ref.mbstring.php
0424nobodyさん
04/11/09 19:51:04ID:???GD をインストールしているのが原因でエラーになるのか・・・。
GD のヘッダファイルを PHP のソースからコピーしたら解決できそう。
$ mkdir /usr/local/include/php/ext/gd
$ cd php-4.3.9/ext/gd
$ cp php_gd.h /usr/local/include/php/ext/gd/
$ cp -r libgd /usr/local/include/php/ext/gd/
$ pear install pdflib
>>423 が言っているように、手動で pdflib-2.0.2.tgz を展開して、
PHP-4.3.9 のソースの ext をシンボリックリンクしてコンパイルする
という方法もある。
PHP 側で GD をインストールするときはヘッダファイルのインストール
してくれると楽なんだけど。
0425nobodyさん
04/11/09 19:57:29ID:???0426nobodyさん
04/11/09 20:20:51ID:???$tmp =~ tr{123}{ABC}
123をABCに置き換えるんじゃなく、
1 -> A
2 -> B
3 -> C
のように文字単位で置き換えられる処理です。
10203 -> A0B0C
0427nobodyさん
04/11/09 20:28:29ID:???配列で指定する
0430426
04/11/09 20:45:21ID:???>>428さん
strtr関数に気付きませんでした。もっと良くマニュアル読みます。
>>429さん
複雑な条件はなく、ただ単純に例みたいに置き換えるだけだから>>428さんので
大丈夫でした。
>>427さん
こんな感じで書いてみたんですけどうまくいきませんでしたorz
echo preg_replace( "/[123]/", "[ABC]", "10203" );
[ABC]0[ABC]0[ABC] になってしまいました。
0431426
04/11/09 21:07:18ID:???できました。
<?php
$str = "10203";
$search = array("1", "2", "3");
$replace = array("A", "B", "C");
echo str_replace( $search, $replace, $str );
?>
0432429
04/11/09 21:07:44ID:???0434nobodyさん
04/11/09 21:53:17ID:bn3NZRnm継承するかどうかは分からないから、
とりあえずprotectedにしておけば問題ないですか?
逆にprivateにしておけばいいプロパティーって
どういうものがあるのでしょうか?
0436nobodyさん
04/11/09 22:06:54ID:???ランダムにリンクを貼ったテキストを表示させようと思い、
これを別ファイルに記述し、
表示させたいページにrequireで呼び出しています。
<?php $com = array(
'<a href="http://">テキスト1</a>',
'<a href="http://">テキスト2</a>',
'<a href="http://">テキスト3</a>',
'<a href="http://">テキスト4</a>',
'<a href="http://">テキスト5</a>',
'<a href="http://">テキスト6</a>',
'<a href="http://">テキスト7</a>',
'<a href="http://">テキスト8</a>',
'<a href="http://">テキスト9</a>',
'<a href="http://">テキスト10</a>',
);
srand( (double)microtime()*1000000 );
print $com[rand(0,count($com) - 1)];
?>
同じページに二つ呼び出すと
どちらも同じテキストがランダムに出てしまいます。たとえば
テキスト1
テキスト1
再度読み込んで表示させてみても
テキスト2
テキスト2
となってしまいます。完全ランダム表示にするのは
どうすればいいでしょうか?
0438nobodyさん
04/11/09 22:20:10ID:???srandだけrequireする側でやれ
1.436のソースからsrand部分を↓の場所に移動さす
2.残りをrand.phpとする
<?php
srand((double)microtime()*1000000);
require 'rand.php';
require 'rand.php';
?>
0439nobodyさん
04/11/09 22:33:26ID:???早速質問です。
$file = "ccc.cgi";
if(get_magic_quotes_gpc()){
$ranking = stripslashes($_GET[aaa']);
$homename = stripslashes($_GET['bbb']);
}
$aaa = htmlspecialchars("$aaa");
$bbb = htmlspecialchars("$bbb");
$ok="http://";
if($ranking = $ok):
$fp = fopen($file, "w");
fwrite($fp, "<a href=\"$aaa\" title=\"$bbb\">$bbb</a>");
fclose($fp);
endif
?>
上のものは、http://〜〜〜?aaa=http://&bbb=ここに日本語
というふうにして、GETを使って、データを受け渡ししたいのですが、
ファイルにも上手く書きこめるのですが、bbb= で指定した値が日本語の場合、
文字化けして「ccc.cgi」に書きこまれてしまいます。
どこが間違っているのでしょうか?
ご指摘お願いします。
0440nobodyさん
04/11/09 22:52:24ID:???ユーザがパスワードを忘れた場合、DB上のデータは暗号化されています。
どうやってパスワードをゲットするのでしょうか。
0441nobodyさん
04/11/09 22:58:15ID:???MD5ハッシュがどういうものか理解してれば、
>どうやってパスワードをゲットするのでしょうか
なんて思わない。運用上で新規のパスワードを管理者が登録して、
あとでユーザの好きなように再設定させる。
0442nobodyさん
04/11/09 23:15:35ID:???>なんて思わない。運用上で新規のパスワードを管理者が登録して、
>あとでユーザの好きなように再設定させる。
ユーザが再設定したPASSは管理者は関与しないんですか?
ユーザが設定したPASSをユーザが忘れた場合はどうするんでしょうか。
0443nobodyさん
04/11/09 23:18:54ID:???0444411=417=419
04/11/10 00:00:20ID:???できました。やっと…。
結局 PHP4.3.9 のソースのext/gd ディレクトリの中身を /usr/local/include/php/ext/gd
へコピーしてビルドする方法で上手くいきました。
しかし、pear install pdflibだけで上手くいく環境ってなんでしょうか?
参考までに教えていただけませんか。
>>425
pdf_fit_textlineという関数が非常に便利なのですよ。
0445nobodyさん
04/11/10 01:09:12ID:???>>441を繰り返す。
つか、生パスワードがどうしても必要だと思えるなら、照合用のハッシュ以外に
管理用として、セキュリティレベルの高いところに生パスワード保存しといたら?
「どうしても必要だと思う」運用や根拠を熟考すべきだと思うが。
0446nobodyさん
04/11/10 01:21:47ID:???ttp://neta.ywcafe.net/000122.html パスワードの危機(その1) − きっかけ
http://neta.ywcafe.net/000123.html パスワードの危機(その2) − あるべき姿
0447nobodyさん
04/11/10 02:58:37ID:???と出てしまうのですが、
http://members.lycos.co.uk/dachshund/modules/newbb/viewtopic.php?post_id=84&topic_id=84&forum=6
とzlib.output_handlerの説明を見比べてたんですが、いまいちよく分かりません。
ob_gzhandlerがmb_output_handlerの後に使えなかった、これはどう対処すればいいんでしょうか?
php.iniの設定は以下のようになってます。(EUCスクリプトをEUC出力してます)
output_buffering = Off
output_handler = mb_output_handler
output_handlerだけコメントアウトして
zlib.output_compression = On
zlib.output_handler = mb_output_handler
を加えたんですが、ちっとも変わりません。どなたかアドバイスいただけると助かります。
0450nobodyさん
04/11/10 03:50:52ID:???0451429
04/11/10 04:45:07ID:???律儀やね
>>436
srand()の意味が分かってないのでマニュアルを読んだ方が良い。
あと、今回のようなケースではshuffle()使った方が楽。
ランダムで吐き出す数が決まってるなら、array_rand()でも良い。
>>439
urlencode()
>>440
暗号化には2種類あって、複合化できるものとそうでないものがある。
md5()は後者。
そもそも、複合化できるなら暗号化する意味がない。
0452429
04/11/10 04:46:27ID:???最新レス取得せずに書き込みしてしまいたくさんカブってしまった。
0453nobodyさん
04/11/10 05:17:03ID:???○復号
0454nobodyさん
04/11/10 07:42:04ID:???0455416
04/11/10 08:36:32ID:???PHP のソースに含まれている GD を組み込んでいない場合は GD のヘッダは
要求されないので pear install pdflib で成功する。
または、
http://www.boutell.com/gd/
の GD をインストールしている場合はそちらの方のヘッダを使用できるよう
なので、pear コマンドでも成功すると思う。
0456軟式PHP
04/11/10 09:02:14ID:???頭悪そう・・・・
0459444
04/11/10 09:54:01ID:???なるほど。JpGraphもよく利用するので gd は迷わず有効にしてました。
l今回は勉強になりました。どうもありがとうございました。
ちなみに pdf_fit_textline 関数はlite版では動かなかった・・・・
ライセンス買えってかorz
0461nobodyさん
04/11/10 10:48:26ID:???0462nobodyさん
04/11/10 14:02:56ID:???0463nobodyさん
04/11/10 14:10:05ID:???0464nobodyさん
04/11/10 16:43:27ID:???HTML>
body>
ココからヤフー
<?
readfile("ttp://www.yahoo.co.jp");
?>
/BODY>
/HTML>
上のように自分ページに他のアドレスのページをくっつけたいのですが
readfile関数を使うと相対URLで書かれていたリンクや画像が自分のURLになってしまうので
404エラーや画像が正しく出ません
絶対URLに直す方法を教えて下さい
あとreadfileで指定したURLがCGIなどで自動的にジャンプするときにはそのジャンプ先のアドレスを読み込み表示するようですが
ジャンプ先のURLの取得方法を教えて下さい
優しいかたおしえてください
0465nobodyさん
04/11/10 16:55:17ID:???0466nobodyさん
04/11/10 16:57:15ID:???> 絶対URLに直す方法を教えて下さい
正規表現で書き換え。この時点でreadfileで済ますのは難しくなるな。
> ジャンプ先のURLの取得方法を教えて下さい
HTTPヘッダのLocation: URL や HTMLヘッダのmeta refresh を使う場合がほとんどだから、
両方を自分で処理すればよい。
難易度がかなりアップしてるなぁ。人のページを取り込むなんてセコいことせずに
リンクだけ貼っておけばええやん<a href="〜">だけで済むぞ。良かったな!
0469nobodyさん
04/11/10 17:33:44ID:???0470nobodyさん
04/11/10 17:51:49ID:???0472464
04/11/10 18:31:53ID:???やさしい人おしえてください
0475nobodyさん
04/11/10 19:35:49ID:???php://input などで読み取ることはできないでしょうか?
0477nobodyさん
04/11/10 21:05:28ID:???ジャンプ先ってリダイレクト先のこと?
ヘッダにリダイレクトがあればそこに飛ばす。
それ系の説明したページは腐るほどあるからググれ。
時々リダイレクト先を相対パスで指す場合があるので、その辺注意。
0478272
04/11/10 21:23:43ID:???出力する方法ならよく記事になってるんですが・・
ちなみにテキストだけでいいんです。
0480nobodyさん
04/11/10 23:38:53ID:???$file = "ccc.cgi";
$aaa = stripslashes($_GET['aaa']);
$bbb = htmlspecialchars(urldecode($_GET['bbb']));
$ok="http://";
if($aaa = $ok):
$fp = fopen($file, "w");
fwrite($fp, "<a href=\"$aaa\" title=\"$bbb\">$bbb</a>");
fclose($fp);
endif
このようにしてみたのですが、上手く出来ません。
どこが間違っているのでしょうか?お願いします。
0481nobodyさん
04/11/10 23:55:25ID:MdRF7bmL再インストールしてみても復活できませんでした。
実際の操作としては php-4.3.9/ で make install を行いました。
どのようにすれば復旧できるでしょうか。
0483nobodyさん
04/11/11 02:12:24ID:???$aaa = $ok の時点で必ず $aaa は "http://" になり if 文は必ず true になり意味が無い
$aaa == $ok だとしても "http://" と比較するだけであり、リンクとなるのが <a href="http://" title="....."> しか有り得ない
なにがやりたいのかよくわからないが とりあえず上記の間違いは直しとけ……
0484481
04/11/11 02:17:33ID:???/usr/local/lib/phpディレクトリを削除して再インストールしたら復活しました。
0485nobodyさん
04/11/11 03:32:26ID:KRI/ACvqとやってもうんともすんとも言ってくれません。
system("dir");
とかは普通に動くのですが。
なにかオマジナイがいるのでしょうか?
0486nobodyさん
04/11/11 03:43:35ID:???なんでエラー処理をしないんですか?
なんで絶対パス・相対パスを考慮しないんですか?
0488nobodyさん
04/11/11 05:59:46ID:5oF+gWxQNULLで固定ですか?
わざわざNULLで初期値設定をしているプログラムをあまり見ないのですが…
0489nobodyさん
04/11/11 07:51:51ID:SAqbK5N3ごめんちん。
いけました。
0490nobodyさん
04/11/11 11:37:55ID:ilzje3xZとかやったあとに、そのURLから帰ってくる、html文を読むには普通のFgetSでいいんでしょうか?
0491nobodyさん
04/11/11 12:00:43ID:???0492nobodyさん
04/11/11 12:09:41ID:???>FgetS
キモイヨ
0493nobodyさん
04/11/11 12:15:19ID:???0494nobodyさん
04/11/11 12:16:22ID:???>FgetS
これって何言語の流儀?
0495nobodyさん
04/11/11 13:17:25ID:nmdKIJIz0496nobodyさん
04/11/11 14:22:58ID:???べつにいいけどさ、fgets()使うならポインタのオープンはfsockopen()でやった方が
タイムアウト処理とか楽だ。
0497490
04/11/11 15:28:36ID:ilzje3xZしました。
FgetSで取ってきたら、ぬるぽでした
>494
オレオレ流
0498nobodyさん
04/11/11 15:37:32ID:???0499nobodyさん
04/11/11 15:42:36ID:ilzje3xZかき方悪くてすまんですね
echo FgetS($fp,512);
しても表示されませんでした。
PHPだとなんていうんだい?
何もとって来れ無かったっていったほうがいいのかね?
厳密な定義のな言葉がわからないんで、気に触ったらすいませんね
0500nobodyさん
04/11/11 15:45:04ID:???Null Pointer Extensionって何?
0501nobodyさん
04/11/11 15:50:03ID:???他の部分でもエラーハンドリングを確実にしているのにも関わらず
fgetsの返り値がfalseでなくて空文字だったのだったら、
何も取れなかったということですね。
0502496
04/11/11 15:50:05ID:???PHPなら流れはこんな感じになるだろう。
$fp = @fsockopen();
socket_set_timeout($fp, 適当に);
fputs($fp, "GETなりPOSTなりお好きなように");
whileループとfgets($fp)組みあわせる等して色々;
fclose($fp);
ソケット使ってHTMLソース取得なんて他の言語も併せれば
資料いくらでもある。ググれ。
0503nobodyさん
04/11/11 15:57:23ID:ilzje3xZ色々ありが�d
ググって来ます
0504nobodyさん
04/11/11 16:03:15ID:???普通に$fp=@fopen($url,"r");
と書いてたけど、fsockopen()がいいんだ。。。
次からそうします。
ところで、3行目のfputsはどこへ書きだしてるの?
0506nobodyさん
04/11/11 16:44:22ID:???fopenとfsockopenはまったく違うものだよ。
fopenではURLを開くけどfsockopenはIPアドレス(又はドメイン)を指定して開く。
fputsは開いたポートからサーバーへデータを送っているって感じ。
前にここでサンプル晒したんだけどなぁ、前スレで、、
どうしても見つからないようであればどうぞ。
あまりいいサンプルではないけど。
ttp://f9.aaa.livedoor.jp/~fcafe/fbox/lib/sock.phps
0509nobodyさん
04/11/11 18:00:40ID:???$contents = file( "http://なんたら" );
if ( $contents===false) {
// タイムアウトかURL not found
}
きちんとやろうとすると508のスクリプトになるのかぁ。ちょと大変。
0510503
04/11/11 18:35:31ID:ilzje3xZありがとう
0511軟式PHP
04/11/11 18:48:54ID:???■ このスレッドは過去ログ倉庫に格納されています