【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等)・フレームワークは各該当スレへ
0482nobodyさん
2010/03/03(水) 16:00:44ID:???それだとhoge.phpが実行されて、すぐにリロードが発生してまたhoge.phpが実行される。
途中からとかは無理
0483nobodyさん
2010/03/03(水) 16:02:19ID:???0484nobodyさん
2010/03/03(水) 16:02:30ID:???0486nobodyさん
2010/03/03(水) 16:06:41ID:uqAdaiUcとりあえずどしろうとなので何ができて何ができないのかがわからなかったのでしつしねもんしてみました
他の方法とかも考えて勉強したいとおもいます。
0487nobodyさん
2010/03/03(水) 18:02:39ID:GWDWl4Kw【PHPのバージョン】Apache/1.3.41 (Unix) PHP/5.2.11 mod_layout/3.4
【連携ソフトウェア】mysql
【質問内容】
MYSQLのバックアップとミラーへの反映を、異なるレンタルサーバ間でやろうと思っています。
dumpを作成し、ミラー側のphpへhttpアクセスし、ミラー側のphpからdumpを取得するのはセキュリティ的によろしくないっぽいので、
dumpをミラー側へMULTIPART/FORM-DATAでPOSTするのが安全かなと思うのですが、これってソケットからコーディングしなければいけなかった気がします。
もっとスマートな方法があれば、教えてもらえないでしょうか
0488464
2010/03/03(水) 18:05:45ID:0y5py4rsこういう関数があったんですね。参考になります。
とりあえず、464の内容ならファイルが壊れる可能性があるという事で理解します。
0489nobodyさん
2010/03/03(水) 18:11:39ID:???マルチパートで送るにしても結局平文だし
0490nobodyさん
2010/03/03(水) 20:27:25ID:p43dWZoRデータをデータベースにアップロードするさい、たとえば
猫 100円
犬 50円
鳩 20億円
・・・・
みたいなCSVファイルを手元に用意してそれを一気にデータベースにアップロードすることはできますか?
それともアップロードもPHPで一つ一つ行う必要がありますか?
加えてアップロード後にやっぱり
犬 200円
に変更したくなったとき、手元のCSVファイルを編集してそれをもとにデータベースの方にも反映させる
ことは不可能でしょうか?
0491nobodyさん
2010/03/03(水) 20:35:44ID:???クエリ発行しろクエリ
0492nobodyさん
2010/03/03(水) 21:04:41ID:???0493nobodyさん
2010/03/03(水) 21:31:33ID:???「手元」ってのは、DB動かしてるのとは別のマシンってことかいな?
なんにせよ、CSVを読んでその内容をDBに登録するPHPスクリプトを書くのは当然可能。
変更させるのも可能。
0494nobodyさん
2010/03/03(水) 22:42:50ID:p43dWZoRはいそうです。手元のマシンからレンタルサーバー上のデータベースにデータをアップデートしたり
随時変更したりできないものかなと思いまして。
> なんにせよ、CSVを読んでその内容をDBに登録するPHPスクリプトを書くのは当然可能。
> 変更させるのも可能。
つまり手元のマシンからレンタルサーバー上のデータベースに手を加えるには
PHPを通さないと無理ということですねorz・・・
ありがとうございました(´Д`)
0495nobodyさん
2010/03/03(水) 22:46:38ID:???0497nobodyさん
2010/03/03(水) 22:50:51ID:???0498nobodyさん
2010/03/03(水) 23:17:53ID:p43dWZoRどうやったらできますか?
0500nobodyさん
2010/03/04(木) 00:19:57ID:Xd0cEYC5問題はログファイルでしてPHPスクリプトから読み書きできるような属性にしているため(646:rw-r--rw-)
ログファイルのURLさえ分かってしまえば一般ユーザーからもログファイルの中身が盗み見されてしまいます。
ログにはアクセスしてきた人の個人情報(ホスト名や検索語)が載っているためできれば
あまり第三者に公開したくありません。だからといって属性を640:rw-r-----とかにすると
PHPスクリプトからもそのログファイルにアクセスできなくなります。
こういうときはどうしたらいいでしょうか?
0501nobodyさん
2010/03/04(木) 00:28:51ID:???0502nobodyさん
2010/03/04(木) 00:29:17ID:???もしくは直接ファイルをapacheでアクセスできないようにする
0503nobodyさん
2010/03/04(木) 00:42:56ID:???0504nobodyさん
2010/03/04(木) 00:56:27ID:???0505nobodyさん
2010/03/04(木) 01:12:06ID:???メリット:簡単
デメリット:パスが変わるので変更が面倒 サーバによってはルートより上に置けない
・先頭に.htをつけたファイル名にする
メリット:簡単
デメリット:Apache限定かつサーバの設定次第で出来ない
・htaccessで制限する
メリット:配布する形ならもっとも一般的
デメリット:Apache限定かつサーバの設定次第で出来ない htaccessの知識が必要
・データベースに突っ込む
メリット:管理がし易い データ膨大になるほど処理速度が有利
デメリット:若干面倒 セキュリティリスクが増える DBが使えないサーバでは出来ない SQLの知識が必要
0506nobodyさん
2010/03/04(木) 01:17:07ID:/m9H25630507nobodyさん
2010/03/04(木) 02:02:32ID:???0508nobodyさん
2010/03/04(木) 02:04:24ID:???0509nobodyさん
2010/03/04(木) 02:12:32ID:???0510nobodyさん
2010/03/04(木) 02:15:10ID:Xd0cEYC5>>504
フリーで転がっているものでログファイルをデータベースにしてあったり.htaccessでアクセス制限
してくださいね、と主張しているものはあまり見たことがないもので・・・
0511nobodyさん
2010/03/04(木) 02:17:12ID:???特定の拡張子だけアクセスできないようにすればいいんです
ていうか>>503の発言から察してこのスレのログぐらい嫁
>>28
0512nobodyさん
2010/03/04(木) 02:23:39ID:???基本中の基本なんだけどそれはスルーするの?
0513nobodyさん
2010/03/04(木) 02:25:54ID:???このファイルはルートの上におけなんてわざわざreadmeに書かないんじゃないかね
まぁ自サイトで使うのみなら定石だよな
0514506
2010/03/04(木) 02:35:41ID:/m9H2563あかんな
反省々々
0515nobodyさん
2010/03/04(木) 02:46:35ID:Xd0cEYC5これは失敬、特定の拡張子にだけアクセスできないよう設定するという意味でしたか
>>512
レンタルサーバーなんで公開ディレクトリ以外のディレクトリにファイルを置くことはできないんです
0516nobodyさん
2010/03/04(木) 02:47:33ID:???0517nobodyさん
2010/03/04(木) 02:50:28ID:???0518nobodyさん
2010/03/04(木) 02:50:50ID:???0520nobodyさん
2010/03/04(木) 02:55:58ID:???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:???作るのも管理するのもあなたなのだから誰も止めやしない
■ このスレッドは過去ログ倉庫に格納されています