【PHP】下らねぇ質問はここに書き込みやがれ 62
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/01/10(木) 18:09:19ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 61
http://pc11.2ch.net/test/read.cgi/php/1198002831/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0413403
2008/01/19(土) 13:15:48ID:???>保存する直前でintに変えてから保存すれ
フォームでsubmitした時点で文字列になっちゃうわけですかね?
気づかなかった、確認してみるよ ありがとう
0415nobodyさん
2008/01/19(土) 13:20:28ID:CC01YTh8アマゾンAWSECSというwebサービスからXMLを取得
→XMLファイルに保存
→XSLTファイルを作成(画像URLとタイトル抜き出し)
→PHPのxslt_process関数を用いてXSLTを適用しHTMLを出力
ってな事をしたました。
リロード7回に1回の割合で上手く表示されるのですが、
ほとんどの場合空白ページが表示されてしまいます。
これを回避する方法はありませんでしょうか?
原因すらよくつかめてませんで_(_ _;)_
なにか考えられることありませんでしょうか?
ブラウザはIEとFireFoxで試したのですがIEのほうが少し空白になる割合が低そうです。
コード・サンプルなどは要望がありましたらUPしますけど。
0416nobodyさん
2008/01/19(土) 13:29:11ID:???ちゃうだろ、例えpostで取得した時点で文字列だとしてもクエリ発行の際に
クオーテーションで囲むか否かで数値として入れるか文字列として入れるかが変わる
0419nobodyさん
2008/01/19(土) 13:32:21ID:???0420nobodyさん
2008/01/19(土) 13:41:16ID:???データベースに書き込んだ時点で、PHPでどういう型で
扱っていたかなんか忘れ去られる。
SQLで数値をクォーテーションでくくったからと言って
数値で記録されるというわけでもない。そもそも数値だろうが文字だろうが
全部クォーテーションでくくって何の問題もない。
データベースにはPHPの型情報なんて記録されていないんだから、
データベースから取得した時点で型がどうなるかは、データベースと
そのスキーマ定義と読み込むときに使用するPHPライブラリに依存する。
まあ、普通はデータベースのフィールドの型になるだろうが例外もあるだろう。
つまりだ、なんのデータベースを使って、テーブルのフィールドの型が
どうなっていて、どのライブラリを使ったか書けという話。
0421406
2008/01/19(土) 13:42:58ID:QtJ57h/6古い表記を知らなかったなど、変なコーディングをしていたことに気づき、
勉強になりました。
>>409
古い表記とかあるのですね。調べてみます。
確かに、受け取るデータは配列に入れて管理すると楽になりますね。
ループで一気に処理など出来ますし。
>>410
私はつい、(...)and(...)を使ってしまうへんな癖があるようです。直します
IPアドレス取得のコードは表記が古かったのですね。
> あと重複チェックなら1行ずつ取得して
> 文字列一致を探した方が早いんじゃ?
これは、具体的にはsplit(",",$read_line)を使用せずに、
例えば以下のようにするという意味でよろしいのでしょうか。
$day_ip = $day . "," . $ip;
if(preg_match($day_ip, $read_line))
> それとCSVで使用している文字を変更するとあるが
> 勝手に入力値を変更するはどうかと
確かに言われてみるとそうですね。"にしてみます。
> あと自作関数だがエラーと完了のみにして
> function error($errMsg,$title='',$param=null){
言われてみて、そういうまとめ方がいいなと気づきました。
構造的に似たような関数になってますしね。
> 因みに連投拒否のところに書いてある$ipは表示されないからねっ
自分の環境で動かしていて気づいていなかったのですが、
確かにおっしゃる通りですね。スコープを考えていませんでした。
0422403
2008/01/19(土) 13:48:09ID:???ほんとだ、、SQL送信直前にintvar()したけど、取得したら文字列でした
最終的に、取得値をNullと0で区別したいんですが…
取得値に対して再度intvar()しなきゃいけないのかな やっても
登録するカラムのデフォルト値がNULLなんで、
if(intvar(取得値)===0){〜〜;} ってした場合、NULLを拾ってきた場合も
処理してしまいますよね? めんどくさいなー
0423406
2008/01/19(土) 13:48:56ID:QtJ57h/6> なんでq5だけに改行や','が入ってくるって決め付けてるのさ
これは、誰かがformを自作して変なデータを入力しようとするのを
防ぐという意味合いですよね?
Q1〜Q4においても、入力されるデータにチェックをかける必要が
ありますね。
0424415
2008/01/19(土) 13:51:52ID:???//header("Content-Type:text/html;charset=EUC-JP");
$strDir=dirname(__FILE__);
$strXml=$strDir."/[****].xml";
$strXsl=$strDir."/[****].xsl";
$objPrc=xslt_create();
$result=xslt_process($objPrc,$strXml,$strXsl);
//print(mb_convert_encoding($result,"EUC-JP","UTF-8"));
if ($result){
print $result;
}else{
print"errno=".xslt_errno($objPrc);
print"err =".xslt_err($objPrc);
}
xslt_free($objPrc);
?>
あいよー汚いソースですんません。PHP側のソースはこんだけ
XSLTは静的に(XML文書内にXSLTを指定)はなんら問題なく表示されてます。
0425nobodyさん
2008/01/19(土) 13:57:12ID:???0426415
2008/01/19(土) 14:00:16ID:CC01YTh8どうも借りてるレンタルサーバ(ロリポ)でおかしく、サクラだと何の異常もなくうごいたので、
どうもレンタルサーバの負荷もしくは環境かなと。
迷惑かけてすいませんでしたー。
>>425ごもっともw
0428nobodyさん
2008/01/19(土) 14:56:18ID:???420よめよ。。
だいたいオマエのDBは文字列型も数値型も両方同じフィールドに入るのかと。
アドホッククエリ書いてる気がするんだけど、そうなら連結してる変数を
intに変えようが全く意味がないし。
nullと0の区別はPHPのように型が緩い言語ではやりにくい。
ライブラリとか使ってるなら勝手に変換されちゃうこともあるんでさらに。
なので数値型のフィールドではnot null制約しといて規定値0にしてる。
0429403
2008/01/19(土) 15:27:14ID:???すみません、422書いてる間に420のレスもらってたみたいで読めてませんでした
カラムはint型でデフォルトがNULLです
0だと後々の処理の中で意味を持ってしまうので(>>422)そうしたつもりだったんですが
いっそのことNULL指定もしない空欄にすべきでした
PHPが型指定あいまいってのを今回ようやく痛感した感じです
>>420
>データベースにはPHPの型情報なんて記録されていないんだから、
確かに…って感じです ありがとうございました
0430nobodyさん
2008/01/19(土) 15:30:26ID:???0431nobodyさん
2008/01/19(土) 16:19:11ID:???0432nobodyさん
2008/01/19(土) 17:53:09ID:???お前はbugのこともバクと呼んでいるんじゃないのか?w
http://e-words.jp/w/E38387E38390E38383E382B0.html
0433nobodyさん
2008/01/19(土) 17:53:12ID:???0435350
2008/01/19(土) 18:05:25ID:yodDlY2F昨日は皆様ありがとうございました。
参考にさせて頂いたページや、他のページも見ながらとりあえず読み込むことができるスクリプトを書いてみようと思い、
ちょっと書いてみましたが上手くいきません。
ファイルへのアクセスはできているようですが、echoした結果が'<'としか出ません。
どこが間違っているのか添削をお願いできないでしょうか?
よろしくお願いします。
<?php
$log = "http://www.xxxxxx.com/test.log";
$size = sizeof($log);
$handle = fopen($log, "r");
if (!$handle) {
echo "<p>Unable to open remote file.\n";
exit;
}
$line = stream_get_line($handle, $size);
fclose($handle);
print $line;
?>
0437nobodyさん
2008/01/19(土) 18:12:55ID:???0439nobodyさん
2008/01/19(土) 18:41:47ID:???何がやりたいのかよくわからんけど
echo file_get_contents("http://example.com/test.log");
じゃだめなのか
0440nobodyさん
2008/01/19(土) 18:49:35ID:???それは君の使っているサーバの仕様も関係することだから、
その具体的なサイトを書いてくれないと話は進まないぞ。
0442nobodyさん
2008/01/19(土) 19:03:12ID:???0443nobodyさん
2008/01/19(土) 19:07:03ID:???0444nobodyさん
2008/01/19(土) 19:13:58ID:???レベル ヒック (ドイツの思想家 1906-1972)
0445nobodyさん
2008/01/19(土) 20:31:01ID:???SELECTした値をカラムの型に合わせて(というかDBが返してきた型そのままで)
ちゃんと取得できるライブラリやフレームワークもあるけど、PHPだとどうかなあ?
ある程度やってくと、型が緩いってのはデメリットだと思うようになったりするんだよね。
ぼやいても仕方がないので、それを考慮してあらかじめ回避しとくしかない。
個人的には言語に関係なく、数値型のカラムの0に意味を持たせるのは避けたほうがいいと
思ってる。型に厳格な言語なら、nullと0の区別はつくけどね。
0446nobodyさん
2008/01/19(土) 21:57:02ID:FuloTUhncmdでpearのライブラリをインストールしようとしたら(php.exeの実行)、
「php_mbstring.dllが見つからなかったためインストール失敗しました」という
メッセージが出ます。(その後も立て続けに○○が見つからないという警告が出ます)
phpinfo()で調べたら
extension_dir C:\PHP\ext となっていて、その中にphp_mbstring.dllが入ってました
php.iniのextension=php_mbstring.dllもコメント解除してあります
何が原因でしょうか? それとも見るところが間違ってますか?
環境はphp5.2.3でapache2、windowsXPです
(さらにいうと、アラート表示はするものの、C:\php\PEAR\Calendarの形で
インストール自体は成功してます)
0447nobodyさん
2008/01/19(土) 22:37:05ID:???extension=php_exif.dll
extension=php_mbstring.dll
↑これじゃ、駄目で
extension=php_mbstring.dll
extension=php_exif.dll
↑こうしないと駄目
php_exif.dll は php_mbstring.dll がロードされてないとロードできないから、
その様なエラーメッセージボックスが表示される
0448nobodyさん
2008/01/19(土) 23:55:53ID:???どこで配布してるん?
0450448
2008/01/20(日) 00:25:15ID:y4+xWtE50451448
2008/01/20(日) 00:32:24ID:???0452448
2008/01/20(日) 00:36:18ID:y4+xWtE5してねーよハゲ太郎
0453448
2008/01/20(日) 00:47:43ID:???rsswriterってダウンロード元のリンクが切れてるんですが、
どこで配布しているかご存知の方いませんか?
0454446
2008/01/20(日) 00:52:46ID:jGlr+mbdすごい! ほんとにそうなってました。
で、php_exif.dllよりもmb_string.dllを先にして再起動後
pear install -f Spreadsheet_Excel_Writer としたんですが、
今度は「OCI.dllが見つからなかったため失敗」と言われました
どうしたらいいんでしょうか? .dllの記述順って厳格に決まってるんですか?
あるならどこかそれを確認できるサイトないでしょうか?
また、実際php.iniにはphp_pdo_oci.dllとphp_pdo_oci8.dllはあったけど
oci.dllはありませんでした ※でもやはりインストール自体は成功してます
http://hey.chu.jp/up/source3/No_12545.txtなんですが、
僕のphp.iniのextension変ですか?
0455nobodyさん
2008/01/20(日) 01:01:36ID:???http://www.php.net/downloads.php
ここでダウンロードしたらiniに書いてるよ。
0456446
2008/01/20(日) 01:27:57ID:jGlr+mbdありがとうございます しかしダウンロードしたphp5.2.5のphp.ini見てみると、
自分のものと記述の順序同じです
ていうか、php_exif.dllがmb_string.dllよりも先にあります
(447さんの推奨順序とちがう、、) これはいいのかな?
あと、apacheのエラーログ見ると、
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\PHP\\ext\\php_curl.dll'
というエラーが延々出ています
.dllの個数分というわけじゃないですが、これも関係してるんでしょうか?
0458nobodyさん
2008/01/20(日) 02:08:22ID:???糞zendの .ini ファイルなんて信用するなよw
windows のインストーラー壊れたまま、chm 文字化け放置してるぐらいなんだからw
で、pdo 使いたいみたいだが、これもロードの順序あるんだわw
extension=php_pdo.dll
をとにかく前の方に記述してみな
0459nobodyさん
2008/01/20(日) 03:36:50ID:???ディレクトリAにアップロードされたファイルaを
削除しようと、
unlink(basename($_POST['filename']));
を使おうとしたのですが、ディレクトリA内の指定の仕方がわからなくて困っています。
$dir = "./A/"として
unlink(basename($dir,$_POST['filename']));などいろいろやってみたのですがうまくいきませんでした
詳しくは、
html側
<form action="delete.php" method="">
<input type="text" name="filename" value="">
<input type="submit" name="delete" value="delete">
</form>
php側
<?php
if($_POST['filename']){
unlink(basename($_POST['filename']));
}
?>
ですが、エラーはないのですが、もちろんファイルを消してくれることもありませんでした。
どうかよろしくお願いします助けてください
0460459
2008/01/20(日) 03:39:35ID:SGo/1Pd2Apache 2.0 Handler
でし
0461nobodyさん
2008/01/20(日) 03:40:23ID:SGo/1Pd20462nobodyさん
2008/01/20(日) 03:55:05ID:???^ ここ
不特定多数が利用する仕組みなら、ディレクトリトラバーサル対策に
realpath()とか使って想定されたパスかどうかチェック
0463nobodyさん
2008/01/20(日) 03:56:35ID:???0464nobodyさん
2008/01/20(日) 04:04:20ID:???Apache 2.0 Handler
でし!!(*'-^)d
0465nobodyさん
2008/01/20(日) 04:23:04ID:GtMoA5jMそしてDBより取得した「DateTime型」の値を2chの様に
2008/01/20(日) 00:15:54
といった形式で表示するにはどうすれば良いでしょか?
1※レコードセットで取得しておりまして、DBより取得した値は
「2008-01-17 01:13:47」
の様な形で入っています。
2※次のサイトを参考に見ているのですがどうしても2chの様な
文字列で出力する事が出来ません。
http://www.scollabo.com/banban/php/php_12.html
0466nobodyさん
2008/01/20(日) 04:35:41ID:???もっとシンプルな方法があるかも知れんが
0467nobodyさん
2008/01/20(日) 04:43:07ID:SGo/1Pd2おお!
realpathとmethod="post"つかったら
とりあえずはファイル削除することができました!
ありがとうございました!
0468nobodyさん
2008/01/20(日) 04:43:21ID:???0469nobodyさん
2008/01/20(日) 05:26:38ID:???$test1 = 'test';
$test[0] = 'test';
$test2['test'] = 'OK';
print "$test2[$test1]\n"; ←�@
print "$test2[$test[0]]\n"; ←�A
�@は上手くいきますが�Aは上手くいきません
�Aのように、連想配列の添え字を配列にすることはできないのでしょうか
0470nobodyさん
2008/01/20(日) 05:32:19ID:???$timestamp = strtotime('2008-01-17 01:13:47');
$weekNum = date('w',$timestamp);
$week = '';
switch($weekNum) {
case 0:
$week = '日';
break;
case 1:
$week = '月';
break;
case 2:
$week = '火';
break;
case 3:
$week = '水';
break;
case 4:
$week = '木';
break;
case 5:
$week = '金';
break;
case 6:
$week = '土';
break;
}
$date = date('Y/m/d('.$week.') H:i:s',$timestamp);
俺ならクエリーで全部済ませちゃうな
0471nobodyさん
2008/01/20(日) 05:36:17ID:???ダブルクォーテーション外せば通るよ
外すのが嫌なら
print "{$test2[$test[0]]}\n";
こんな風に{}で囲めば良い
0472nobodyさん
2008/01/20(日) 05:41:31ID:???出来ました、ありがとうございます^^
0475nobodyさん
2008/01/20(日) 14:33:02ID:???相変わらずレベル低すぎ
0476nobodyさん
2008/01/20(日) 14:58:37ID:GtMoA5jM勉強してみようと思います。
>>470さん
ありがとうございます。解決しました。
でも、よくよく考えてみると態々PHPで整形する必要性は全く無いですね^^;
でもPHP関数の勉強になるので今回は敢えてPHPで実装してみようと思います。
0479nobodyさん
2008/01/20(日) 17:50:56ID:???まぬあるに書いてあるよ
>>478
全てタイムスタンプを基準としてstrtotime使ったほうが楽でないか?
0480nobodyさん
2008/01/20(日) 18:04:17ID:???0481nobodyさん
2008/01/20(日) 18:13:45ID:???0486nobodyさん
2008/01/20(日) 19:31:35ID:???ttp://www.php.net/manual/ja/language.types.string.php#language.types.string.parsing.complex
ついでに、三項演算子の説明
ttp://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.ternary
0487459
2008/01/20(日) 19:53:47ID:???Apache 2.0 Handlerのlocalhostでは動くのですが、
レンタルサーバーに同じものを設置するとエラーがでてしまいます。
html側
method="post" に変更だけ
php側
<?php
$real_path = realpath("./data/");
if(unlink($real_path.$_POST['filename'].)){
print("success!");
}
?>
エラー内容
Parse error: syntax error, unexpected ')' in /home/users/7e/****/www/********/1/delete.php on line 9
----------------------
if(unlink($real_path.$_POST['filename'].)){ で ” でくくってみたり . を加えてみたりしたのですが
余計にエラーがひどくなってしまって、この状態が一番エラー文が少なかったです。
消したいファイルと、そのファイルが入ってるディレクトリの属性は、それぞれ604と777でやってみました
よろしくお願いします。
0488nobodyさん
2008/01/20(日) 19:54:28ID:SGo/1Pd20489nobodyさん
2008/01/20(日) 19:55:38ID:SGo/1Pd20490nobodyさん
2008/01/20(日) 19:55:46ID:???0491nobodyさん
2008/01/20(日) 19:59:16ID:???0493nobodyさん
2008/01/20(日) 20:14:34ID:GtMoA5jM勉強用に人様の作ったサーバ(自宅サーバも含む)で公開されて
いるPHPスクリプトファイルを見る(参照)事って可能でしょうか?
今、PHPのコードは現在、我流で色々作っている為、
はたしてこう言う(我流コード)作りで良いのか?
と不安になったりします。
※Googleで調べたところクライアントからサーバにアクセスをすると
そのタイミングでphp ⇒ html に変換される為「不可能」との
事でした。
もしソースを参照する方法をご存知の方がいらっしゃいましたら
ご伝授願います。
0494nobodyさん
2008/01/20(日) 20:17:08ID:???0495nobodyさん
2008/01/20(日) 20:27:17ID:GtMoA5jM無理ですか。。。
Pearという物には触れた事が無いのでちょっとぐぐってみます。
あとは、職場でPHP(Java)開発をしている人と仲良くなって
ちゃっかりソースを頂こうと思います。(これってマズイ???)
ドトネト畑でして、業務レベルPHPコードが未だ現状では書けません。
0496nobodyさん
2008/01/20(日) 20:29:12ID:???危ないから、普通はそんなことはさせないようになってると思う。
例えば、会員用のログイン画面をPHPで作ってる人が居たとする。
そのPHPソースが見れるということは、どのデータベーステーブルを参照して認証してるとかの情報がわかってしまうだろう?
人様の作ったものを勝手に見るような事は考えずに、わからなかったら当面はここで質問するといい。
で、レベルが上がったら質問する側から答える側にまわれるようになるといいな。
ここのやつは、口は悪いやつも居るがみんな根はいいやつばかりだよ。
教える気もないやつは、おそらくこのスレを見もしないだろう?
がんばれ。
0497nobodyさん
2008/01/20(日) 20:30:34ID:???0498nobodyさん
2008/01/20(日) 20:39:29ID:???問題が起きるプログラムであるか、ないか。そこが大事。
過程より結果だ。
0499nobodyさん
2008/01/20(日) 20:44:34ID:???わかったことだけをスレチになろうが関係なく書き込んで
優越感に浸ろうとするが、当人は恥をかいてることに気づいていない
0500nobodyさん
2008/01/20(日) 20:47:57ID:???>>498
私も同意見です。
まずは、仕様通りに動かさせることが先決だと思う。
その後に、コードの簡素化やなるべくメモリを消費させないような仕様に変更して
価値の向上を目指す方が良いと思う。
自分の力量以上のことをやって、先に美しいコードを書こうとしていつまで経っても
完成しないのでは意味がない。
レベルは圧倒的に違うとは思うが、企業でもベータ版のソフトからどんどんユーザのニーズを取り入れたり
もっと良いものにしたりして使い勝手の良いものにしているのだし。
0501nobodyさん
2008/01/20(日) 20:48:21ID:???前者の方が良い。
あとソースコードから勉強するより、オライリーあたりの本でも読んだほうが良いと思う。
0502nobodyさん
2008/01/20(日) 20:49:12ID:???0503nobodyさん
2008/01/20(日) 20:51:09ID:???レベルひっくw
0505nobodyさん
2008/01/20(日) 20:58:38ID:???view-source: http://example.com/index.php
0506nobodyさん
2008/01/20(日) 21:09:40ID:???この場合、機能拡張をするとか、他人のソースを引き継ぐ話じゃないだろ。
システムとして動かす時、このコードでいいのか不安だという話だろ。
「そういう不安は持つ必要ない」でいいんでないの?
0507nobodyさん
2008/01/20(日) 21:16:48ID:???コードの可読性は、自分しか読まない場合でも十分意味がある。
0508nobodyさん
2008/01/20(日) 21:19:06ID:???いやそれは必要だと思うがw
493が具体的に何の話をしているのかによる。
セキュリティなのかコーディングスタイルなのか関数を再発明しているのか構造の効率化なのか何なのか。
俺が思うにろくにリファレンスも読んでいないレベルのような気もするが。
0509nobodyさん
2008/01/20(日) 21:20:32ID:???0510nobodyさん
2008/01/20(日) 23:12:37ID:???自由に認めているからどう書けばよいのかとかそういう議論に
なっていくんだろうな。プログラミングの永遠のテーマだ。
しかし、こういうテーマをずっと考えてばかりいる奴は何も進まないのは確かだ。
0511nobodyさん
2008/01/20(日) 23:17:07ID:???そりゃ間違いもいろいろあるさ。
読み方も書き方も初めてなんだ、自分が書いた文章が正しいのかそれとも他に参考になるような文章があるのか
誰だって、最初は迷うだろ。
0512nobodyさん
2008/01/21(月) 00:19:08ID:???0513350
2008/01/21(月) 00:32:11ID:YgC1PUVS皆様に教えていただいたページなどを参考にスクリプトを書いてみました。
片方のサーバから、もう片方のサーバにFTP接続でファイルをアップロードするスクリプトです。
きちんとアップロードされていました。
教えてくださった皆様、ありがとうございました。
以下は書いてみたスクリプトです。
$ftps = ftp_connect($host);
$result = ftp_login($ftps, $username, $password);
if (!$result) {
echo "接続に失敗しました。\n";
return;
}
ftp_pasv($ftps, true);
ftp_chdir($ftps, $dir);
ftp_put($ftps, $dir."/".$upload_file, FTP_ASCII);
ftp_quit($ftps);
■ このスレッドは過去ログ倉庫に格納されています