【PHP】下らねぇ質問はID出して書き込みやがれ 86
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/07/31(金) 21:19:01ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 85
http://pc11.2ch.net/test/read.cgi/php/1245074032/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0412nobodyさん
2009/08/12(水) 16:13:50ID:L+TnL+Ze// MySQLへ接続
$conn_id = mysql_connect($MySQL['HOST'], $MySQL['USER'], $MySQL['PASSWORD']) or exit('MySQLへ接続できません。');
// 使用するデータベース選択
mysql_select_db($MYSQL['DATABASE'], $conn_id);
mysql_query("SET NAMES ujis");
// ユーザー認証
if (($sessId == null || $sessPw == null) && ($userId == null || $passwd == null)) {
echo "<div align=\"center\">";
echo "<p><font color=\"red\">ログイン情報に誤りがあります。<br>再度ログインを行ってください。</font></p>";
echo "<a href=\"index.php\">ログイン画面へ戻る</a>";
echo "</div>";
exit;
}
上記コードで、print_r()を2度呼び出して確認したところ、
1つめ…Array ( [userId] => ******** [passwd] => ******** )
2つめ…Array ( [userId] => [passwd] => )
となり、$_SESSION 配列の各要素の値が消えてしまいます。そのためか、if文が常に真となり、
セッションが引き回せません。この他のスクリプト間では何ら問題なく引き回せているので、
上記のソース部分に鍵がありそうなのですが、phpは慣れていないため原因がわからずにいます。
どなたかおわかりになる方がいらしたら是非教えてください。よろしくお願いします。
0413nobodyさん
2009/08/12(水) 16:23:46ID:???0414nobodyさん
2009/08/12(水) 17:41:12ID:L+TnL+Zeありがとうございます。続きのソースです。ログイン時に書き込みしています。
if ($sessId != null) {
$userId = $sessId;
}
if ($sessPw != null) {
$passwd = $sessPw;
}
$userResult = mysql_query("SELECT * FROM USER_MASTER WHERE USERID = '$userId' AND PASSWD = '$passwd'", $conn_id);
$userInfo = mysql_fetch_object($userResult);
if ($userInfo->USERID != $userId || $userInfo->PASSWD != $passwd) {
echo "<div align=\"center\">";
echo "<p><font color=\"red\">入力したユーザー情報に誤りがあります。<br>再度ログインを行ってください。</font></p>";
echo "<a href=\"index.php\">ログイン画面へ戻る</a>";
echo "</div>";
exit;
} else {
// セッションへログイン情報セット
$_SESSION['userId'] = $userId;
$_SESSION['passwd'] = $passwd;
//このあとhtml表示(省略)
}
0416nobodyさん
2009/08/12(水) 18:40:31ID:???$echo = '$_SESSION<br /><pre>'.print_r($_SESSION,true).'</pre><br />';
$echo .= '$_POST<br /><pre>'.print_r($_POST,true).'</pre><br />';
return $echo;
}
こんな関数書いてif文の前とかでecho debug();してみたら分かると思う
あとファイルの先頭にerror_reporting(E_ALL);書いて潜在的なバグをつぶす
0417nobodyさん
2009/08/12(水) 23:35:55ID:kCVCP35f$a1=x;
$a2=y;
echo $a1;
echo $a2;
と同じ動作をするコードを
$a1=x;
$a2=y;
for ($i=1;$i =2;++$i)
{
echo $a$i;
}
のように書いたらecho $a$i;の部分でエラーが出ました。
正しく動かすにはどのように書けばいいのでしょうか?
0418nobodyさん
2009/08/12(水) 23:36:40ID:???0420nobodyさん
2009/08/12(水) 23:48:46ID:???分かりやすいし応用できる
$a = array(
[0] => x,
[1] => y,
);
foreach($a as $value){
echo $value;
}
0421nobodyさん
2009/08/12(水) 23:49:37ID:kCVCP35f$a1="x";
$a2="y";
for ($i=1;$i<=2;++$i)
{
$a = "a".$i;
echo $$a;
}
でうまくいきました。
ありがとうございます
0422nobodyさん
2009/08/12(水) 23:51:13ID:???ありがとうございます。
いろいろ試してみたのですが、走らせていたサーバのphpでregister_globals=onとなっていました。
そのせいか分からないのですが、>>411,412,414のコードのうち、411の
$sessId = $_SESSION['userId'];
$sessPw = $_SESSION['passwd'];
をコメントアウトしたところ、症状が解消しました。コメントあうとする前は、上記代入の前後で呼び出した
print_r($_SESSION) で、1回目では値があったのに2回目では消えていました。
つまり、上記のコード2行があると、その直前では値があったのに$sessIdも$sessPwもnullであり、
上記の2行がないと、$sessIdも$sessPwに $_SESSION['userId'] と $_SESSION['passwd']の値が
それぞれセットされているということになります。逆なら分かるのですが、症状はなくなったもののなんか
気持ち悪いです。
0423nobodyさん
2009/08/12(水) 23:51:26ID:???でいいだろ・・・
0424nobodyさん
2009/08/12(水) 23:57:16ID:???register_globalsはたぶん後方互換のためにonにしているのだろうが
好きなように変数の中をいじれるのでセキュリティに問題がある
直ちにoffにしたほうがいい
0425nobodyさん
2009/08/13(木) 02:18:30ID:CXYe9XKR現在、PHP OpenID Libraryを利用して
OpenIDのログイン処理のテストをしているのですが、
yahoo、mixi、ライブドア、はてな、いずれも
「現在ログインできません」のようなメッセージが出てログインできません。
curlやopensslが必要というのを見かけたので、確認しましたが、
いずれも有効になっていました。
レンタルサーバーなどにアップした場合はうまくいくのですが、
ローカル環境だとうまくいきません。
なにが原因なのでしょうか?
0426nobodyさん
2009/08/13(木) 02:29:54ID:???0427nobodyさん
2009/08/13(木) 09:24:07ID:h6lN5QEU【PHPのバージョン】php5.26
【連携ソフトウェア】PostgreSQL 8.4.0
【質問内容】 Cronで回して相手サーバーにバックアップデータを投げたいのですが、レンタルなのでモジュールとかの追加は出来ません。
PHPでそういう事は可能でしょか?
もし可能ならPHPでそういった事をやる際はどういった関数を使えば可能ですか?
0428nobodyさん
2009/08/13(木) 09:44:19ID:???0429427
2009/08/13(木) 09:48:51ID:h6lN5QEU回答ありがとうございます。
telnetとsshのポート空いてないサーバーなのでそういった事が難しいため
PHPなどで出来ないかと思っておりました。
説明が不足しており大変申し訳ありませんでした。
0430nobodyさん
2009/08/13(木) 10:02:45ID:???ftpならあいてるでしょ。
http://www.php.net/manual/ja/ref.ftp.php
0431nobodyさん
2009/08/13(木) 10:10:51ID:???0432425
2009/08/13(木) 10:20:31ID:???ライブラリの使い方が間違ってるということでしょうか?
ほとんどコピペなので、コード以前の、
環境の問題のような気がしているのですが・・・
0433427
2009/08/13(木) 11:03:42ID:h6lN5QEUすいません。
HTTPサーバーのみ稼働しててFTPが使えないです。
情報を小出しにしているわけではないですが他にも必要な情報あれば言ってください。
0434nobodyさん
2009/08/13(木) 11:28:50ID:???0436432
2009/08/13(木) 12:48:26ID:CXYe9XKRできればそうしたいのですが、環境のどこがまずいのか分からなくて・・・
そもそも「現在ログインできません」とは、どういう状況なのでしょうか?
0437nobodyさん
2009/08/13(木) 14:29:54ID:???0438nobodyさん
2009/08/13(木) 14:56:28ID:???2年も前からやってるのか・・・
ぜんぜんついていけてない
0440nobodyさん
2009/08/13(木) 16:54:53ID:lMlALn5L0441433
2009/08/13(木) 17:04:41ID:h6lN5QEUその手がありましたね。
すっかり忘れてました。
ですが諸事情あってあくまで初回のアクションはバックアップ元にしたいので
バックアップ元のCronでバックアップ先のPHPを叩くようにすれば出来そうです。
ありがとうです。
0442nobodyさん
2009/08/14(金) 08:03:40ID:S/PVqIxNa.php
header("Content-Type: application/zip");
echo "zipのバイナリコード";
ダウンロードダイアログでa.phpとなってしまうのですが(zipにリネームしたら開けるのですが)
a.zipでダウンロードさせるにはどうしたらよいのでしょう?
headerで何か明示的にダウンロード時のファイル名を指定できると読んでいるのですが
やり方がわかりません(読み違いでできなかったらすみません)
0443nobodyさん
2009/08/14(金) 08:07:05ID:???http://php.net/header
0444442
2009/08/14(金) 08:13:30ID:S/PVqIxN盲点でした
ズバリな答えが書いていますね
助かりました
どうもありがとうございました
0445nobodyさん
2009/08/14(金) 22:42:22ID:vkQArbxO症状はFreeBSD7.1+PHP5.2.10のレンタルサーバで実行結果が以下のようになってしまいます
$arrWork = mb_split (",", "2004年5月13日,1234566,aabbcccddd");
foreach ($arrWork as $data)
echo "$data\n";
実行結果
2004年5月13日,1234566
aabbcccddd
手元のWindowsXP+PHP 5.2.8では、以下の実行結果となり、当方はこちらの結果を想定してプログラミングをしています
実行結果
2004年5月13日
1234566
aabbcccddd
おそらく文字コード関連だと思うのですが・・
なお、.phpファイルの文字コードは全てUTF-8で統一して有ります
0446nobodyさん
2009/08/14(金) 22:43:30ID:???0447nobodyさん
2009/08/14(金) 22:52:22ID:???0448nobodyさん
2009/08/14(金) 23:23:54ID:vkQArbxOとりあえず以下を試して見ましたが結果は変わりませんでした
ini_set(default_charset,"UTF-8");
ini_set(mbstring.internal_encoding,"UTF-8");
他にも設定があるのかな・・
phpinfo()で確認したところ、サーバはEUC-JPでした
0449nobodyさん
2009/08/14(金) 23:36:35ID:Tors7Awt0450nobodyさん
2009/08/14(金) 23:38:55ID:???0451nobodyさん
2009/08/14(金) 23:44:56ID:???S-JISでスクリプトのファイル保存してるだろ
いま自分とこでテストしたら
UTF-8で保存したら正しくて、S-JISで保存したら上記間違いと同じ結果になったよ。
なんか日の漢字コードとコロンのコードとの絡みでおかしくなってるのだとおもうよ。
結論:UTF-8で保存しなおせ
0452448
2009/08/15(土) 01:30:41ID:DUbarFt/>>450
explode()、またはsplit()ならうまく行きました
ただマルチバイトに対応してるわけじゃない(と思う)ので気持ち悪いですね
"日,"だけの定型なら良いんですが、上の文字列と同時に日本語文字列も扱ってるので、ううむ・・
>>451
念のためサーバ上で確認しましたが、やはり全てUTF-8でした
しかしSJISで保存すると似た症状になるんですね、ややこしいなあ
0453451
2009/08/15(土) 01:57:21ID:???普通に動くのだけれどもね。
0454nobodyさん
2009/08/15(土) 02:12:45ID:???※.Netで言うところのFile.Delete(ファイルパス)みたいな関数はありますか?
./HOGE/TEST.JPG
0455nobodyさん
2009/08/15(土) 02:26:45ID:???0456nobodyさん
2009/08/15(土) 03:15:12ID:???0458nobodyさん
2009/08/15(土) 05:32:44ID:YpOdOwqFPHPコード上で
echo mb_regex_encoding();
とかで本当にUTF-8になってるか調べたり
mb_internal_encoding("UTF-8");
とかしてみたりしても同じ?
0459448
2009/08/15(土) 08:21:22ID:DUbarFt/mb_regex_encoding("UTF-8")とすることで解決しました
http://f32.aaa.livedoor.jp/~azusa/?t=php&p=mbstring#a_mb_split
>エンコーディングは、内部文字エンコーディングまたはmb_regex_encoding()関数で指定した文字エンコーディングが使用されます。
ありがとうございました
0460nobodyさん
2009/08/15(土) 09:39:49ID:???0461nobodyさん
2009/08/15(土) 13:01:22ID:oRoHSHUFこういう変数の出力方法はなんと呼ばれていますか?
上記書式で出力できるサーバとできないサーバがあって、原因や違いを調べています。
出来た方のサーバ
【OS名】Centos5
【PHPのバージョン】php バージョン不明 (今遠隔地にあって電源も切ってるので、弄れません)
出来なかった方のサーバ
【OS名】 WindowsXP +XAMPP
【PHPのバージョン】php5.3.0
PHP 出力・表示などでぐぐったのですが見つかりませんでした。
よろしくお願いします
0462nobodyさん
2009/08/15(土) 13:01:52ID:???0464nobodyさん
2009/08/15(土) 15:09:04ID:oRoHSHUFphp.iniの設定を書き換えて出力できるようになりました
どうもありがとうございます。
0466nobodyさん
2009/08/15(土) 22:17:38ID:???次の様2つのディレクトリ(パス)が存在しているとして
�@のパス直下にあるファイルには外部からアクセスする事が出来るけれども、
�Aの場合には一切アクセスをさせなくするにはどうすればよいでしょうか?
http://test.com/path_1/ ・・・�@
・AA.txt
・BB.txt
http://test.com/path_1/AA.txt ←アクセス可能(内容を確認する事が出来る。)
http://test.com/path_2/ ・・・�A
・CC.txt
・DD.txt
http://test.com/path_2/CC.txt ←アクセス不可(外部からURLの直打ちがあった場合にはforbiddenのページを表示したい。)
0467nobodyさん
2009/08/15(土) 22:23:18ID:???0469nobodyさん
2009/08/15(土) 22:31:33ID:???0470nobodyさん
2009/08/15(土) 22:31:47ID:YpOdOwqF.htaccessでググレ
0471nobodyさん
2009/08/15(土) 22:45:26ID:???0472nobodyさん
2009/08/16(日) 04:39:45ID:K6eLO5dl鯖を運用してるの?
0473nobodyさん
2009/08/16(日) 08:42:22ID:Lr9z6CdZどの順で有効になりますか?
0474nobodyさん
2009/08/16(日) 10:57:24ID:???0475nobodyさん
2009/08/16(日) 11:04:37ID:???0476nobodyさん
2009/08/16(日) 11:28:29ID:???PHPは COOKIE → GET の順で探して
セッションキーが存在しなければセッション開始せずに
POSTは自前で指定しないとダメなんじゃないか?
0477nobodyさん
2009/08/16(日) 12:06:34ID:???【OS名】FreeBSD6.x
【PHPのバージョン】php5.26
【連携ソフトウェア】postgres
変数 $a に下のような値がセットされていて、
$a[0][id] = 5
$a[0][name] = 山田
$a[1][id] = 7
$a[1][name] = 鈴木
$a[2][id] = 14
$a[2][name] = 山下
これを $a[id] = 名前 のように変換する関数はありますでしょうか?
$a[5] = 山田
$a[7] = 鈴木
$a[14] = 山下
よろしくお願いします。
0478nobodyさん
2009/08/16(日) 12:35:45ID:???foreach ($a as $b) {
$c[$b['id']] = $b['name'];
}
でいいんじゃね。
DBのAPIによっては1番目のカラムをキー、2番目のカラムを値として
取得するメソッドがあることもあるよ。
1行ずつfetchする時に組み替えてもいいし。
0481nobodyさん
2009/08/16(日) 14:15:58ID:???0482nobodyさん
2009/08/16(日) 14:44:09ID:???0483nobodyさん
2009/08/16(日) 17:22:14ID:???0484nobodyさん
2009/08/17(月) 10:52:23ID:XUMXmNvOファイルのアップロードするものを替えれば出来るのではないかと考えてます。
受け側はpostで来たものをmove_uploaded_fileで受け取ればいいと思ってますが、
送信元にform methodを書くとsubmitしなければいけないのでcronで実行するだけではダメな状態です。
formではなく何か関数でファイルを送るようなものがPHPにあれば助言もらえないでしょうか。
0485nobodyさん
2009/08/17(月) 10:59:15ID:???0487nobodyさん
2009/08/17(月) 11:03:45ID:???もうちょっと詳しく。それぞれのOSは?
送信元サーバからphpで、送信先サーバへファイルをpostするって事?
phpではなくrsyncで事足りるような気がする。
0488484
2009/08/17(月) 11:28:26ID:XUMXmNvOそれぞれのサーバはCentOSです。
やりたい事は>>487さんの言ってることなんですが、レンタル鯖なのでrsyncを入れたりってことが出来ないです。
実際に送るファイルはzipファイルになります。
0489487
2009/08/17(月) 11:51:52ID:???それなら、ftpでいいんじゃないか?
phpだとftp_connect・ftp_login・ftp_put 等で検索するとサンプルがたくさんでてくると思う
0490nobodyさん
2009/08/17(月) 12:07:23ID:???fwrite(fopen("file.zip", "wb"), file_get_contents("http://www.example.com/file.zip"));
0491488
2009/08/17(月) 12:21:28ID:XUMXmNvOFTPなくてブラウザからアップするタイプのサーバなのでFTPダメっぽいです。
>>490
よくわからないけど火壁の問題でもらいに行くのはアウトみたい。
あくまでリクエストに対してレスポンスを返すってのがデフォルトみたい。
じゃあサーバ替えろよっていわれそうですが、FTPなくても問題ないしそれ以外では満足してるので
この点だけ出来ればOKだと思ってます。
ftp_connectみたいなのでhttpとかhttpsがあればいいのかな。
0492nobodyさん
2009/08/17(月) 12:35:08ID:???0493nobodyさん
2009/08/17(月) 12:47:05ID:???0494488
2009/08/17(月) 13:00:17ID:XUMXmNvOメールでもいいんですけど、両方とも鯖ってこととメールがないので難しいですね。
>>493
Pearが入ってたかどうか確認しないといけないですが、外部モジュールを使用せずに
PHPの機能でやるってのは難しそうですね。
submitなしで送るのは困難と考えていいのでしょうか。
0495nobodyさん
2009/08/17(月) 13:03:18ID:???0496488
2009/08/17(月) 13:12:34ID:XUMXmNvO自分の鯖じゃないのでモジュールの追加とかが厳しいですね。
なのでPHPとかでやりとりできれば比較的そういった事を気にしなくてもいいかと思ってました。
0498488
2009/08/17(月) 13:39:31ID:XUMXmNvOPHPの何らかの関数を(もしくは複数)を使用して実現しているという事ですね。
どの関数かは調べないといけないですが。
0499nobodyさん
2009/08/17(月) 13:47:43ID:???0500nobodyさん
2009/08/17(月) 20:32:54ID:???0501nobodyさん
2009/08/17(月) 21:12:59ID:N8y+jQ14<input type="file" name="upfile[]">
みたいに同じnameのinputが複数ある場合
HTTP_REQUESTで、両方のupfile[]に
addPostDataしてやるにはどのように記述すればいいのでしょうか?
よろしくお願いします
0502nobodyさん
2009/08/17(月) 21:14:28ID:jMCEI25H| /⌒\ .. .|
| (:::::::::::::::) .|
|===×二×===| 日本国旗を友愛しました
| (:::::::::::::::) .|
| \.__./ .. .|
|_________|
ノ´⌒`ヽ _
/|\ | ヽ γ⌒´ \ / ! /!ヽ
| l ヽ | ヽ // ""´ ⌒\ ) / | ,' / !
| ヘ ! ヽ i / \ / i ) ,' !_/ / j
', ヽ | l i (・ )` ´( ・) i,/ ! ', / /
', ヽ!≡ l l (__人_). | ! ≡ ! /
ヽ ≡ ! \ `ー' / l ≡ ! ,.'
\ ≡ | ,.-  ̄メ、_', = / /
\ ≡ ! /てノしイ_人人ノ、 ヽ /
\― |/ヽ ,イ- 、ヽ / イ´ ̄ ̄ヽ_/
\ ヽ/ l ヽi / ̄`!
【党首討論】 麻生首相 「民主党の党旗、日の丸切り刻み作成…」→鳩山氏「神聖マーク、きちんと作らねば」→民主HPから写真削除★12
http://tsushima.2ch.net/test/read.cgi/newsplus/1250507570/l50
0503nobodyさん
2009/08/18(火) 00:29:07ID:???0504nobodyさん
2009/08/18(火) 00:35:36ID:???0505nobodyさん
2009/08/18(火) 00:42:54ID:???0507nobodyさん
2009/08/18(火) 11:54:02ID:vguzrODxerror_reporting(E_ALL & ~E_DEPRECATED);と記述すれば表示されないと聞き、記述してみましたが表示されてしまいます。
error_reporting(E_ALL & ~E_DEPRECATED);
var_dump(error_reporting());
出力:int(22527)
error_reporting(2);
var_dump(error_reporting());
のように、Warningだけ表示させるようにしてもDeprecatedエラーが表示されてしまいます。
どのように対処すれば良いのでしょうか。
0508nobodyさん
2009/08/18(火) 12:02:45ID:???その上でエラー出てるんじゃない?
0509nobodyさん
2009/08/18(火) 12:24:48ID:vguzrODxこれの=&を全て=にしたら解決しそうなんですが、それで何か支障とか出ないですかね。
0510nobodyさん
2009/08/18(火) 12:53:55ID:???0511nobodyさん
2009/08/18(火) 14:32:41ID:???そのエラーは構文解析時に出る
PEARをrequire/includeする前にerror_reporting()を実行しているかい
■ このスレッドは過去ログ倉庫に格納されています