【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等)・フレームワークは各該当スレへ
0348nobodyさん
2009/08/10(月) 21:47:57ID:???>チェックの項目を、下の「削除」と「メール作成」で扱おうとすると
>上手くいきません。
もうちょっと具体的に
2列分ぐらいのHTMLをここに書いてみるべし
たぶんcheckboxの受け渡し方がおかしいとは思うが
<input type="checkbox" name="id[5854]">
みたいにして配列で渡すとよい
>本当なら「詳細」はIDからリンクさせたいのですが、IDのデータをリンクで渡すやり方がわからなく、仕方ないので
>無理やりやっています。
<a href="shousai.php?id=5854">5854</a>みたいにGETで渡せばよい
0349nobodyさん
2009/08/10(月) 22:25:45ID:???0351nobodyさん
2009/08/11(火) 04:26:11ID:OhLUXqwkcronで実行すると、env php部分でエラーになります。
envがphpを見つけられないようです。
phpをフルパスで指定した場合、
あるいはターミナルから実行した場合、
あるいはスクリプトがrubyだった場合は問題ないです。
cron×env×phpの時に問題になります。
これは何故でしょうか?
0352nobodyさん
2009/08/11(火) 05:42:26ID:???0353351
2009/08/11(火) 08:28:51ID:???0354nobodyさん
2009/08/11(火) 10:36:18ID:???0355nobodyさん
2009/08/11(火) 11:28:36ID:???for($i=0;$i<23;$i++){
if($i==0){
echo "<td align=\"center\">";
echo "<input type=\"checkbox\" name=\"check[]\" value=\"".$row['id']."\"/></td>";
}else if($i==1){
echo "<form method=\"POST\" action=\"../new_student.php\">";
echo "<td><input type=\"submit\" value=\"変更\"/></td>";
echo "<input type=\"hidden\" value=\"".$row['id']."\" name=\"id\">";
echo "</form>";
}else if($i==2){
echo "<form method=\"POST\" action=\"../display/student_page.php\">";
echo "<td><input type=\"submit\" value=\"詳細\"/></td>";
echo "<input type=\"hidden\" value=\"".$row['id']."\" name=\"id\">";
echo "</form>";
}
else{
echo "<td> ".$row[$i-3]."</td>";
}
}
echo "</tr>";
}
この下に削除とメールボタンがあるのですが、チェックボタンの間に変更と詳細があるので
formをまたがせる事が出来ません・・・・
簡単に言うと、
<チェックボタンのform>
<変更のform></変更のform>
<詳細のform></詳細のform>
</チェックボタンのform>
のような事がしたいです。
0357nobodyさん
2009/08/11(火) 11:37:51ID:???>>345の人?
formをネストさせないで、>>347さんの言うようにcssで整形するか
押すボタンによってaction先をjavascriptで変える
どっちにしてもphpの話題ではない。板違い。
0358nobodyさん
2009/08/11(火) 12:01:47ID:+4lP6KeF--------------------------
<table border=1> <tr>
<td>1</td>
<td>aaaa</td>
<td nowrap>bbbb</td>
<td>cccc</td>
<td>dddd</td>
</tr> <tr>
<td>2</td>
<td>eeee</td>
<td nowrap>ffff</td>
<td>gggg</td>
<td>hhhh</td>
</tr>
</table>
----------------------------
このようなHTMLのtdで囲まれた文字列を配列で取得したく
preg_match_all("/(<tr>.*?<td>(.*)<\/td>.*<td>(.*)<\/td>.*<td>(.*)<\/td>.*<td>(.*)<\/td>.*?<\/tr>)/i",$html,$match);
こう記述しましたが、期待通りの結果になりません
どうすればよいでしょうか?
0359nobodyさん
2009/08/11(火) 12:20:56ID:???PHPで実行する前に正規表現チェッカで試すことをお勧めする
0360nobodyさん
2009/08/11(火) 12:25:37ID:???改行を最初に除去
$html = preg_replace('/\r/,'',$html);
$html = preg_replace('/\n/,'',$html);
preg_match(ry
0361nobodyさん
2009/08/11(火) 12:26:55ID:???0362nobodyさん
2009/08/11(火) 12:29:52ID:???\nだけなら'/\r\n/'とするとヒットしない
0363nobodyさん
2009/08/11(火) 12:53:45ID:???0364nobodyさん
2009/08/11(火) 12:54:53ID:???0365nobodyさん
2009/08/11(火) 12:54:55ID:???$html = preg_replace('/\r|\n/','',$html);
0366>>355
2009/08/11(火) 13:05:46ID:???レス下さった方、ありがとうございます。
失礼しました。
0367nobodyさん
2009/08/11(火) 13:15:33ID:???0368nobodyさん
2009/08/11(火) 13:18:09ID:???どっかトラの穴か相応のプロジェクトでこねくりまわさないと一生
正規表現がでてくるたびにつまづく気がする。
0369nobodyさん
2009/08/11(火) 13:20:59ID:???0370368
2009/08/11(火) 13:23:37ID:???0371nobodyさん
2009/08/11(火) 13:24:05ID:???0373nobodyさん
2009/08/11(火) 13:35:25ID:???指摘されて「こいつはひねくれてる」で終わるようなら回答しなくていいよ
0374368
2009/08/11(火) 13:45:12ID:???SQLだとおもった結果を何回かのクエリやらプロセス通さず一発のクエリで導きだしたりが
醍醐味かなぁ。。まぁおれが正規表現こねたことないからだろうけど。
0375nobodyさん
2009/08/11(火) 13:50:30ID:???ようは正規表現に苦手意識みたいなものがあるだけじゃないか?
複雑なSQL組み立てた時に感動するなら
同じように、パッと見暗号にしか見えない正規表現作れた時も感動できるかもよ。
0376368
2009/08/11(火) 14:01:32ID:???読むのがつらいからかなぁ?対象となる文字列から人間の目での抜き出しはこんなに
簡単にできるのに、機械にあわせようとするからこんなややこしい暗号になってしうのか・・・つーかんじか
0377nobodyさん
2009/08/11(火) 14:07:48ID:???0379368
2009/08/11(火) 14:15:43ID:???ん?自分で計算するのも面倒な行の合計だけでも感動しない?
SQLこねて作った場合でも感動するよ。
心の中で「あ、でたw」「数値変えたらちゃんと結果も変わったwおkおk」てなかんじで。
正規表現使ってる時の心の声は「あーなんでこれ抜き出せないんだよ」「たったこことここだけなのに!」
とかいう心の声が多いですわ。
0380nobodyさん
2009/08/11(火) 14:25:28ID:???PHPの存在意義は・・・?
0381nobodyさん
2009/08/11(火) 14:32:15ID:???やたら人のスクリプトや考えを否定的なやつってうざいよな
正直ひねくれてると思われても仕方が無いと思うわ
0382368
2009/08/11(火) 14:47:16ID:???なにか良い見方・覚え方・学び方があるのならとはおもってずるずると。
380 まぁ今の話のなかではないね。3重以上のループ組むならやはりSQLで外部参照とか組んじゃうけど。
381 まぁ色々やり方あってもいいわな。美しいか美しくないかも上記ループのようにあるかもしれんけど。
0383nobodyさん
2009/08/11(火) 15:16:23ID:???「SQLは行の合計ができるから感動する」っていうから
この人エクセルとかプログラム知らないのかなと思っただけ。
結局難しそうなものから逃げてるだけでは?
0384nobodyさん
2009/08/11(火) 15:22:16ID:???0385nobodyさん
2009/08/11(火) 17:44:20ID:???場当たり的に定石も美しさもわからずなんとか対処してる俺は正規表現をまともに習得できるきがしない。
0387nobodyさん
2009/08/11(火) 18:04:17ID:???「出来る」と思えば出来る
0388nobodyさん
2009/08/11(火) 18:17:02ID:???0390nobodyさん
2009/08/11(火) 19:43:28ID:???あれこれメタキャラクタ使って短縮したり技巧を凝らすのは好きな人がやればいい
0391368
2009/08/11(火) 20:17:40ID:???0392nobodyさん
2009/08/11(火) 20:58:13ID:???0393nobodyさん
2009/08/11(火) 21:57:04ID:???0394nobodyさん
2009/08/11(火) 22:42:38ID:???変だと思ったらこう書けばよいとさらりと書き直してあげれば終わるんだから
いちいちつっかかる必要はない
書き直したコードみて最初に書いたやつもほーこう書くのかーと勉強になるし
まぁここ正規表現スレじゃないけどもう少し大人になろうぜ
0395nobodyさん
2009/08/11(火) 23:10:09ID:???分かってしまえば簡単。
複雑な技巧は、個人的には避けるべきだと思う。可読性とメンテナンス性が落ちる事が多い。
0396nobodyさん
2009/08/11(火) 23:46:23ID:???何でこう書かないの?的なツッコミが必ず入るのは勉強にはなるけど、
荒れやすい要素ではあるよなあ。
あとはお決まりの「メールアドレスを正規表現で(ry」も一言で済むのに
何故か突っかかられる印象がある。
0397nobodyさん
2009/08/12(水) 01:19:04ID:PY+df2PJあるページでセッション変数として文字列を保存し、
異なるページで保存したセッション変数の中身を表示させようとしています。
まったく同じファイルなのですが、
IEだとうまく表示できるのに、
Firefoxだと何も表示されない(空文字)になってしまいます。
IEではうまく動作するのにFirefoxだと駄目なんてことはあるのでしょうか。
Firefoxはバージョン3.5.2で、
サイトから送られてきてたCookieを保存する、サードパーティのCookieも保存するに
チェックがついていて、例外サイトには何も設定していません。
保存する期間はサイトが指定した期限までとなっています。
なぜなんだろう?
0398nobodyさん
2009/08/12(水) 01:33:08ID:???IEはヘンテコリンなタグでも適当に解釈してしまうので、IEが間違っている
0399nobodyさん
2009/08/12(水) 01:45:20ID:PY+df2PJうーん。タグとかでなく、セッションに保存した内容が取得できないんですよね
if ($var == ""){}でtrueになるので、タグ以前の問題ではないかと思っています
0400nobodyさん
2009/08/12(水) 01:47:37ID:???0401nobodyさん
2009/08/12(水) 02:14:30ID:PY+df2PJ呼び出す側
<?
$pic = "file.wmv";
session_start();
$_SESSION["pic"] = $pic;
?>
<html>
<head>
</head>
<body>
<object id="MediaPlayer" width="640" height="525" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715"
standby="Loading MicrosoftR WindowsR Media Player components..." type="application/x-oleobject">
<param name="FileName" value="movie.html" />
<param name="AutoStart" value="true" />
<param name="ShowControls" value="true" />
<embed name="プレーヤー名" type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" src="movie.html" width="640" height="525" autostart="1" showcontrols="1"></embed>
</object>
</body>
</html>
0402nobodyさん
2009/08/12(水) 02:15:12ID:???<?
session_start();
$pic = $_SESSION["pic"];
if ($pic == "")
{
exit;
}
if (file_exists($pic)) {
header('Content-Type: video/x-ms-wmv');
header('Content-Length: ' . filesize($pic));
ob_clean();
flush();
readfile($pic);
}
?>
0403nobodyさん
2009/08/12(水) 02:24:30ID:???0404nobodyさん
2009/08/12(水) 02:46:47ID:???Firefoxさんたらガツガツ食べた
仕方がないのでWMPさん手ぶらで聞いた
さっきのCookieご用事なぁに
IEさんとWMPさんは仲良しなのでCookieを回し読みします
0406nobodyさん
2009/08/12(水) 03:23:49ID:???IEにCookie食べさせるとWMPでも使われるがFirefoxが食べたCookieはFirefox以外で使われない
セッションの管理方法をcookieじゃなくてURLにセッションIDを付加させる方法にしたらいいと思う
0407nobodyさん
2009/08/12(水) 03:31:16ID:???http://jp2.php.net/manual/ja/session.idpassing.php
読めば分かると思う
0408nobodyさん
2009/08/12(水) 04:42:13ID:???0409nobodyさん
2009/08/12(水) 10:02:26ID:???0410397
2009/08/12(水) 15:18:43ID:???sessionIDをGETで渡して、
session_startの前にsession_id(string id)でsession_idを渡すことで
ひとまず動作しました。
確かに、考えれば最後はWMPがhtmlを参照するので
Firefoxで設定したsessionが読めるわけないですね。
でも、Firefoxの過去のバージョンではなぜかうまく動作していたんですよ・・
うーんなぜなんだろう・・
0411nobodyさん
2009/08/12(水) 16:10:37ID:L+TnL+Ze[OS]FreeBSD 6.1-RELEASE-p10(CPIのシェアードプラン X30)
[php]4.4.7
[DB等]mysql使用(phpでは--with-pgsql7も組み込み)
[症状]セッションが引き回されない
require "env.php";
session_start();
// 1回目
if ($DEBUG) { print_r($_SESSION); }
$userId = $_POST['userId'];
$passwd = $_POST['password'];
$sessId = $_SESSION['userId'];
$sessPw = $_SESSION['passwd'];
// 2回目
if ($DEBUG) { print_r($_SESSION); }
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:???■ このスレッドは過去ログ倉庫に格納されています