【PHP】下らねぇ質問はID出して書き込みやがれ 100
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2010/10/27(水) 17:41:33ID:2BwSQxVQ過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 99
http://hibari.2ch.net/test/read.cgi/php/1286938893/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0804nobodyさん
2010/11/09(火) 06:27:15ID:???>ローカルファイルへの参照、あるいは (設定で許可されているなら)
>ストリームを用いたリモートファイルへの参照を指定できます。
0805801
2010/11/09(火) 06:32:05ID:2HKVFAPpその言葉をみてなんとなくそんなことができるのかなぁと思ったのですが、
やっぱその文言はそういうことだったのですか?
ただ申し訳ないですが全然意味がわかりません・・・
出来れば具体的にどうすればいいか教えていただけると嬉しいです。
0806nobodyさん
2010/11/09(火) 06:38:40ID:???おもいっきり例3に書いてあるよ
$size = getimagesize("http://www.example.com/gifs/logo.gif");
// ファイル名にスペースが含まれる場合は適切にエンコードしてください
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
例をみたり下の方にあるUser Contributed Notesとかは
出来る限り見たほうが役に立つのに見ない人が多いのは何なのだ
0807801
2010/11/09(火) 06:47:43ID:2HKVFAPpすみません。ようやく理解しました。
cURLでサーバから画像ソースを取得する工程で、その処理を入れて調べればいいわけですね。
2重リクエストにならないか調査後に試してみたいと思います。
一応非効率ですが一度ファイルを出力してしまえば可能なことはわかったのでこれで質問終了します。
どうもありがとうございました。
0809nobodyさん
2010/11/09(火) 07:50:36ID:???だと余計なIOが発生するから
ソース取得→メモリに一時的にファイルとして保存してそれを使ってファイルを指定する関数が使えないか?
ということかと思われ
取得先からソースを取得する時点で取得先ファイルに対してチェックすればいいということで納得したのかと
0810nobodyさん
2010/11/09(火) 16:43:36ID:bQQ5pU57array(
[0]=>'a',
[1]=>'b',
[5]=>'c'
)
という配列を
array(
[0]=>'a',
[1]=>'b',
[2]=>'c'
)
に一発で変換する関数はないでしょうか?
0814nobodyさん
2010/11/09(火) 17:11:51ID:???foreach ($array as $key=>$value){
}
0815nobodyさん
2010/11/09(火) 17:18:13ID:???0816nobodyさん
2010/11/09(火) 17:20:52ID:???できるお
http://jp2.php.net/manual/ja/stream.streamwrapper.example-1.php
この例)で出ているクラスを
VariableStream.inc として保存しパスが通ってる所に保存
無意味な処理だが以下を例にしまつ
----------------------------------------------
//データを取得
$img_data = file_get_contents("hoge.jpg");
require_once("VariableStream.inc");
stream_wrapper_register("var", "VariableStream") or die("Failed to register protocol");
list($width, $height) = getimagesize("var://img_data");
こんな感じのことかな????
今回の要件では使うのは無駄っぽいけど、参考まで
0817nobodyさん
2010/11/09(火) 17:35:40ID:???imagecreatefromstring(file_get_contents($src)) と imagesx imagesy じゃ無駄があるんだろうか。
0819nobodyさん
2010/11/09(火) 22:04:53ID:???見てないかもしれないけど
ファイルを作成せず使う汎用的な方法としてデータスキームに変換する方法がある
$data_scheme = "data:image/jpeg;base64,". base64_encode(バイナリ);
getimagesize($data_scheme);
PHP以外でもデータスキームはIE以外のメジャーなブラウザで利用できるから
知っておくと役に立つかもしれない
0821nobodyさん
2010/11/09(火) 23:33:07ID:???0822nobodyさん
2010/11/10(水) 00:02:48ID:???0824nobodyさん
2010/11/10(水) 10:31:56ID:dwXH9brCif(empty($key)){
echo "空欄です";
exit();
}
とやると
Fatal error: Call to undefined function exit()
ってエラーが出るんですが
undefinedってどういうことっすかね?
die()でも出ます
0825nobodyさん
2010/11/10(水) 10:46:46ID:???exitとdieは正確には関数ではなく言語構造だからそんなエラーは通常出ないはず
0826nobodyさん
2010/11/10(水) 10:51:06ID:dwXH9brC何がどうなってて、どうすればいいんでしょうか?
0827nobodyさん
2010/11/10(水) 10:51:37ID:???とりあえず環境も書いたほうが良いよ
0828nobodyさん
2010/11/10(水) 10:52:09ID:???0829nobodyさん
2010/11/10(水) 10:53:11ID:???0830nobodyさん
2010/11/10(水) 10:54:35ID:dwXH9brC具体的にはさくらインターネットです
0831nobodyさん
2010/11/10(水) 10:57:44ID:???$a=1;
if($a){
echo 1;
exit();
}
echo 2;
↑これコピペして動かしてみ
0832nobodyさん
2010/11/10(水) 10:58:57ID:dwXH9brCお騒がせしました
0833nobodyさん
2010/11/10(水) 11:04:53ID:???全角スペースが目視できる設定にしといたが間違いないべ
0834nobodyさん
2010/11/10(水) 11:10:06ID:dwXH9brC本当にご迷惑おかけしました
一晩悩んでました
すぐ気がつくなんて感謝です
0835nobodyさん
2010/11/10(水) 11:14:43ID:???0836nobodyさん
2010/11/10(水) 11:19:06ID:???0837nobodyさん
2010/11/10(水) 11:43:35ID:???0838nobodyさん
2010/11/10(水) 12:52:03ID:???0839nobodyさん
2010/11/10(水) 12:59:35ID:???0841nobodyさん
2010/11/10(水) 13:01:40ID:???バイト数だって半角スペース1つ分で少なくていいのにな
0842nobodyさん
2010/11/10(水) 13:03:47ID:???どっちも一長一短あるしな
「タブ幅はエディタ設定によって違う」のなら、好きな幅に変えれて便利じゃない?って話にもなるし
0843nobodyさん
2010/11/10(水) 13:04:10ID:???0844nobodyさん
2010/11/10(水) 13:07:34ID:???0845nobodyさん
2010/11/10(水) 13:12:01ID:???0846nobodyさん
2010/11/10(水) 13:16:32ID:???タブインデントとスペースインデントがまざってしまうと
(タブ幅が変わると)インデント崩れる
だからタブは禁止というところもあるよ
0847nobodyさん
2010/11/10(水) 13:39:27ID:???ゴチャ混ぜが最悪なだけでしょ
0848nobodyさん
2010/11/10(水) 14:26:53ID:???0849nobodyさん
2010/11/10(水) 14:29:24ID:???かえって見にくい。
0850nobodyさん
2010/11/10(水) 14:57:17ID:???0851nobodyさん
2010/11/10(水) 15:02:39ID:???0853nobodyさん
2010/11/10(水) 15:07:16ID:???リクエスト数があるサイトだと
結構転送量減らせるからそれは普通
0855nobodyさん
2010/11/10(水) 17:26:26ID:???ソースを可読性のために改行することをしらない人もちょっと前のスレでいたし、
そういう意味で「(改行をしらないのではなくて)わざと改行していない」って言ってるんじゃないかな
たぶん
0856nobodyさん
2010/11/10(水) 17:30:46ID:???あったこれだ
ttp://hibari.2ch.net/test/read.cgi/php/1286938893/55
55 名前:nobodyさん[] 投稿日:2010/10/13(水) 17:28:29 ID:mluMwUel
改行は<br>でするのにわざわざ\nが付いてるコードがあるんですが、
\nは必ず要るんですか?
0857nobodyさん
2010/11/10(水) 17:36:14ID:???可読性をあげるために、インデント・改行は普通はするだろ?
でも特に何も考えず(何も意図せず)改行入れる/入れない人もいるわけだ。
「わざと」というのは、転送量などのことを考慮して、意図的になしにしているという意味で書いた
0858nobodyさん
2010/11/10(水) 17:48:00ID:???0859nobodyさん
2010/11/10(水) 18:45:44ID:Lg2WsF+P"Thu Sep 16 03:16:09 +0000 2010"という文字列の日付書式があるのですが、これをtime()で返すような秒に変換するにはどうしたらよいのでしょうか。
逆ならdate("r")でいいんですが。
0860nobodyさん
2010/11/10(水) 18:53:26ID:???0861nobodyさん
2010/11/10(水) 19:06:15ID:???0862nobodyさん
2010/11/10(水) 20:10:03ID:???0863nobodyさん
2010/11/10(水) 20:11:04ID:???0868nobodyさん
2010/11/10(水) 20:28:27ID:???0869nobodyさん
2010/11/10(水) 20:29:33ID:???0871nobodyさん
2010/11/10(水) 20:38:55ID:???■ フォロアーの数を取得
一番よく使いそうですな。
function get_followers($twitter_id){
$xml=file_get_contents('http://twitter.com/users/show.xml?screen_name='.$twitter_id);
if (preg_match('/followers_count>(.*)</',$xml,$match)!=0) {
$tw['count'] = $match[1];
}
return $tw['count'];
}
せっかくXMLで返してくれるAPIなのに正規表現って・・・
しかも$tw配列に入れて返す必要性あるのか
0872nobodyさん
2010/11/10(水) 20:55:47ID:???0873nobodyさん
2010/11/10(水) 21:14:52ID:???$json = file_get_contents('http://twitter.com/users/show.json?screen_name=' . $twitter_id);
var_dump(json_decode($json));
0874nobodyさん
2010/11/10(水) 22:57:02ID:???しかし、同じようにDBに接続し、クエリを発行しているのに取得結果が異なります。
対象のデータはchar型の文字列で、一方のページでは「TEST」となるのに対し、もう一方のページでは「"テスト"」となってしまいます。
接続には後述のような記述を用いていますが、SELECT文のみ異なります。
前者はSELECT * FROM test WHERE以下略
後者はSELECT aaa,bbb FROM test WHERE以下略
何故このような違いが出るのでしょうか?自分としてはクォーテーションが含まれない方が好ましいのですが、どうすれば良いでしょうか?
$db = mysql_connect("localhost", "アカウント", "パスワード") or die("接続できませんでした\n");
mysql_query("SET NAMES utf8") or die("SET NAMES utf8 の設定ができません");
mysql_select_db("データベース名", $db) or die("該当するデータベースがないようです\n");
$query = "SELECT カラム FROM テーブル名 WHERE no = '$no'";
$result = mysql_query($query, $db);
$row = mysql_fetch_row($result);
0876874
2010/11/10(水) 23:18:46ID:NEmk/IZ1改めて、よろしくお願いします。
0877nobodyさん
2010/11/10(水) 23:23:48ID:kZSlAmYQ$dbh->beginTransaction();
$sth = $dbh->prepare('INSERT idx (id, title, since, mtime) '
. 'VALUES (:id, :title, :since, :mtime);');
$sth->bindParam(';id', REQUEST_TIME, PDO::PARAM_INT);
$sth->bindParam(':title', $title, PDO::PARAM_STR);
$sth->bindParam(':since', $since, PDO::PARAM_INT);
$sth->bindParam(':mtime', $time, PDO::PARAM_INT);
$sth->execute();
PDOのbind*関数ってエスケープは不要だったっけ
0878nobodyさん
2010/11/10(水) 23:26:07ID:???0879nobodyさん
2010/11/10(水) 23:28:31ID:kZSlAmYQ0880nobodyさん
2010/11/10(水) 23:30:17ID:???TESTと"テスト"ってのはクオテーションが含まれない方がいいって話から察するに
TESTと"TEST"、あるいはテストと"テスト"のミス?
0881874
2010/11/10(水) 23:31:16ID:NEmk/IZ1あぁぁすみません、おっしゃるとおりです。
同じテーブルの同じデータを抽出しているのに、ダブルクォーテーションがつく場合とつかない場合があるという事です。
0882nobodyさん
2010/11/11(木) 00:07:17ID:???http://hibari.2ch.net/test/read.cgi/db/1276247839/
0883nobodyさん
2010/11/11(木) 00:57:19ID:CAyGAnz/phpファイルの先頭を以下のように記述しています。
(ADMIN以外がkanri.phpへアクセスしたらlogin.htmlへ飛ばす)
----- kanri.php ---
<?php
if($_SESSION["USER"] != "ADMIN"){
$url = "./login.html";
header("Location: $url");
exit();
}
?>
<html><body>
アドミン情報
</body></html>
------------------
この様な記述ですが、ADMIN以外がkanri.phpへアクセスしたときに
kanri.phpの下部へ書かれているアドミン情報が見られる心配はないでしょうか?
大丈夫でしょうか?
0884883
2010/11/11(木) 01:44:48ID:CAyGAnz/header でジャンプした場合、セッションが引き継がれないので
urlの後ろにセッション変数を追加しないといけないと知りました。
具体的には
header("Location: $url"."?".session_name()."=".session_id());
と書きますが、その場合アドレスバーにセッション変数が表示され非常にみっともないです。
header 関数のように、他のページ(htmlやphpファイル)へジャンプし
且つセッションを引き継ぐにはどうすればいいのでしょうか。
0885nobodyさん
2010/11/11(木) 03:02:30ID:???「心配はないでしょうか」と問われれば「心配です」としか答えようが無いね。
どのレベルでのセキュリティを心配しているのか不明なので答えようが無い。
ADMINアカウントを乗っ取れば見られてしまうなど
0886nobodyさん
2010/11/11(木) 03:21:26ID:???マニュアルのNotesによれば、
----------
A call to session_write_close() before the statement
<?php
header("Location: URL");
exit();
?>
is recommended if you want to be sure the session is updated before proceeding to the redirection.
----------
だそうですが、試してはいません。
ちなみにまさかと思いますが、session_startは実施しているのでしょうね?
session.auto_startでもいいですが。
0887881
2010/11/11(木) 06:25:27ID:???どうもです。
そちらでも質問してみることにしました
0888nobodyさん
2010/11/11(木) 10:36:49ID:???セッションの仕組みを理解することをお勧めする
//--------------------------------------------
// header でジャンプした場合、セッションが引き継がれないので
// urlの後ろにセッション変数を追加しないといけないと知りました。
//--------------------------------------------
どこで知ったのか知らんがこれ正しくは
//セッションが引き継がれない場合もある
じゃないかの?
それでも正しくないか・・・
これは別に「header でジャンプした場合」に限らんからなw
セッションIDの引渡しにブラウザ側もしくはPHP側の設定で
クッキーが使えない場合、残された手段がurlにくっつけてgetで引き回す方法しか残ってないだけ
かな?
0890nobodyさん
2010/11/12(金) 01:51:39ID:FZPLBchwユーザが入力した文字列($text)を表示するとき、いつも
htmlentities($text, ENT_QUOTES, 'UTF-8');
としています。
今回、strip_tagsで一部のタグを許可したいのですが、
その場合はhtmlentitiesを使わずに
strip_tags($text, '<ul><li><span>');
のようにするだけでXSSなどに対処できているのでしょうか?
どうぞよろしくお願いします。
0891nobodyさん
2010/11/12(金) 02:05:48ID:???それらを無効にできればよい
具体的にはjavascript文字列、<script>タグ、onClickなどのonイベントハンドラあたりを除去かな
まぁ無難なのは直接タグを記述させるのではなく
プレースホルダのような感じで代わりのものを使用する方法
なんか適当な代替タグのようなものを使って利用者にはそれで記述してもらう
例えば[太字]あいうえお[/太字][強調]こんにちは[/強調]とかしてもらって
サーバ側でhtmlspecialchars処理のあとに[太字]を<strong>に置き換えたりする処理をすればよい
0892nobodyさん
2010/11/12(金) 02:14:00ID:???strip_tagsは
<span onmouseover="alert('XSS!!')" style="display:block;width:100%;height:100%">hey</span>
なんて記述も余裕でスルーするので、>>891の方法が現実的
0893nobodyさん
2010/11/12(金) 02:15:51ID:FZPLBchwなるほどー。
<script>タグは許可しませんが、確かに、他のタグ内でonclickなどを使われてしまう可能性がありますね。
それを除去する方法について知識がないので、代替タグにするのが楽かなと思いました。
早速やってみます。
ありがとうございました!
0894nobodyさん
2010/11/12(金) 05:21:11ID:EVG7rP8i私が使っているサーバで、phpinfo()するとmbstringの項目が出てこないので
管理者に問い合わせようとしています。
0895nobodyさん
2010/11/12(金) 05:51:16ID:???その場合管理者にメールしてもスルーされると思うが
root権限なしの専用鯖ならともかくどうせ共有鯖だろ?
0896894
2010/11/12(金) 06:26:27ID:EVG7rP8iレスありがとうございます。
サーバの設置は今年の4月です。
業者への要求資料にmbstringについて明記していなかったのではないか、
と考えています。
私はサーバ管理者と連絡が取れる立場です。
0897nobodyさん
2010/11/12(金) 06:39:27ID:???連絡して解決するならとったほうがいいかもね
0898nobodyさん
2010/11/12(金) 08:24:32ID:???mbstring は拡張モジュールです。つまり、デフォルトでは 有効にならないということです。 configure スクリプトでモジュールを有効にする必要が あります。詳細は、インストールの 節を参照してください。
http://jp.php.net/manual/ja/mbstring.installation.php
0899nobodyさん
2010/11/12(金) 15:13:58ID:???必要なモジュールがあるなら自分で確認しておかないと。
0900nobodyさん
2010/11/12(金) 17:10:00ID:???ま、でも設定の確認をいくつかとmbは入れたほうがいい
mbの出来はいまいちだけど代わるもんがないから
0901nobodyさん
2010/11/12(金) 18:52:31ID:???0902nobodyさん
2010/11/12(金) 19:00:13ID:???0903nobodyさん
2010/11/12(金) 19:01:26ID:???perlの時の自動判別限界をしらんのかいな…
レス数が900を超えています。1000を超えると表示できなくなるよ。