【PHP】質問スレッドpart16【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/04/07 01:06ID:HTcWOpWf上級者用や雑談スレを立てたくなった場合は後から適宜立ててください。
■本家
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-5
0232nobodyさん
04/04/15 16:23ID:???ごめん、俺頭悪いんで、あなたの状況がいまいちわからん。。。
>text/html 以前なのでソースが表示されてしまいます
ってどういう状態?
>そうすると配列の中身が改行されないで表示されてしまいます
print_rの出力で改行されないって話?
それはブラウザがHTML的にレンダリングしてるからじゃないの?
ソースを見るか、print_rの出力前後に<pre>タグいれるかしたら解決しない?
なんせ理解しきれてないので見当違いなら悪かった。
0233nobodyさん
04/04/15 16:36ID:???説明不足ですみません...
>> text/html以前
というのは、ヘッダーを出す前ということです。
Content-Type : text/html\n\n
を出す前に print_rするとhtmlがソースで出てしまうので、変数にデバッグ情報を格納して
HTMLの中で表示したいという意味です。
print_rみたいなのの内容を変数にいれて、<pre></pre>で囲ってもなぜか、ちゃんと
改行されないのです。
print_rやvar_dump()の結果など変数に入れられないので困っています。
やりたいことは、ただ変数や配列の中身を調べたいだけなのですが...
0234nobodyさん
04/04/15 17:00ID:???>$debug .= var_export($str);
多分、var_export()の第2引数のところをよく読めば解決。
http://www.php.net/manual/ja/function.var-export.php
あとは出力バッファリングを制御して、var_dump使う手もある。
0235nobodyさん
04/04/15 17:03ID:???ただこれはphpinfo自身もヘッダー出力するのでダブって出ちゃうけど、
ブラウザが宜しく表示してくれるので、簡易的には使える。
0236nobodyさん
04/04/15 17:31ID:???$debug .= var_export($str, TRUE);
にしてみました。うまくいってないようです。
引き続き調べてみます。
>>235
> phpinfoに引数与えて、変数のあたりの項だけ出力つうのもあるな。
そんな方法もあるのですね試してみます。
preで表示されない件は、どうやら以下のように指定することで解決したような
感じです。xhtmlとかcssの新しいので仕様が変わったんでしょうか...
<pre style="white-space: pre">
0237nobodyさん
04/04/15 17:36ID:???ふたば(レッツPHP)の画像うpろだに、
携帯からアクセスるることは出来ないのでしょうか?
0239nobodyさん
04/04/15 17:45ID:???0241nobodyさん
04/04/15 18:04ID:???その人にきくのがスジってもんだろ
0242236
04/04/15 18:49ID:???調べたい配列を Debug($array); しているのですが、グローバルで指定してるはずの
$debug_output に何も表示されません。
少なくとも
マニュアルなど見てもこれでOKなはずで、何が悪いのかさっぱりわからないのですが...
どんな原因が考えられるのでしょうか?
少なくとも function Debug called: と表示されなくてはいけないはずなのに
function Debug($tmp)
{
global $debug_output;
$debug_output .= "function Debug called:\n";
$debug_output .= var_export($tmp, TRUE);
}
0243236
04/04/15 18:58ID:???Debug($array); を読んでいる関数の中で global $debug_output;
していなかったためでした...
うぅ、むずかしぃ。
お騒がせしてすみません。
0244nobodyさん
04/04/15 19:03ID:???ついでに。
上手くいったら判ると思うけど、var_dumpの出力と
var_exportの出力とは同じものではないので、
さっきも書いたけどvar_dumpの出力をバッファリングして
処理するつうのも試したら良いよ。
<?php
ob_start();
$ary = array(1,2,3);
var_dump($ary);
$dump = ob_get_contents();
ob_end_clean();
?>
<html><head><title>TEST</title></head>
<body><?php echo $dump; ?></body></html>
0245nobodyさん
04/04/15 22:41ID:???グーグルとかの検索エンジンにはひっかからないですよね?index.phpみたいなの。
でも静的なhtml内に部分的に埋め込んだ場合は、
PHPによる置き換え箇所の文字列も検索にちゃんとひっかかるんでしょうか?
簡単な日記更新用のスクリプト書いて、自動でログを読み込ませようとしてるんですが、
検索にひっかからないようなら、.htmlの完全に静的なファイルを、更新するたびに毎回書きださなきゃと思って。
cgiなら少しはさわったことあるけど、phpはこれからはじめようと思って…。
よろしくおねがいします。
0246nobodyさん
04/04/15 23:11ID:???プログラマならもう少し論理的に考えてみましょう。
htmlファイル、HTMLにPHPを埋め込むタイプ、PHPでHTMLを出力するタイプ。
検索エンジンがこれらのファイルを呼び出すと、HTTPヘッダ部分・ボディ部分が返ってくるわけです。
ボディ部分は出力のタイプによって変化しているわけじゃないのはすぐ分かると思います。
となると、違いがあるとすればヘッダ部分だけになります。
ところが、header()関数というものが存在し、これを用いてヘッダ部分をも統一することができるわけです。
困ったことになりました。>>245さんの質問の前提とも言うべき事が破綻してしまったのです。
いや、まぁグーグルだけを気にするならHELPにそのまんまの答えが書いてあるわけだが。
0247nobodyさん
04/04/15 23:36ID:???>PHPでhtml部分全部表示させた完全に動的なページって、
>グーグルとかの検索エンジンにはひっかからないですよね?
そんなことはないよ。まあロボットの中には拡張子で
動的コンテンツだと思われるものを除いて収集する、
性能の余り良くないものもあったけど。
>でも静的なhtml内に部分的に埋め込んだ場合
ここで前述のコンテンツの作りと「違う場合」と思ってるのは間違った理解。
0248nobodyさん
04/04/15 23:48ID:???プログラマじゃないです、只の素人です。
なのでheader()関数云々などよくわかりませんでしたが、
書き込みを見て色々と検索で調べてみました。
結果、
http://www.sem-research.jp/sem/seo/20030926003954.html
ここなどを見ると僕が思ってたほどの問題はないですねー。
urlに引数を付けないトップページだけ検索にかかればいいし。
どうもありがとうございます。
0250nobodyさん
04/04/16 04:57ID:52nqSZp9眠くて頭が働きません。。。
だれか
http://www.aaa.co.jp/bbb/ccc/ddd/eee
から、www.aaa.co.jp/bbb/ccc/ddd
を、取り出す方法を伝授してださい。
つまらない質問ですみません。
0252nobodyさん
04/04/16 05:07ID:52nqSZp9と、あれやこれやで、夜が明けちゃいました。(*ノ-;*)エーン
0253nobodyさん
04/04/16 07:14ID:???その書き込みだけじゃ、いまいち抽出条件がわからんが、たぶん、
$a="http://www.aaa.co.jp/bbb/ccc/ddd/eee";
ereg('^http://(.*)/[^/]*$',$a,$r);
echo $r[1];
かな。
0255nobodyさん
04/04/16 08:54ID:???ワロタ
0256nobodyさん
04/04/16 11:51ID:???0257nobodyさん
04/04/16 13:08ID:???0259nobodyさん
04/04/16 14:25ID:7NgfJvTRこういう関数もある
<?
$url = "http://www.aaa.co.jp/bbb/ccc/ddd/eee";
$parse_url = parse_url($url);
$dir_name = $parse_url[host].dirname($parse_url[path]);
echo $dir_name;
?>
0261nobodyさん
04/04/16 14:33ID:???くらいにインターフェースがスマート&簡素化されていないPHPが悪いんですよ!
0263nobodyさん
04/04/16 16:40ID:???0265nobodyさん
04/04/16 20:49ID:???NPO広場
http://www.npo-hiroba.or.jp/cgi-bin/nposearch/npo_top.cgi
ここの検索結果の団体詳細を
全てローカルに落とすことは出来ませんでしょうか?
アンケート調査を行いたいのですが、
ここから手動でデータを落としていると
それだけで膨大な時間がかかるので。
わかる方いたら教えて下さい
0266265
04/04/16 21:22ID:???urlのid=の所を指定したら出来ました
自己解決です
0267250
04/04/16 23:11ID:???いま、戻りました。
あの後、置き換える関数やら、最後の位置を取る関数やらを使って一応出来て
そのまま、寝ちゃいました。
教えていただいた関数も方がスマートなので使わせていただきます。
もう寝ます。(ゝ_ξ) ゴシゴシ
0269nobodyさん
04/04/17 20:15ID:???の、patternとして、「辞書配列hoge」の「要素hage」を使いたいのですが、
どういった記述をすればよいのでしょうか?
0270269
04/04/17 20:22ID:???preg_match ("/".$hoge['hage']."/",$subject)
であっけなくできたわ。
0271nobodyさん
04/04/17 21:30ID:???require "setting.inc";
echo "ようこそ";
みたいな感じでで共通で使う変数を羅列した設定ファイル(setting.inc)を読み込もうとしているのですが…
setting.incの中身が全部そのままブラウザに吐きだされてしまいます…
$data_dir="/data/"; $imagefile="img/";ようこそ
↑こんな感じ
こんなはずではなかったのですが…
どうすればよいのでしょう…
0272nobodyさん
04/04/17 21:56ID:???includeされるファイルも、ちゃんとPHPスクリプトにしてるかい。
要は<?php ?>で囲んどるか?
# おっちゃん、短縮形は好かんぞ
0273269
04/04/17 22:22ID:???PHPでWEBメーラーを作ろうと目論んでいるのですが、
メールの受信処理を行うには、どうすればよいのでしょうか?
0274nobodyさん
04/04/17 22:26ID:jFDbaWFj0278nobodyさん
04/04/18 04:09ID:???うまくできません。
下のコード、どこがおかしいんでしょうか?
$filename = 'test.txt';
if (!$handle = fopen($filename, 'w+')) { //←ここの条件分岐をスルーせずに
echo "Cannot open file ($filename)"; //ブラウザにコレが返ってくる。
return;
}
if (!fwrite($handle, "ほげ")) {
echo "Cannot write to file ($filename)";
return;
}
fclose($handle);
0279nobodyさん
04/04/18 04:30ID:???何らかの要因でtext.txtが新規作成できない。
ディレクトリのパーミッションとかそんな感じ。
PHPの動作モードとか、どういった権限のユーザで
動いてるのか等も関係するけど、その辺は環境毎に
違うので管理者に訊くなりして、自分で調べてね。
0280nobodyさん
04/04/18 12:48ID:???ポート番号を取得する関数とかないんですか?
0282280
04/04/18 13:32ID:???説明下手ですいません。
httpデーモンが動いているポート番号(80など)を取得したいのです。
自分の環境が80では無く、可変なので。
0284nobodyさん
04/04/18 13:40ID:???$_SERVER["SERVER_PORT"]
ちゃうの?
0286nobodyさん
04/04/18 13:53ID:???複合化できるのは無しでお願いします。
md5って
$pass="a8o4hn&$NKJnhsu5";
$md5_pass=md5($pass);
こんなので出来るんですか?
0287nobodyさん
04/04/18 13:53ID:1szp522M自宅鯖でPHPとMysqlを使っています。
下記のように書いたのですが、13行目でエラーが出てしまいます。
やろうとしていることはテーブルにあるデータを読み出して、カウントした数字を出したいのですが、
一体どうすれば・・・・
<html> //一行目
<head>
<title>test</title>
</head>
<body>
<table border="1">
<tr><td>ID</td><td>名前</td><?php
$con=mysql_connect("localhost","root","root");
mysql_select_db("kisop",$con);
$sql="SELECT * FROM test_table LIMIT 10";
$cnt="SELECT COUNT * FROM test_table";
$cnt1=mysql_query($cnt,$con);
print("データ件数は".$cnt1"件です"); //13行目
$res=mysql_query($sql,$con);
while($row=mysql_fetch_array($res)){
print("<tr>");
print("<td>".$row["id"]."</td>");
print("<td>".$row["name"]."</td>");
print("</td>");
}
?>
</table>
</body>
</html>
0288nobodyさん
04/04/18 13:54ID:???↓
print("データ件数は".$cnt1."件です");
凡ミスですな
0289280
04/04/18 14:03ID:???$_SERVER["SERVER_PORT"]で上手くいきました。
// マニュアル読まないといけませんね。
0290nobodyさん
04/04/18 14:04ID:1szp522Mエラーはでなくなったんですが
データ件数は件です と表示され、数字が出てきません・・・
こっ、これは一体なぜでありましょうか?
0291nobodyさん
04/04/18 14:22ID:???ありがとうございます。
ディレクトリのパーミッション違いで解決しました。
ただ、もうひとつ問題がわき上がって、
fopenで開く時の$filenameが
$filename="/test.txt";
とか
$filename="http://hoge.com";
などの絶対パスだった場合はオープン出来ないんですけども、
これは鯖にインスコされてるphpの設定ファイルに基づいた仕様ですか?
うちはレンタル鯖なのでもしそうなら諦めた方がよさそうですが。
0292278=291
04/04/18 14:23ID:???0293278=291
04/04/18 14:26ID:???×
$filename="/test.txt";
とか
$filename="http://hoge.com";
↓
○
$filename="/test.txt";
とか
$filename="http://hoge.com/test.txt"; //←
0295nobodyさん
04/04/18 14:47ID:???具体的には
<?xml version="1.0" encoding="UTF-8"?>
<test>
<hoge>geho</hoge>
<foo>bar</foo>
</test>
$test[hoge] = "geho";
$test[foo] = "bar";
みたいな感じにしたいんですが…。
0296nobodyさん
04/04/18 14:49ID:???0297nobodyさん
04/04/18 14:53ID:???open_basedirディレクティブで範囲を制限してると思われ。
http://www.php.net/manual/ja/features.safe-mode.php
前の動かないってやつもそうだけど、ちゃんとエラーが
出力されているので、レポーティングレベルきつくして
ちゃんと見れ。特にPHPに慣れてない場合は。
http://www.php.net/manual/ja/function.error-reporting.php
http://www.php.net/manual/ja/security.errors.php
(下はデバッグと運用時とでは、エラー出力の考え方が違うよという説明)
0299nobodyさん
04/04/18 14:58ID:???mysql_query()は、クエリーが成功したかどうかを 表すために
TRUE(非ゼロ)またはFALSEを返します。(マニュアルより)
>>291
> $filename="/test.txt";
パーミッション
>$filename="http://hoge.com/test.txt";
HTTPは書き込みのみ。ftp://ならうまくいくケースもある。
詳しくは、マニュアルの「サポートされるプロトコル/ラッパー」を参照のこと。
0300nobodyさん
04/04/18 15:00ID:???普通にリモートのファイルをテキストとして読んで、
そのテキストをxmlとしてパースして処理する。
xmlのパースについては何通りかあるので自分で調べてください。
# 標準のものは初めてだと使いづらいかな。PEARとかSimpleXMLを検討せよ。
0301299
04/04/18 15:03ID:???HTTPは書き込みのみ -> HTTPは読み込みのみ 、に訂正。
本家のchmマニュアルはまだ中国語になってるねぇ。
最初見たときやたらと英語の部分が多いなと思ったら、その後は漢字の部分多すぎ、と。
0303nobodyさん
04/04/18 15:59ID:1szp522M//セレクト代入
$sql="SELECT * FROM test_table LIMIT 10";
$cnt="SELECT COUNT * FROM test_table";
$cntdata=mysql_query($sql,$con);
$cntdata2=mysql_num_fields($cntdata);
$cntdata2=$cntdata+1;
print("データ件数は".$cntdata2."件です");
なんかもっとスマートにできないものかと・・・・
0304278
04/04/18 16:18ID:???あきまへん…
ルートフォルダのパーミッションを777にしてみても無理でした。
$filename="test.txt";
と
$filename="/test.txt";
のは全く同じ場所を指してるんですが、"/test.txt"みたいなルート参照の場合は、
やっぱりオープンエラーが出てしまいます。
0305nobodyさん
04/04/18 16:41ID:???ファイルシステムのルートとWEBサーバのルートを混同してませんか?
常識的なシステムなら
>$filename="test.txt";
>と
>$filename="/test.txt";
なんて変態な設定はされてないと思いますが。
0306305
04/04/18 16:42ID:???○ が同じなんて変態な設定はされてないと思いますが。
0307286
04/04/18 17:23ID:???でやってみたところ、うまく出来ました。
10万桁分ループ回しましたけど全然かぶってないです。
MD5が一番精度高いのでいいですか?
それと、md5($str)の使い方で合ってますよね?
もちろん複合化できませんよね?
0308nobodyさん
04/04/18 17:30ID:???>286にしてもお前さんが何がわからなくて何を聞きたいのか
わからないからレスがつかないんだと思われ
0310nobodyさん
04/04/18 18:05ID:???0312nobodyさん
04/04/18 18:13ID:???言ってる日本語がオカシイ。
それなら精度じゃなくて強度。
また必ずしも強度は単純に
「先頭何文字を見て暗号化」
に比例もしない。
0313312
04/04/18 18:15ID:???という意味か...精度つうのかな、それ。
少なくても強度の話をしたいのではなかったな、
そこは勘違いしてた。
0314286
04/04/18 18:24ID:???1桁〜10万桁の数字を試したけどハッシュが被ってなかった->先頭10万桁以上は見てくれてる
ということが言いたかったんです。
それで、本題なんですが、パスワードを暗号化して管理するのにはどのアルゴリズムがいいのでしょうか、ってことです。
今までcrypt使ってたのですが、さすがに8桁は少なすぎると思って・・・
それで、複合化できなくて、強度?が高いのはどれでしょうか?
0315nobodyさん
04/04/18 18:28ID:???データベースだから簡単にアクセスされないだろ?
って、安全面考えなさ杉?
暗号化するべきなのかなぁ?
でもそれだったらパスワード再発行がめんどいし
0316nobodyさん
04/04/18 18:37ID:???0317nobodyさん
04/04/18 18:37ID:???一度に一つ(一階層分)のディレクトリしか作成できないんですか?
hoge/hog/ho
と一気に作りたいんですが…。
0318nobodyさん
04/04/18 18:47ID:???0319nobodyさん
04/04/18 19:35ID:???ありがとうございます、できました。
っていうか、色々試してるうちに、どうやっても消去できないディレクトリとかができちゃったんですが(;´Д`)
FFFTP使ってるんですが、そのディレクトリとそれ以下のものがすべて削除できません。
練習用に作ったゴミフォルダだから削除したいのに。
とりあえず、削除したい大元のフォルダの属性は755になってます。
FFFTPで777とかにしようとしても755です。
これが原因なんでしょうか。
0322nobodyさん
04/04/19 01:24ID:???再発行ダメだろ。リマインダからランダムパスワードで上書きして通知とか、それが妥当では。
俺はパスワード問い合わせてオペレーターから「あなたのパスワードは~です」と返ってくる状態の方が怖いな。
1サービス1パスワードを全ユーザーが通しているわけではなく、他のサービスと共通化していたり命名則が一緒の場合があるから
暗号化しといた方が運営上のリスクは減るんじゃないの、と思うが。
0323nobodyさん
04/04/19 19:26ID:???DBには複合不可能のアルゴリズムで暗号化しておき、
アクセス時には入力されたパスワードを同じアルゴリズムて暗号化させて合致すればOK
パスワード再発行は、秘密の質問と答えを始めに決めさせておき、それと一致したら、ランダムパスワードで再発行
こういうのでいいんかね?
アルゴリズムは複合できないとなるとMD5が妥当かなぁ
0324nobodyさん
04/04/19 20:23ID:???HTMLのフォームから値を受け取って、コマンドラインプログラムを実行しているのですが、
このときの権限って何になるんでしょうか?
UNIXならhttpd.confでユーザとグループを指定できますが、Windows版では無理ですよね?
domainのAdministrator権限で実行したいコマンドがあるんですが、何か良い手は
無いでしょうか?
0327324
04/04/20 00:14ID:???ありがとうございます。
しかし、Apache用のアカウントを作るというのが???
Apacheのhttpd.confにApacheの実行権限を指定する
ところが無いと思うのですが・・・。
もう少しヒントをいただけませんか?
0328324
04/04/20 00:29ID:???事故レスです。
なんとなく分かりました。NTのApacheサービス用のアカウントを
作って、Domain Adoministratorsに所属させるということですね。
やってみます。
0329nobodyさん
04/04/20 19:05ID:nLs300iIprint"$host";
または
$host = $_SERVER['REMOTE_HOST'];
print"$host";
でリモートホストが取得できません。何も表示されないんです。
リモートホストの取得はどうやればいいんですか?
0330nobodyさん
04/04/20 19:29ID:WtUQqgHt恐らく
・DNS逆引きの設定が出来ていない
・ApacheならHostnameLookups Onという設定になっていない
とか、そういう事だと思います。
$_SERVER['REMOTE_ADDR']にはリモートホストのIPアドレスが格納されています。
このIPアドレスを指定して、DNS逆引きをする関数gethostbyaddrを呼び出せば、ホスト名を取得できます。
gethostbyaddr($_SERVER['REMOTE_ADDR'])を試してみてください。
http://php.benscom.com/manual/ja/function.gethostbyaddr.php
HostnameLookups On
0331nobodyさん
04/04/20 19:30ID:nLs300iI■ このスレッドは過去ログ倉庫に格納されています