【PHP】下らねぇ質問はID出して書き込みやがれ 95
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/04/19(月) 09:15:05ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 94
http://pc11.2ch.net/test/read.cgi/php/1268835461/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0134nobodyさん
2010/04/27(火) 11:53:19ID:???【PHPのバージョン】5.2
UTF-8(BOMつき)のHTMLを読み込み、加工して出力を行っているのですが
どうやらBOMもしっかり文字として読み込んでしまっているようで、SJISなどに変換して出力した際'?'に化けてしまいます。
ファイルからテキストを読み込んだが時に、自動的にBOMを削除してくれる機能はないのでしょうか?
ざっとUTF-8 BOM PHP で探しまわったところ、先頭3バイトを調査してsubstrで削除しているところばかりだったのですが…。
(つまり無さそう?)
0135134
2010/04/27(火) 11:54:14ID:QEbg26q10136nobodyさん
2010/04/27(火) 13:14:55ID:???http://jp.php.net/manual/ja/function.mb-substitute-character.php
0137nobodyさん
2010/04/27(火) 15:33:48ID:Y8r8JnMJどうすると良いでしょうか?
0139nobodyさん
2010/04/27(火) 16:08:46ID:???0140nobodyさん
2010/04/27(火) 16:11:01ID:???01411/2
2010/04/27(火) 16:52:34ID:???【Webページ接続OS】Windows7、vista、XP
【phpバージョン】5.2
phpのセッション管理に関する質問です
ログイン管理にセッションを用いていて、認証フォーム→ログイン処理→ログイン後トップページという風に処理しています。
認証フォームで入力したIDとパスワードを、ログイン処理ページで処理してセッション変数を格納し、トップページへと繋げて、以降セッション変数で管理しているのですが、ログイン処理の時点でセッション変数に値が格納出来ていません。
もう一つ別のページでもセッション変数の格納を行っているのですが、そちらは特に問題なく動作しています。
そしてもう一つ、これらの問題はWindowsVISTA、XPのPCで接続した場合に発生し、7で接続した場合は発生しておりません。
まず、問題が発見されたほうのソースコードです。
<?php
$old_session_name=session_name('kaiin');
session_start();
//mysql接続クラス呼び出し
require_once "../php/dbh.php";
$dbh=new db();
$con=$dbh->db_connect();
if(!$result=mysql_query("select ~~~~~~ ")){
header("Location:http://");
}
01432/2
2010/04/27(火) 17:00:40ID:???$ent=hash_hmac(sha256,$_POST[post],2channel);
if($row[]===$_2ch){
$_SESSION[]='';
$_SESSION[]="$row[]";
$_SESSION[]="$row[]";
header("Location:http://");
}else{
header("Location:http://");
}
mysql_close($con);
?>
次に、問題が出なかった方のソースコードです
<?php
$old_session_name=session_name("php_exam");
session_start();
foreach($_POST as $key => $value){
$_SESSION[$key]=$value;
}
print <<< EOD
以下HTMLが続く
EOD;
?>
何故接続するPCの違い、ページの違いによって問題が発生するのかまるで分かりません。
ブラウザはIE、火狐、クロームを試しましたがどれも同じ結果でした。
ご教授お願い致します。
0144>>141
2010/04/27(火) 17:01:52ID:Yj0vX1vG0145nobodyさん
2010/04/27(火) 17:07:26ID:???if($row[]===$_2ch){
これは何してるかわかる?
$row[]なので、$row配列の最後尾に追加される。
たとえば、
$row[0],$row[1]
がある状態で$row[]とやると、$row[2]になる。
ので
$row[]===$_2ch
というのは
$_2chが「値無し」じゃないと当てはまらないはず。
結果的に$_SESSION[]="$row[]";
にはいらず、elseのほうに入ってしまっている。
0146>>141
2010/04/27(火) 17:11:36ID:???失礼しました、説明が足りませんでしたね
$_SESSION[]はや$row[]は2chに書く用に中の連想文字を消したもので、実際には
$_SESSION[2ch]や$row[2ch]のように、中に連想文字が入っている状態です。
分かりにくくて申し訳ないです;;
0148>>141
2010/04/27(火) 17:22:18ID:Yj0vX1vG確かにそうですね。特定されないようにするにも限度がありました。
ちょっと数点間違えがありましたので、修正して書き直します
<?php
$old_session_name=session_name('kaiin');
session_start();
//mysql接続クラス呼び出し
require_once "../php/dbh.php";
$dbh=new db();
$con=$dbh->db_connect();
if(!$result=mysql_query("select 会員情報を取ってくるSQL文 ")){
header("Location:http://エラーページへ");
}
$row=mysql_fetch_array($result,MYSQL_ASSOC);
$_2ch=hash_hmac(sha256,$_POST[post],2channel);//フォームに入力されたパスワードをハッシュ化
if($row[_2ch]===$_2ch){ //mysqlにあるハッシュ化されたパスワードと照合
$_SESSION[id]='id';
$_SESSION[id2]="$row[id2]";
$_SESSION[id3]="$row[id3]";
header("Location:http://会員ページへ");
}else{
header("Location:http://エラーページへ");
}
mysql_close($con);
?>
0149nobodyさん
2010/04/27(火) 17:24:33ID:???var_dumpでもしてみれば
0150nobodyさん
2010/04/27(火) 17:25:24ID:???通常なんのブラウザを使おうがPHPの動作には影響しない。
ブラウザで動作が変わると言うことは、既にセッションを噛んでいるか、ブラウザの設定による問題かと思う。
いったん、検証に使ったブラウザを再起動して、セキュリティレベルを合わせる。
で、その後に
if($row[]===$_2ch){
の中に入っているか確認する。
入ってるのなら
header("Location:http://");
の直前で
var_dump($_SESSION);
exit;
値がきちんと格納されているか確認。
次にheaderで飛ばした先で
var_dump($_SESSION);
で、先ほどと中身が同じか確認。
セッションを発行させるのは
www.example.com
headerで飛ばした先は
sub.example.com
など、飛ばす先のドメインが違ったりすると、同じサーバーでもサードパーティ製のクッキーということで、セッションを引き継げないことがある。
IEのセキュリティレベルが高いときとか。
提示された条件ではこれくらいしか言えない。
0151134
2010/04/27(火) 18:02:57ID:QEbg26q1レスありがとうございます。
その機能を使い、認識できない文字を"none"にし消してしまうのは、解決の1手段ではあると思います。
ただ、他の認識できない文字も消えてしまうという副作用も持っているため、なるべくなら
読み込み時にBOMが消えるようなやり方をとりたいと考えています。
0152nobodyさん
2010/04/27(火) 18:17:38ID:???0153nobodyさん
2010/04/27(火) 18:26:42ID:???$file = @fopen($filename, $mode);
$bom = fread($file, 3);
if ($bom != b"\xEF\xBB\xBF")
rewind($file, 0);
return $file;
}
全部読み込んで先頭みて消した方が早いかなぁ。
0154nobodyさん
2010/04/27(火) 19:29:17ID:???最近PHPの未来が心配になってきました
0156nobodyさん
2010/04/27(火) 19:58:11ID:???0157nobodyさん
2010/04/27(火) 22:14:35ID:VBIE6D7r【コード】
<?php
$xml = "http://gdata.youtube.com/feeds/videos/sflAm00WGko/related";
$data = simplexml_load_file($xml);
foreach($data as $data) {
echo $data->title."<br>";
echo $data->link->attributes()->href[0]."<br><br>";
}
【質問内容】
上記のコードを実行すると内容の表示はされるんですが、
以下のエラーメッセージが出てきてどうしても消せません。
Warning: main() [function.main]: Node no longer exists in C:\xampplite\htdocs\test\test.php on line 7
ググって出てきた情報だと、シリアライズすればいいとかJSONエンコードすればいいとか
そのくらいのものしかなくて、いちおう一通りやってみたんですが、どうしてもダメです。
どうすれば解決できるのでしょうか。よろしくお願いします
0158nobodyさん
2010/04/27(火) 22:26:35ID:???0159nobodyさん
2010/04/27(火) 22:48:35ID:???$src = file_get_contents("http://gdata.youtube.com/feeds/videos/sflAm00WGko/related");
preg_match_all("#<title.*?>(.*?)</title>#", $src, $matchs);
preg_match_all("#<a.*?(http://www.youtube.com/watch.*?)\'#", $src, $matchs2);
echo "<h1>{$matchs[1][0]}</h1>";
for ($i = 0; $i < count($matchs2[1]); $i++) {
echo $matchs[1][$i+1] . '<br><a href="' . $matchs2[1][$i] . '">' . $matchs2[1][$i] . '</a><br><br>';
}
0160nobodyさん
2010/04/27(火) 22:51:20ID:???0161nobodyさん
2010/04/27(火) 22:53:20ID:???0162sage
2010/04/27(火) 23:07:30ID:???0163nobodyさん
2010/04/27(火) 23:08:34ID:???それはさておき
foreach ($data->entry as $data)にすればおk
0164nobodyさん
2010/04/27(火) 23:13:28ID:???おまけに忘れた頃にスクリプトを弄ろうとすると見通しが悪くて萎える
0165nobodyさん
2010/04/27(火) 23:16:38ID:???0166nobodyさん
2010/04/27(火) 23:22:01ID:???あと、データがnullだと/>とかにならなかったっけ?
0168nobodyさん
2010/04/27(火) 23:40:47ID:???動けばおk
自分で使う用の適当スクリプトでしょこれ?
フィードが変わればどうせ書き直さないといけないし
そのつどあったものを動くように書けばおk
0170nobodyさん
2010/04/27(火) 23:42:46ID:???0174nobodyさん
2010/04/27(火) 23:58:57ID:???0175nobodyさん
2010/04/27(火) 23:59:55ID:VBIE6D7r無事に解決できました。
いろいろと勉強になりました。
どうもありがとうございました。
0176nobodyさん
2010/04/28(水) 08:53:04ID:???0177>>141
2010/04/28(水) 11:29:15ID:ucXE3i6fそれは合っていましたね
>>150
その方法で試してみましたが、認証ページでは格納されていて、会員ページのトップでは格納されていませんでした
データの持ち越しに難があるようです。
それと、今日朝一番にログインしてみたところ、問題なく処理が完了していたので、ログアウト処理かと思い、以下のコードに修正しました
<?php
$_SESSION=array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();
$old_session_name=session_name('kaiin');
session_start();
require_once "../php/dbh.php";
$dbh=new db();
$con=$dbh->db_connect();
if(!$result=mysql_query("select 会員情報を取ってくるSQL文 ")){
header("Location:http://エラーページへ");
}
$row=mysql_fetch_array($result,MYSQL_ASSOC);
$_2ch=hash_hmac(sha256,$_POST[post],2channel);//フォームに入力されたパスワードをハッシュ化
if($row[_2ch]===$_2ch){ //mysqlにあるハッシュ化されたパスワードと照合
$_SESSION[id]='id';
$_SESSION[id2]="$row[id2]";
$_SESSION[id3]="$row[id3]";
header("Location:http://会員ページへ");
}else{
header("Location:http://エラーページへ");
}
mysql_close($con);
0178>>141
2010/04/28(水) 11:31:10ID:ucXE3i6fブラウザの再起動も試しましたが、効果がないようでした。
ブラウザ、セキュリティの設定は、問題がないOS、問題があるOS間で共通にしています。
0179nobodyさん
2010/04/28(水) 12:49:46ID:???session_start();
今は知らないが前は思ったように処理されていなかった気がする
session_name使わなければ上手く行くのでは
0180nobodyさん
2010/04/28(水) 15:46:30ID:???これに代わる関数としては何が使われているのですか?
preg_matchしか無いですかね
0181nobodyさん
2010/04/28(水) 16:05:09ID:+yWQl9Xvマニュアル読む限りはそうぽい
あとは正規表現使わないで指定できるならstr系の方が断然はやい(と思う)
質問
webサーバ(IIS)とmailサーバ(PostOffice)が別サーバでたててある場合
PHPからmail()関数でメール送信可能でしょうか?
用件:http://jp2.php.net/manual/ja/mail.requirements.php
を見る限り
"PHP は sendmail を探す際にまず PATH を見ます。次に /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib の順で探します。"
なのでダメかと思うのですがなんかTipsがあれば教えてください
0183nobodyさん
2010/04/28(水) 16:15:24ID:???0184181
2010/04/28(水) 16:15:41ID:+yWQl9Xvありがとう、試してみますー
0185nobodyさん
2010/04/28(水) 16:57:57ID:JYOFOpwX質問です、ようやくPHPの文法や
関数を一通り覚えたんで、次へいきたいなと思ってます。
そこで開発環境なんですが、みなさんお勧めのものってありますか?
一応eclipse pdt入れてみたんですがいーのか悪いのかよくわからないので・・。
(機能を使いこなしてないだけかもしれませんが)
あと本とかでよく出てくるテンプレートエンジンなんですけど
実際、smartyって現場では使われてるんでしょうか。
覚えるべきなのか、どーなのか微妙な気するんですけど。
0186nobodyさん
2010/04/28(水) 17:10:56ID:???eclipseでもいいとおもうし、好みのエディタがあるならそれでもいいと思う。
smartyは少なくともうちでは現場でも良く使ってる。
0187181
2010/04/28(水) 17:23:34ID:+yWQl9Xvこのあいだ、BEARっていうのの勉強会いった
ちょっと楽しそう。PEARの拡張だって
0188nobodyさん
2010/04/28(水) 18:17:17ID:BWf7HQei将来的に削除される事が決まってるとかならちょっと書き直そうかな〜と思うけど、速度を求めてるスクリプトでもないしな〜。
0189nobodyさん
2010/04/28(水) 18:36:47ID:???入力チェックには使えんみたいな
0190nobodyさん
2010/04/28(水) 18:39:53ID:JYOFOpwX>>186
smartyやっぱけっこう一般的なんですね。
覚えときます_‘@‘_。
エディターは好みでいいと思うんですけど実際
仕事なんかだとおっきな開発するのにどーいう
環境でやってるんだろうと興味をもちまして。
本とか見てるといくつか開発環境のってるんですけど
実際、本に書いてある事例と現場だと違うことって多いって聞くので
どれが無難なのか知りたいです。
>>187
Codaって確かマック用ですよね?
Eclipseは使ってみてちと重たいような気がするんで・・
開発に使われてるので主流なのってどれなんだろ・・。
0191sage
2010/04/28(水) 22:04:09ID:???0192nobodyさん
2010/04/28(水) 22:10:18ID:U+YOGOTr0193ど素人で恐縮です
2010/04/28(水) 23:09:11ID:dD5SuLVEテキストや画像を一部変更したいのですが、変更するとサーバーにあがりません
どうやったら上がるようになるんでしょう?
外注さんには結構なお金を既に払い込んでいて、少しの変更も数十万単位の見積りで泣きそうです
まだ営業もしてないのに・・
外注さんは比較的良心的なので、なぜ上がらないのか?は教えてくれました
曰く「サーバーの権限よりアプリの権限が上だから・・」と
サーバーに上げるのはほんのすこ〜しだけ分かってる奴がFFFTPとかいうソフトで上げてるのですが
私がど素人なりに必死にググって「パーミッションの設定とか関係ない?」と聞いても
「パーミッションはサーバーに合わせてあるから問題ない」とのことでした
一応、所有権も著作権も全てコチラ側にあるんですが、小変更もままならない状態で参ってます orz
かといってプログラマーさんに払えるようなお金はないし・・
ど素人とはいえ、非常識な質問でしたらすいません
よろしくお願いします
0194nobodyさん
2010/04/28(水) 23:20:37ID:???0195nobodyさん
2010/04/28(水) 23:21:10ID:???FFFTPエラーとかでてるってこと?
でてるならエラーの種類とか書いたらわかるかもよ。
0196sage
2010/04/28(水) 23:27:59ID:???状況がいまいちよくわからんが、エラーが出てるならそれを貼ればわかるかも。
アプリとかと関係ない勝手に作ったテキストファイルすらあげられないとかじゃないとは思うけど。
というかアプリ作ってもらったんなら仕様書とかないのかな?
0197nobodyさん
2010/04/28(水) 23:28:47ID:???サーバーにアップロードできないのに権限が上も下もないだろ
0198sage
2010/04/28(水) 23:32:50ID:???どういうことだ?
0199nobodyさん
2010/04/28(水) 23:33:54ID:???アプリケーションの設置サポートが別料金としても
普通設置方法ぐらいのマニュアルは手渡すわ
0200nobodyさん
2010/04/28(水) 23:34:12ID:???0201nobodyさん
2010/04/28(水) 23:34:26ID:???アップロードソフトのこと言ってんじゃね。
0202ど素人で恐縮です
2010/04/28(水) 23:39:12ID:dD5SuLVE>>194 いやもう何十回もソレを繰り返してまして・・まぢ営業前にツブレそうなんです orz
>>195-196
エラーコードは「550」だそうです
何か分かりますでしょうか?
自分でもググったんですが、さっぱりで・・
>>197
釣りではないんですが、変な質問ですいません
>>198
はい
二人揃って首をヒネってるところですが
「これ以上は自分たちでやってください!」ってことかと
0203nobodyさん
2010/04/28(水) 23:42:02ID:???そのFFFTP再起動してみたら
0205ど素人で恐縮です
2010/04/28(水) 23:46:13ID:dD5SuLVE「サーバーに上げるのもコッチでやります」とは言われたんですが、
営業上の問題もあるのでこちらでやらせてもらうようにしました
で、もう一人の奴が挑戦したらやっぱできなくて、電話で泣きを入れて教えてもらいました
「ほら〜」って言われたそうですが、なんとか上がるようにはなりました
>>200
あっ、ソレ!
そんな感じのことを言ってたような気もします
それってどーゆうことなんでしょう?
簡単に解決できるようなことですか?
>>201
作ってもらったのはWebアプリのはずです いやWebアプリです
アップローダーはフリーのFFFTPだと思います
0206nobodyさん
2010/04/28(水) 23:50:50ID:???無料サポートしてもらいたいんならこっちのスレでやってくれ
http://pc11.2ch.net/test/read.cgi/php/1257701535/
0207nobodyさん
2010/04/28(水) 23:52:39ID:???0208ど素人で恐縮です
2010/04/28(水) 23:54:19ID:dD5SuLVEパーミッションは
705
705
707
だったと思います
>>204
それってアップローダですか?
今使ってるのと比べて何か利点があるのでしょうか?
あと、「ウェブアプリと同じ権限で」ってところをもう少し教えてもらえないでしょうか?
私もしつこいくらいパーミッションの設定を変えてみろと言ったんですが、
もう一人の奴には「合わせてある」と言われるばっかりだったので・・
0209nobodyさん
2010/04/28(水) 23:55:26ID:???0210ど素人で恐縮です
2010/04/28(水) 23:58:08ID:dD5SuLVE失礼しました
そちらで聞いてみます
>>207
そうですね
気をつけます
図々しくて申し訳ないんですが、何が問題かだけでもよかったら教えてください
みなさん、スレ汚し失礼しました
レスをくれた方々、ありがとうございました
0212nobodyさん
2010/04/28(水) 23:59:20ID:dD5SuLVE教えていただいてありがとうございます
アップローダ = FTPクライアント だと思ってましたw
0213nobodyさん
2010/04/29(木) 00:01:26ID:dD5SuLVEほんとですか!!
まぢありがたいっす!
と、とりあえず、がんがって挑戦してみます!
0214sage
2010/04/29(木) 00:05:09ID:???0215nobodyさん
2010/04/29(木) 00:05:59ID:???0216nobodyさん
2010/04/29(木) 01:50:18ID:HrU0q6yy0217nobodyさん
2010/04/29(木) 09:56:42ID:nW8M9+c10219nobodyさん
2010/04/29(木) 12:21:56ID:???生で格納せずに暗号化して登録するのがセオリーですか?
確かにDBに不正アクセスとかされた場合に生のパスワードを保存しておくのは
危険だとは思いますが、
現在のMySQLの設定は、DB接続パスワードとして30桁も設定しています。
その為、先ずDBに不正侵入されることはないかと思っているのですが如何なものでしょうか?
0220nobodyさん
2010/04/29(木) 12:25:00ID:???0221sage
2010/04/29(木) 14:25:35ID:???0222nobodyさん
2010/04/29(木) 14:27:57ID:???自分で責任とれるんなら、何しようと貴方が決めればいい。
0223sage
2010/04/29(木) 14:28:28ID:???0224nobodyさん
2010/04/29(木) 14:35:04ID:???例えばあなたは、DBパスワードが分らないサーバの情報を引き抜けますか?
>>223
https で暗号化された通信を行っているので
パケットをキャプチャしても意味を成さない気がするのですが。
0225nobodyさん
2010/04/29(木) 14:38:26ID:???いろいろなサービースでパスワードを使い回してるユーザーはかなり多いから
漏れたら損害賠償ものだ
0226sage
2010/04/29(木) 14:45:11ID:???とりあえずお前の管理してるサーバーのお世話にはなりたくないわ。
ちょっとした手間を惜しんで暗号化しないとか・・・。
httpsだから安心?そんな糞みたいな考えなら管理者なんてやめちまえ。
パスワードかけてるからHDDを泥棒されても大丈夫とかマジで言い張りそうで怖いわ。
0227nobodyさん
2010/04/29(木) 14:47:29ID:k/DZBqhjいくらなんでも釣られすぎだろ
0229nobodyさん
2010/04/29(木) 16:45:08ID:???個人用ならそれで良いけど他人に開示したいデータだと無理だね。
0230nobodyさん
2010/04/29(木) 19:09:39ID:???最近readfileなる関数があることを知って驚いたのだけど
返り値の末尾に必ずバイト数がついてきやがる・・・
なんなのこの仕様
0231nobodyさん
2010/04/29(木) 19:13:35ID:???0232nobodyさん
2010/04/29(木) 19:21:18ID:???返り値はstringのはずだが
■ このスレッドは過去ログ倉庫に格納されています