【PHP】下らねぇ質問はID出して書き込みやがれ 93
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/02/15(月) 19:23:06ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 92
http://pc11.2ch.net/test/read.cgi/php/1263035502/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0521nobodyさん
2010/03/04(木) 02:58:43ID:???0522nobodyさん
2010/03/04(木) 02:59:43ID:???0523511
2010/03/04(木) 03:00:44ID:???>そうですか、データベースか.htaccessでフォルダ自体にアクセスできないようにするかしたほうがいいということですね。
これだけ見てBASIC認証の話してると思ったけど
よくよく考えてみたら
特定ディレクトリにログファイル集めてDrectoryMatchのことを言ったのかなぁと思って
0524nobodyさん
2010/03/04(木) 03:16:11ID:???public_html
└index.php
public_html
└index.php
└.htaccess
└logfile
0525nobodyさん
2010/03/04(木) 09:37:38ID:???レンサバが、DBへの外部からのアクセスを許しているなら、手元のPC上のDBクライアントから
レンサバに繋いでDBの操作も可能。
上が駄目でも、レンサバにtelnetなりSSHなりでアクセスでき、レンサバ側にDBクライアントも
乗っているなら、それを使うという手もある。
上記がどっちも駄目なら、DBアクセスする(PHPに限らず何らかの)コードをサーバ上に置いて、
そのコードを(CGIなり何なりで)起動させる。
これら以外は俺も知らない。
0526nobodyさん
2010/03/04(木) 10:16:46ID:???0527nobodyさん
2010/03/04(木) 10:18:29ID:???0528nobodyさん
2010/03/04(木) 10:38:17ID:???mb_language("japanese");
mb_internal_encoding("UTF-8");
$to = "xxx@yyy.com";
$name = $_POST["name"];
$from = $_POST["mailaddress"];
$subject = $_POST["subject"];
$message = $_POST["message"];
$header = "From: " . mb_encode_mimeheader (mb_convert_encoding($name,"UTF-8","AUTO")) . "<" . $from . ">";
//入力チェック
if ($name == "") {$errMsg .= "名前が入力されていません。";}
if (mb_strlen($name) > 20) {$errMsg .= "名前は20文字以内で入力して下さい。";}
if ($from == "") {$errMsg .= "メールアドレスが入力されていません。";}
$ret = preg_match("/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/", $from);
if (!$ret) {$errMsg[] = "メールを正しい形式で入力して下さい。";}
if ($subject == "") {$errMsg .= "件名が入力されていません。";}
if ($message == "") { $errMsg .= "本文が入力されていません。";}
mb_send_mail ($to, $subject, $message, $header);
?>
メール送信の前にチェックをして未入力の項目があったら画面にエラーメッセージを表示し、
送信出来ないようにしたいのですが、何を追加したら良いのでしょうか?
0529nobodyさん
2010/03/04(木) 10:49:47ID:???0530nobodyさん
2010/03/04(木) 11:08:43ID:???0531nobodyさん
2010/03/04(木) 12:31:00ID:???0532nobodyさん
2010/03/04(木) 12:42:44ID:???もうこのスレの存在意義ないよ
0533nobodyさん
2010/03/04(木) 12:55:01ID:???0534nobodyさん
2010/03/04(木) 14:43:21ID:iGtVy898写真とそのコメントを登録するアプリがあるとします。
更新時、必ずクエリの成功と画像登録の成功をセットで行いたいです。
1)コメントと画像を変更する時は、
if($updateRS==1){?画像登録処理} //$updateRSはupdate文の返り値
という流れで問題ないです。
2)コメントは変更しないけど画像だけ変更するとき、この場合はどうしたら良いんでしょう?
2)の場合、mysqlは更新前後で値の変化がない時はupdateの返り値が0なので、
if($updateRS==1){?画像登録処理}という流れができません。
値の変化を伴う場合、変化がない場合にも共通して使えるような
update〜画像登録の処理はどうしたら良いでしょうか?
自分で考えたのは、テーブルに適当なダミーカラムを持たせて、
UPDATE $table SET `dummyC` = time() とかすればとりあえず更新が常に発生するかと思ったんですが
そんなことのためにカラム作るの嫌だなと…
どうしたら良いか、ご意見お願いします。
if($updateRS==1)のチェックをしなきゃ良いんですけど、2)のケースの時に
クエリエラーで文章が変化ないのに写真だけ更新される問題が発生しかねないので避けたいです。
それともそんなの気にする必要ないんでしょうか?
0535nobodyさん
2010/03/04(木) 14:46:10ID:???0536nobodyさん
2010/03/04(木) 14:49:08ID:???>2)コメントは変更しないけど画像だけ変更するとき、この場合はどうしたら良いんでしょう?
>
>if($updateRS==1)のチェックをしなきゃ良いんですけど、2)のケースの時に
>クエリエラーで文章が変化ないのに写真だけ更新される問題が発生しかねないので避けたいです。
コメントは変更しないのに何のクエリを発行するの?
文章が変化なくて写真だけ更新されるなら2)の目的を達してるのでは?
0537536
2010/03/04(木) 15:03:12ID:iGtVy898>>535
sql板で聞くかこちらで聞くか悩んだ末でした。ずれてたらすみません。
>>536
たしかに、コメントが変更されないとわかってればif($updateRS==1)のチェックせず
ストレートに画像登録単体ですれば良いんですが、
その場合コメントがdb登録済みコメントと同じことを確認する処理が必要になるので。。
とりあえず、コメントと画像が更新される前提としてif($updateRS==1)を用意して、
コメント変更がない場合にも柔軟に対応させたいんです。
「画像だけを変更する」「コメントだけを変更する」って機能にすればいいんですけどね…
実際にはコメントにあたるupdate対象のtextarea や inputが30個くらいあるので難しいです。
0538nobodyさん
2010/03/04(木) 15:04:03ID:iGtVy898わかりにくい文章でごめんなさい
0539nobodyさん
2010/03/04(木) 15:04:30ID:???0540nobodyさん
2010/03/04(木) 15:08:51ID:???普通は更新日時付ければいいものだけどな
0541nobodyさん
2010/03/04(木) 16:01:07ID:iGtVy898それはちょっとw
>>540
やっぱり更新日付いれますか…
mysqlのtimestampで設定してるのでムダになっちゃうんですけどね
みんなこういうのどうやってるのかなぁ、ありきたりな処理のはずなんだけど
0542nobodyさん
2010/03/04(木) 16:05:12ID:???0543nobodyさん
2010/03/04(木) 16:12:54ID:???普通にコメントを上書きすればいいんじゃね?
それが嫌なら、コメントを取得して比較して、同じだったら画像登録処理だけ、違ったらコメント更新と画像登録処理をやればいいのでは?
0544nobodyさん
2010/03/04(木) 16:36:30ID:???それで判断すればいいんじゃない?
PDOもexecuteは True/False を返すみたいだね。
どっちも使ったことないけど。。。
0545nobodyさん
2010/03/04(木) 16:41:13ID:???DMLてのは間違いでした。すんません。
0546541
2010/03/04(木) 17:01:20ID:iGtVy898なんか、解決じゃないですがアプローチを変えることにしました
皆さんのアドバイス見てるうちに問題の切り分けができてきました。ほんとにありがとう。
以下雑記。。
今までpearのadodbの$db->execute("update〜〜")でやってて、それならupdateでも
クエリ成功したら1が返って来てたんですが、zendFWのupdateメソッドに変更したら
行数しか返ってこなくてif($rs==1)の確認ができなくなってたわけです。
問題はFWの知識不足に行き着きそうなので、そっちで考えます。ありがとうございました。
0547nobodyさん
2010/03/04(木) 17:06:50ID:???0548nobodyさん
2010/03/04(木) 17:18:27ID:???0551548
2010/03/04(木) 18:23:07ID:???0552nobodyさん
2010/03/04(木) 21:45:50ID:???0553nobodyさん
2010/03/04(木) 22:18:10ID:Xd0cEYC5質問をしたものです。
あのあとPHPファイルとログファイルを置いてあるフォルダに .httacces ファイルを設置し
order allow,deny
deny from all
と設定することで無事ログファイルを非公開にすることが出来ました。
ところでログファイルを置いているフォルダにアクセスログを取るPHPスクリプトも同居させていますが
このファイルをサイトから include する分には問題無いんですね。非公開フォルダに置いてあるphpファイル
はもしかしたらインクルードできないのではと思っていましたが杞憂のようです。
0554nobodyさん
2010/03/04(木) 22:35:25ID:???0555nobodyさん
2010/03/05(金) 00:15:54ID:???0556nobodyさん
2010/03/05(金) 01:25:28ID:???口にはわざわざ出さないけどな(今出しちゃったけど)
0557nobodyさん
2010/03/05(金) 01:26:04ID:???/home/lib/にlib.phpとlib2.php
/home/www/にhtml.php
あるとしてhtml.phpに
require_once("../lib/lib.php");
require_once("../lib/lib2.php)";
と書いているのですが、lib.phpとlib2.phpがお互いに参照したくなったので
lib.phpにrequire_once("lib2.php");
lib2.phpにrequire_once("lib.php");
と書いても問題ないでしょうか?
0559nobodyさん
2010/03/05(金) 05:59:48ID:8KOlP1UUaliasesには hoge:"|/usr/bin/php /var/www/hogehoge.php"
と設定し、newaliasをしてあります。
/var/wwwにあるhogehoge.phpには
<?php
$pointer=fopen("./test.txt", "w+"); //ファイルを開きます
flock($pointer, LOCK_EX); //ファイルをロックします
$ntime = date("Y年n月j日h時i分s秒");
fputs($pointer, $ntime."\n");
flock($pointer, LOCK_UN); //ロックを解除します
fclose($pointer); //ファイルを閉じます
?>
と記述してあります。
コマンドラインからhogehoge.phpは正常に実行でき、test.txtにはタイムスタンプが出力されるのですが、hoge宛にメールを送ってもphpは実行されていません。
postfixのログには
postfix/local[28018]: 1EBB65F8269: to=<hoge@****>, relay=local, delay=0.08, delays=0.04/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to command: /usr/bin/php /var/www/hogehoe.php)
とあるのでパイプ処理は通ってる気もするのですが。
なにか考えられる原因ってありますでしょうか?
0560nobodyさん
2010/03/05(金) 06:02:58ID:???postfixのログ、
status=sent (delivered to command: /usr/bin/php /var/www/hogehoe.php)
の最後hogehoe.phpとありますが、hogehoge.phpの間違いです。
0561nobodyさん
2010/03/05(金) 06:51:16ID:???それを PHPUnit を使ってやっている、という方はいませんか?
自分でバッチ処理を書こうかとも思ったんですが、それでいけるんなら
それでやってみたいなと・・・。
本来の使い方とは違う気もしますが、運用の実績があれば聞いてみたいです。
よろしくお願いします。
0562nobodyさん
2010/03/05(金) 07:05:12ID:???実行時のカレントディレクトリにtext.txtができる
./test.txt を /var/www/test.txt にしてみるとか
0563nobodyさん
2010/03/05(金) 08:42:39ID:oScRDulS【PHPのバージョン】5.2.12
【質問内容】
文字列をASCII値に変換したいと思っています。
1文字ならord()で可能だと思うのですが、複数文字からなる文字列の場合はバラバラにして各文字を変換するしかないのでしょうか?
適切な関数または良い方法があったらお教えください。
よろしくお願いします。
0566nobodyさん
2010/03/05(金) 10:16:56ID:???0568nobodyさん
2010/03/05(金) 11:59:02ID:nN2jzBk7するとブラウザに、「
90){ $err.="年齢が適切な値ではありません\n"; }; if(!ereg("^[0-9]{3}$",$_POST['zip1'])){$err.="郵便番号(前半)が適切ではありません\n";} 〜 header("Location: thanks.html"); exit; }
」、と「formmail.php」の内容が途中から全て表示されて意図した動作になりませんでした。
コレはどういう事で、また、どのようにすれば解決するのかを教えて頂きたいです。
色々と試しましたが解決しませんでした。
何か自分のPHP、Apacheの設定がおかしいのでしょうか?
それとも、このサンプルのコードがおかしいのでしょうか?
サンプルのソースは100行以上あるのでどう説明したらいいのか分かりませんが、ブラウザに表示される前後のコードを書いておきます。
<?php
.......
if($_POST['age']<10 || $_POST['age']>90){
$err.="年齢が適切な値ではありません\n";
};
if(!ereg("^[0-9]{3}$",$_POST['zip1'])){$err.="郵便番号(前半)が適切ではありません\n";}
........
header("Location: thanks.html");
exit;
} //ここで最後です。 ZFで学んだ通り、?>は省略しております。省略しなくても結果は同じでした。
0569568
2010/03/05(金) 12:01:29ID:nN2jzBk70570nobodyさん
2010/03/05(金) 12:08:47ID:???0571nobodyさん
2010/03/05(金) 12:14:35ID:???0573568
2010/03/05(金) 12:16:54ID:???大馬鹿でした
そのままサンプルをクリックしたのでURIが「file:///C:/Apache2.2/htdocs/Mycomi/01/formmail/input.html」のようになっておりました
「http://localhost/Mycomi/01/formmail/input.html」と自分で打ち直したらちゃんと動作しました
ご迷惑おかけしました
0574nobodyさん
2010/03/05(金) 12:21:43ID:???0575nobodyさん
2010/03/05(金) 12:23:32ID:???ロックしてから読み書きすると言いと書かれていました。
既に他プロセスによってロックがかけられていればflock関数は失敗するので
そのときはsleep(1)で1秒待ってから再度ロックをチャレンジする。そういうのを3回くらい
繰り返すプログラムが書籍に紹介されていました。
でもこのスレではなぜかflock関数は忌み嫌われている印象を受けます。
便利な関数だと思うのですがこのスレでの受けが良くないのはなぜでしょうか?
0576nobodyさん
2010/03/05(金) 12:25:29ID:???0577nobodyさん
2010/03/05(金) 12:25:59ID:???0578nobodyさん
2010/03/05(金) 12:26:09ID:???これってどうやってるの
0579568
2010/03/05(金) 12:26:09ID:???もうしわけないです
ただ、このような事やサンプルの置き方は本には書かれておりませんでした
今まであまりにもサンプルをクリックしただけで動作するものに慣れていたので、パスがおかしいとか気が付きませんでした
自分の不注意でした、すみません
0580nobodyさん
2010/03/05(金) 12:27:25ID:???作るのも管理するのもあなたなのだから誰も止めやしない
0582nobodyさん
2010/03/05(金) 12:28:37ID:???どこにコピーして何のソフトを起動してアドレスバーにどう記述してくださいって
まともな入門書なら書いてあると思うがw
0583nobodyさん
2010/03/05(金) 12:36:38ID:???webプログラム素人は仕方ない
EXE同様に、ダブルクリックで動かないプログラムはバグってると思うんだぜ?
FTPでダウンロードしたローカルにあるファイルを手直ししただけで、
ブラウザで確認したら反映されてないと騒ぐし素人は見ていて飽きないよ
0584nobodyさん
2010/03/05(金) 14:16:38ID:Q1wicMuL【PHPのバージョン】php5.3.0
【質問内容】
外部exeファイルを実行して値を取得できればと考えています。
例えばhoge.exeというテキスト変換プログラムをphpから実行して出力される値を取得したくhoge.exe -t "文字列"というコマンドを実行したいのですが、以下関数を使って
$res=system(`./hoge.exe -t ¥"123456¥"`, $ret);
$res=passthru(`./hoge.exe -t ¥"123456¥"`, $ret);
としてみましたが、Cannot execute a blank commandというエラーが表示されて悩んでいます。
一応DOS窓上でコマンドを叩くと変換された文字列が表示されるのですがphpだと方法が分からず困っております。
よろしくお願いいたします。
0585nobodyさん
2010/03/05(金) 14:18:46ID:???0586nobodyさん
2010/03/05(金) 14:51:19ID:aBGtSP20アドレスが●●●を含むリンクをクリックした会員にポイントを付与する
これってPHP学べばできますかね?
どうやればできますかね?
0587nobodyさん
2010/03/05(金) 14:54:52ID:???0589584
2010/03/05(金) 15:05:13ID:Q1wicMuL有難うございます。「`」から「"」に変えてみたところCannot execute a blank commandのエラーは無くなりました。
結果system関数は空を返しましたが、passthruは文字を返してくれました。
ただ新たな問題としてDOS上で叩いたコマンドは10文字以上の文字列を返すのに
php上でpassthruを使ってexeファイルを実行すると1文字しか返さないんですよねぇ…
0590nobodyさん
2010/03/05(金) 15:32:04ID:fG5LjHc7$hoge = ($hoge < 1)? 1 : $hoge; この ? と : なんですけど、
意味が分かりません。ググッテもこういう書き方の説明がありません。
?と:はどういう意味があるのでしょうか。
0591nobodyさん
2010/03/05(金) 15:34:28ID:???三項演算子
PHP: 比較演算子 - Manual
http://php.net/manual/ja/language.operators.comparison.php
0592590
2010/03/05(金) 15:41:13ID:fG5LjHc7ありがとうございます。てことは、この式は↓こういうことですか?
if($hoge<1){
$hoge = 1;
}else{
$hoge = $hoge;
}
(else以降は不要だと思いすが、>>590の式の分解として記述しました)
0594590
2010/03/05(金) 15:48:06ID:???0595nobodyさん
2010/03/05(金) 18:46:11ID:NJlwtSqm【PHPのバージョン】php5.12
【連携ソフトウェア】ありません
headerで
header("test: test1");
という内容で返しているんですが、test1の部分には何か文字数制限などあるんでしょうか?
PHPとしては特に制限はないように見えるのですが、そういった制限があるのでしたらどういった制限があるのか教えていただけると助かります。
0596nobodyさん
2010/03/05(金) 18:46:42ID:???0597nobodyさん
2010/03/05(金) 18:48:00ID:p18my2+g【PHPのバージョン】PHP Version 5.2.11
【連携ソフトウェア】MySQL 5.0.77 + phpMyAdmin
【質問内容】
RSSの取得にSimplePie(1.1.3)と言うパーサを使っています。
http://simplepie.org/
CDATAセクションの拾い方がわからず困っています。
ご存知の方がいらしたら教えてください。
0598nobodyさん
2010/03/05(金) 18:48:40ID:???0599595
2010/03/05(金) 18:53:20ID:NJlwtSqmすいません。
バージョンは5.1.6でした。
最新のバージョンを使えればよいのですが、仕様要件で5.1.6で固定されておりますのでご理解いただければと思います。
0601nobodyさん
2010/03/05(金) 21:58:43ID:???こんな風に
$smarty->register_outputfilter("filterSjis");
function filterSjis($buff, &$smarty) {
return mb_convert_encoding($buff,"SJIS-win","UTF-8");
}
ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか?
0602nobodyさん
2010/03/05(金) 22:09:26ID:???実際その予想外の事態が生じてPHPコードは正しく終了したのですがなぜかそのPHPスクリプトを
呼び出した部分から下のhtmlコードがまるっきし出力されなくなってしまいました。
exit() はPHPだけでなくHTMLの出力をも中止させてしまうようです。
そうではなくて現在実行しているPHPスクリプトだけを中断し、残りのHTMLは問題なく出力させるには
どういうコードを書けばいいでしょうか?
0603nobodyさん
2010/03/05(金) 22:10:52ID:???0605nobodyさん
2010/03/05(金) 23:24:07ID:???0607nobodyさん
2010/03/06(土) 10:13:13ID:???0608nobodyさん
2010/03/06(土) 10:14:31ID:???人に聞いて解決してるのに自己解決とかぬかしてやがる
0609nobodyさん
2010/03/06(土) 10:50:26ID:6YHfBKj/if文とswith文以外のもので戸惑っています。
1番の意味は2番と同じでしょうか?
1番 $act = $act == 'index' ? 'read' : $act;
2番 if ($act == 'index') { $act = 'read' : $act};
If以外の条件分岐の説明を検索してもなかなか見つからず、
本にもif文しか載っていないものが多く、どうしたものかと。
0612nobodyさん
2010/03/06(土) 11:03:21ID:6YHfBKj/ありがとうございます! 三項演算子というのですね。
0613nobodyさん
2010/03/06(土) 14:08:10ID:8pehZnIZ【PHPのバージョン】php5.2.11
【連携ソフトウェア】Apache/1.3.42
【質問内容】
A>B>Cという遷移をするところで、CにPOSTが来ないときがあり、その時に$_SERVERのdumpをしてみたら、以下のような所がありました。
["REQUEST_METHOD"]=>
string(102) "id=9&command=81&quantity[1]=0&quantity[2]=0&quantity[3]=0&quantity%5B4%5D=0&quantity%5POST"
このPOSTの前の文字列は、AでPOSTされるべきフォーム達で、Bでは出力していないはずなので、Cには来るはずがないんです。
似たケースに遭遇し、解決した方はおられないでしょうか
0614nobodyさん
2010/03/06(土) 14:18:51ID:???0615nobodyさん
2010/03/06(土) 14:33:18ID:f6Vbrv2v【PHPのバージョン】5.2.9(ソースSJIS、zend mb有り)
【質問内容】
セッションスタートした画面で、
$rec[0-9999行][列名(20列)]に、平均20文字程度の文字
という配列を
$_SESSION[hoge_Table](仮称)に代入して、headerで画面遷移すると、
セッションがすべて吹っ飛びました。(全部unset)
$rec[0-2999行][列名(20列)]に、平均20文字程度の文字
という配列ならOKでした。
9999行と2999行の違いだけですが、どこにも書いてありません。
目盛りはデフォルトの128MBで、上記9999行でもCSVで5MB程度しか
有りません。
0617nobodyさん
2010/03/06(土) 14:36:28ID:f6Vbrv2vどの辺を読めばよいのでしょうか?キーワードだけでも!!
0618nobodyさん
2010/03/06(土) 21:43:07ID:???とりあえず設計からやり直した方がいいんでね・・・
0619nobodyさん
2010/03/06(土) 22:01:31ID:???DBかファイル使った法がいいよねー
0620nobodyさん
2010/03/06(土) 23:12:21ID:???0621nobodyさん
2010/03/06(土) 23:49:42ID:???■ このスレッドは過去ログ倉庫に格納されています