トップページ⇒php
1001コメント289KB

【PHP】質問スレッドpart22【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/09/16 18:17:37ID:/HV017tY
・PHP全般の質問スレです。
・新規質問の方は上げてください。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
0545nobodyさん04/09/26 19:36:27ID:???
>>544
例えばこんな関数があるとする。

function check(){
 if( 送信されたフォームデータのチェック ){
  $flag = true;
 }
 if( $flag == true ){
  return true;
 } else {
  return false;
 }
}

これを使うスクリプトに http://hoge.com/check.php?flag=true なんてのを送られてきた場合、
フォームデータのチェックが通っても通らなくても true が返ってしまう。
これじゃ危険だろ?この返り値がtrueならデータの削除処理などをする、なんて時とかは特に。
0546nobodyさん04/09/26 19:42:30ID:???
まぁそんなヘンテコは関数作る奴は居ないけどな
いや、例としては分かるけど
0547528=54004/09/26 20:04:13ID:???
>>541
すいません
528=540です。

>>542
> {}? 最短マッチ(? がないと最長マッチになる)

最長マッチ入れてみましたがリンクが貼られませんでした。

$text = ereg_replace("{\n}(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$text);
0548nobodyさん04/09/26 20:13:53ID:???
http://php.s3.to/man/ref.pcre.html
こっちこっち
0549nobodyさん04/09/26 20:17:22ID:???
何でそんなに回りくどいことしようとしてるの?
改行の次は行頭だから、
^(https?|ftp)
こっちじゃ駄目なん?
0550528=54004/09/26 20:32:42ID:???
>>548
>>549

その二つを織り交ぜて変更しました。

$text = preg_replace("^(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$text);

ついにエラーが出て動かなくなりました。
すいません、僕は愚図でノロマな亀です…。
0551528=54004/09/26 20:43:37ID:???
あ、エラーは出てないや。
ただ、$textが空っぽになった模様。
0552nobodyさん04/09/26 20:46:18ID:???
何がしたいのか見えてこない
0553nobodyさん04/09/26 20:50:23ID:???
そりゃあーた
preg_replace_allしないと
0554528=54004/09/26 20:50:40ID:???
>>552
単純に、頭がhttp|ftpで始まる行があったら自動で<a>タグのリンクをくっつけたいんです。

$text = ereg_replace("(^https?|^ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$text);

行頭の「^」の位置を増やしてみたけどスルーされるなあ。
055555304/09/26 20:52:26ID:???
スマン、素で間違えた
0556nobodyさん04/09/26 20:52:52ID:???
馬鹿がいっぱいw

$str="test
test
http://www.google.jp/
test
test
";
$str=explode("\n", $str);
foreach($str as $line){
$line=ereg_replace("^(https?|ftp)://([^:/]+)(:(\d+))?(/[^#\s]*)(#(\S+))?", "\\0", $line);
echo $line;
}

いきなり答えだけど、一個一個調べろ。
0557nobodyさん04/09/26 20:54:15ID:???
いちいち配列に戻して処理なんて基地外みたいなことしてる奴に言われても説得力ねーーーw
055855604/09/26 20:54:45ID:???
あぁ、アンカーで囲むの忘れてた。
答えになっとらんね。

そこは自分で解決してみ〜。
因みに、もっともっと他にやり方はいっぱいある。
もっとスマートな方法も。。
055955604/09/26 20:55:13ID:???
>557
じゃあ答えろよ。
0560nobodyさん04/09/26 20:56:17ID:???
配列に戻すなんてpreg_replaceの用法全然理解していないバカが何粋がってんだか
0561nobodyさん04/09/26 20:57:55ID:???
556のような教えたがりチャンっていつでもいるなぁ…
0562nobodyさん04/09/26 20:59:27ID:???
>>556
ワロタ
0563nobodyさん04/09/26 21:00:35ID:???
>>547-561
お前ら頭おかしんじゃねーの?
PHPどころか正規表現すら分かってないんじゃない?
0564nobodyさん04/09/26 21:01:45ID:???
かあいそう(←なぜか変換できない)な528に乾杯。
0565nobodyさん04/09/26 21:07:40ID:???
>>563
釣り宣言そろそろか?
0566nobodyさん04/09/26 21:09:41ID:???
も・・もうちょい・・・。。
0567528=54004/09/26 21:11:55ID:???
>>556
すいません!
やはり行頭を表す「^」が入ってるとリンクされないでスルーされます
(「^」外すとちゃんとアンカーで囲むようにはできました)

どこがおかしいんでしょうか。

$text=explode("\n", $text);
foreach($text as $line){
$line=ereg_replace("^(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"<a href=\"\\1\\2\" target=\"_blank\">\\0</a>", $line);
$temp_text= $temp_text.$line;
}
$text=$temp_text;
0568nobodyさん04/09/26 21:16:51ID:???
528空気読まずに元気に質問ワロタ
0569なちじょあ ◆yEbBEcuFOU 04/09/26 21:17:04ID:???
( ● ・3・ ● ) エェー これならどうかNA
$text = ereg_replace("([^[:punct:]]+)(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
"\\1<a href=\"\\2\\3\" target=\"_blank\">\\2\\3</a>", $text);
0570nobodyさん04/09/26 21:18:18ID:???
おまいら・・。
0571528=54004/09/26 21:29:37ID:???
>>569
できました!

というか文中の\nを<br>に変換してたのを忘れてました!

なので>>556さんのでも動くと思います。
ありがとうございます!
0572nobodyさん04/09/26 21:34:34ID:???
時間かかったけどよかったね
0573nobodyさん04/09/26 21:37:16ID:???
死ねよカス
0574nobodyさん04/09/26 21:37:38ID:???
良い勉強になったと思う。
0575nobodyさん04/09/26 21:39:27ID:???
こいつ自身じゃ何もやってねーじゃねーか。
教えるだけ無駄。
0576528=54004/09/26 21:40:33ID:???
ここは僕の顔にめんじて引いてください!
争いは何も生まない!
0577nobodyさん04/09/26 21:41:41ID:???
ワラタ
0578nobodyさん04/09/26 22:01:59ID:???
ワロタ
0579nobodyさん04/09/26 22:04:56ID:???
>>578 イヨウにでかく見える
0580nobodyさん04/09/26 22:05:57ID:???
>>543-544
超FAQなんで放置されてただけですよ

>>545
そのスクリプトなら問題ではない
なぜならregister_globalsディレクティブがonの時に登録される変数は、
スーパーグローバル ではなく、単なるグローバル変数。
故にcheck関数内の別スコープでは$flagは現れない(=未定義)
0581nobodyさん04/09/26 22:07:25ID:???
珍しく真面目な野郎が現れたぞ。
0582nobodyさん04/09/27 00:39:05ID:???
>>519
7階層ならTCP/IPだったか?OSI参照モデルの方じゃ無かったのか?
0583nobodyさん04/09/27 00:50:32ID:???
( ゚Д゚)ポカーン・・
また知ったかが
0584nobodyさん04/09/27 02:02:10ID:???
>>582
PHPのスレじゃなくて専用スレでやってくれ
0585nobodyさん04/09/27 03:02:56ID:???
>>582
HTTPは5層(セッション層)だと学校で習わなかったのか?

とりあえずe-wordに逝けよ無知野郎
0586nobodyさん04/09/27 12:03:59ID:???
>583
メール欄見ろ。
0587nobodyさん04/09/27 18:19:29ID:???
session_start();がすでに開始されているかどうか確認する方法で
なるべくスマートなやり方ってありませんか?
0588nobodyさん04/09/27 18:45:43ID:???
>>585
HTTP は アプリケーション層からセッション層までを跨いだプロトコルです
0589nobodyさん04/09/27 19:14:09ID:???
>>587
セッション変数を発行してそれをプリントしてみる
0590nobodyさん04/09/27 19:39:22ID:???
>>587
if (session_id()) {
    echo "セッションが開始されている";
} else {
    echo "まだセッションが開始されていない";
}
0591nobodyさん04/09/27 20:25:09ID:???
>>589>>590
お二人ともありがとうございました。

session_idの方が、作ってるものの条件に
合っていたので、そっちでやってみます。
0592nobodyさん04/09/27 22:06:18ID:???
なんか上のほうでやってるURLのタグ置換の話だけど
URLの最後が .jpg や .gif だったときには img タグ、
それ以外は a タグに置換するようにすれば、あんな
ごちゃごちゃしたコード書かなくても済むよね。
0593なちじょあ ◆yEbBEcuFOU 04/09/27 22:09:01ID:???
>>592
( ● ・3・ ● ) エェー よく読めYO
0594nobodyさん04/09/27 22:17:50ID:???
Win2000Pro+PHP5.0.1+Apache2で開発中です。

FTPサーバ”nekosogiftpd 1.20”をローカルに立ててテストしてるんですが、
PHPのFTP関数の返り値がおかしいんです。

<?php

$ftp_con = ftp_connect('localhost');
ftp_login($ftp_con, 'hoge', 'hoge');

$result = ftp_chdir($ftp_con, 'hoge');
var_dump($result):

?>

このようなスクリプトを実行すると、ftp_chdirの成否に関わらずFALSEが返ってくるんです。
成否はFTPサーバのログやftp_pwdで確認できます。
どんな原因があるんでしょうか。
0595nobodyさん04/09/27 22:51:59ID:???
$_POST[mail]みたいに'や"でくくらない書き方って
あるんですか?
0596ぼるじょあ ◆yEbBEcuFOU 04/09/27 23:01:01ID:???
( ● ・3・ ● ) エェー オマイはマニュアルを読まないのかYO
http://www.php.net/manual/ja/language.types.array.php
0597nobodyさん04/09/27 23:12:13ID:???
>>596
おお、ありがとうございます。
0598nobodyさん04/09/28 00:31:24ID:???
includeとかreadfileでリモートファイルを読みたいのですが、
難なくできるファイルと403エラーになるファイルがあるのはなぜですか?
$result = file('http://...php?hoge=piyo);
↑こんな感じで例えば検索サイトの抽出結果などを取り出したいのですが。
0599nobodyさん04/09/28 00:51:31ID:???
>>595
非推奨ですが読んでくれます。
でも、できれば"(より望ましいのは')で括るべきでしょうね。
0600nobodyさん04/09/28 01:01:05ID:???
>>593
検索サイトの利用規約違反だからです。
0601nobodyさん04/09/28 01:07:11ID:???
>>600
例えばって言ってるのにw
0602nobodyさん04/09/28 02:10:20ID:???
>>598
403エラーの意味を考えろ。
HTTPの知識つけてからPHPしろや。
0603カポコン04/09/28 02:24:07ID:???
次の脳内患者さん、どうぞ。
0604nobodyさん04/09/28 04:20:38ID:???
>>595
"###$_SERVER[HTTP_HOST]###" のように文字列中にある場合は Notice も出ない。
でもやめといた方がいい。
0605nobodyさん04/09/28 06:21:42ID:???
いろいろ考えたけど僕の頭では考え付きませんでしたのでおしえてください。

phpで書いたソースのhtmlのみを.htmlとしてcopyすることってできますか?
060660504/09/28 06:57:08ID:???
解決しました
0607nobodyさん04/09/28 10:32:13ID:V6CF9F0W
>>594
レンタル鯖に同じことやったが問題なかった。
nekosogiftpdが正しい値を返してないのかもな。
0608nobodyさん04/09/28 10:51:20ID:???
ん、やっぱFTPDの問題だな。
QUICKFTPでも問題ないがnekosogiだとfalseが返ってくる。
0609nobodyさん04/09/28 17:56:23ID:???
648 :非通知さん :sage :04/09/28 17:46:39 ID:qmurh+C2
ここでマジレス
↓


649 :非通知さん :sage :04/09/28 17:47:16 ID:9ReSWf70
うんこはいいにおい
0610nobodyさん04/09/28 18:23:39ID:wWo5p4+T
暗号化/複合化の処理を行いたいんですが、
PHPにディフォルトで入ってる関数って一方向暗号化のものしかないんで困っています。
レンタルサーバなので mcrypt 入れる訳にもいきません。

自前で暗号化/複合化関数つくってる方っていないですか?
0611nobodyさん04/09/28 18:26:41ID:???
複合化できるの使うなんて大した度胸だねぇ
0612nobodyさん04/09/28 18:45:33ID:???
>610
どんなレベルで秘匿する必要があるデータかによる。
単に平文流れるのが嫌だってんなら、
base64のencode/decodeでいいし(極端すぎ)
0613nobodyさん04/09/28 18:49:59ID:???
PostgreSQLに関する関数を使ったPHP、hoge.phpを、

php hoge.php

とコマンドして実行すると、自分の意図どおりに動くのに、

http://〜〜/hoge.php

のような感じで、ApacheでPHPを実行すると、SQLに接続できないです。
原因をご存知でしたら教えてください。httpdを再起動したりしましたが無理でした。
061461304/09/28 19:13:42ID:???
自己解決いたしました。すみません
0615nobodyさん04/09/28 19:15:33ID:wWo5p4+T
>>611-612
ありがとうございます,気持ち暗号化しておきたいだけなんで・・・
だったら base64+α くらいでいいんですかね,やっぱり.

でも結構本気の暗号化が必要で,mcrypt使えない人とかは
どうしてるんでしょう?
0616nobodyさん04/09/28 19:37:04ID:???
自己解決した人、1行くらいで
凡ミスの理由を書いて欲しい・・・って
思うのは私だけ?
0617nobodyさん04/09/28 19:40:30ID:???
>>616
普通は自己解決しても、聞いた限りは書くべきだよな。
0618nobodyさん04/09/28 20:05:25ID:???
きっとApacheが動いていたユーザ(nobody)でSQLサーバに接続しようとした。
userを指定したか、SQLサーバにnobodyで接続できるようにしたかのどちらかじゃないかな。
0619nobodyさん04/09/28 21:20:15ID:???
>>615
気持ち程度でもいいのなら、元の文字列から1バイトずつ取り出して
適当な値とxorするとか、足し算するとか、してみてはどうだろう?
それをbase64変換して流せば、例えデコードされても
元のデータの意味は分かりづらくなると思うよ。
0620nobodyさん04/09/28 22:04:17ID:???
$text = mb_eregi_replace('([ァ-ヶー]{3,})', '<a href="search.php?key=\1" class="keyword">\1</a>', $text);
このような処理を考えているのですが、serch=?key=\1 の \1 を urlencode したいのです。

$text = mb_eregi_replace('([ァ-ヶー]{3,})', '<a href="search.php?key=' . urlencode('\1') . '" class="keyword">\1</a>', $text);
とやってみてもダメでした。

何か良い方法はありませんか?
0621nobodyさん04/09/28 23:52:31ID:???
PHPで、
スクリプトの終了時に呼び出すハンドラを設定することは
できますか?
0622nobodyさん04/09/29 01:16:23ID:???
>>615
普通にhttpsだろ。http://jp.php.net/openssl

さもなくばこの仕様書から実装しなさい。
http://info.isl.ntt.co.jp/camellia/CRYPTREC/2001/01jspec.pdf
0623nobodyさん04/09/29 01:20:41ID:???
>>620
消えろカス

>>621
マニュアル読めよ
http://jp.php.net/manual/ja/ref.funchand.php
062462004/09/29 01:55:26ID:???
>>623
解決しました。すいませんでした。
062562104/09/29 02:28:55ID:???
>623
register_shutdown_functionですね。
ありがとうございました。
0626nobodyさん04/09/29 02:36:18ID:VlQlAY+W
PEARのXML_RSS
http://pear.php.net/manual/en/package.xml.xml-rss.php
で、RSSの「content:encoded」を取得するにはどうすればよいですか?
0627nobodyさん04/09/29 15:52:26ID:LWHTYlg+
あるphpを設置したところ、

Querry Err
SELECT COUNT(*) CNT from CM_M

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/*****/www/ad/cm_list.php on line 80

などというメッセージがたくさん出てしまいました。
これはうまくMySQLにつなげてない事を示しているのでしょうか?
0628nobodyさん04/09/29 16:07:47ID:???
>>626
ソースのコメント読めば分かるだろ。
拾いたいモジュールがあればmoduleTagsプロパティに追加してやればいい。
つーかcontent:encodedうざくね。plain textと大差ないくせに。

<?php
    require_once 'XML/RSS.php';
    $rss = new XML_RSS('test.rss');
    $rss->moduleTags[] = 'CONTENT:ENCODED';
    $rss->parse();
    foreach ($rss->getItems() as $item) {
        print $item['content:encoded']."\n";    
    }
?>
0629nobodyさん04/09/29 16:09:44ID:???
>>627
英語が読めないので訳してくれ、ってことか?
cm_list.phpの80行目でmysql_fetch_array()に渡された引数は有効なMySQL result resourceではありません。
0630nobodyさん04/09/29 16:12:45ID:???
>>629
その前の query err も訳してやったほうがいいみたいだぞ。
0631nobodyさん04/09/29 16:12:50ID:???
>>627
SQL文が間違っているようだ。
文法的には問題ないので、 テーブル CM_M が未定義なんじゃないの?
0632nobodyさん04/09/29 16:23:22ID:???
>>627
DBのエラー処理しろよ
0633nobodyさん04/09/29 16:25:08ID:???

MySQLに聞いてみればいい。
063462704/09/29 16:38:50ID:LWHTYlg+
プログラムの文法自体が間違ってるんですか?
それならば私の設置したサーバーには合わない、という事ですね。
みなさんありがとうございました。
0635nobodyさん04/09/29 17:01:00ID:???
PHPで掲示板とかのログをテキストに保存するのに比べてMySQLに保存するのってどういう利点がありますか?
0636nobodyさん04/09/29 17:04:47ID:???
>>634
えええ?何を言ってるんだ君は。
最初にDBの下準備が必要なんじゃないか、という流れだよ。
0637nobodyさん04/09/29 17:05:57ID:???
>>635
データ量が増えた時に検索が早い。
0638nobodyさん04/09/29 17:17:33ID:???
>>634==635だろ
下らね
063963504/09/29 17:21:09ID:xRdAx0d3
>>638
いや違います。一応ID出しておきます。

>>637
ありがとうございます。
0640nobodyさん04/09/29 17:26:54ID:???
どのみちネタ質問だ。いいかげんウザイんで死んでくれ。
0641nobodyさん04/09/29 17:27:34ID:???
とっても無意味なIDと質問をありがとう
0642nobodyさん04/09/29 17:28:10ID:???
>>636
使い方が分からない→使えない
って事なんだろうから放っておけば
0643nobodyさん04/09/29 17:50:55ID:PVuY1v0f
include() とか require() って ファイルから読み込むのが普通ですが、
これを stringから読み込む方法は無いでしょうか?
0644nobodyさん04/09/29 17:59:21ID:???
>>643
http://php.s3.to/man/function.eval.html
■ このスレッドは過去ログ倉庫に格納されています