トップページphp
1001コメント275KB

【PHP】下らねぇ質問はID出して書き込みやがれ 100

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2010/10/27(水) 17:41:33ID:2BwSQxVQ
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0811nobodyさん2010/11/09(火) 16:53:13ID:???
>>810
array_values

一度はマニュアルを読んだほうが良いよ
0812nobodyさん2010/11/09(火) 16:56:23ID:???
>>811
このスレの存在意義を否定するような発言は容認できません。
0813nobodyさん2010/11/09(火) 17:09:39ID:???
>>810
sortでもいいんじゃね。
0814nobodyさん2010/11/09(火) 17:11:51ID:???
どちらかというと、どうして並び替えようと思ったのかが気になる

foreach ($array as $key=>$value){

}
0815nobodyさん2010/11/09(火) 17:18:13ID:???
array_merge($val)とかね
0816nobodyさん2010/11/09(火) 17:20:52ID:???
>>803

できるお

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:???
getimagesizeって、内部でどうやって処理してるのかなぁ。
imagecreatefromstring(file_get_contents($src)) と imagesx imagesy じゃ無駄があるんだろうか。
0818nobodyさん2010/11/09(火) 17:45:31ID:???
>>811-815

はー、すみません、こんな関数があったとは…
助かりました、マニュアルもっと読むようにします
0819nobodyさん2010/11/09(火) 22:04:53ID:???
>>807
見てないかもしれないけど
ファイルを作成せず使う汎用的な方法としてデータスキームに変換する方法がある

$data_scheme = "data:image/jpeg;base64,". base64_encode(バイナリ);
getimagesize($data_scheme);

PHP以外でもデータスキームはIE以外のメジャーなブラウザで利用できるから
知っておくと役に立つかもしれない
0820nobodyさん2010/11/09(火) 23:25:10ID:???
>>816
これはすごい、ちょっと感動した
これCで実装して標準クラスにするべきだわ
0821nobodyさん2010/11/09(火) 23:33:07ID:???
DBで読み書きする例も面白いね
0822nobodyさん2010/11/10(水) 00:02:48ID:???
世界には変態が沢山いるからな
0823nobodyさん2010/11/10(水) 08:49:21ID:???
>>822
呼んだ?
0824nobodyさん2010/11/10(水) 10:31:56ID:dwXH9brC
キーワードが空の時はエラーチェックをしてそこで終了したいのですが

if(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:???
とりあえず、ここへ書いたときはexitの前に全角空白が入っているが
0829nobodyさん2010/11/10(水) 10:53:11ID:???
全角スペースじゃねーの? 文字コードと設定によってはundefinedでるかもな
0830nobodyさん2010/11/10(水) 10:54:35ID:dwXH9brC
PHP 5.2.14 です
具体的にはさくらインターネットです
0831nobodyさん2010/11/10(水) 10:57:44ID:???
<?php
$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:???
ID出して書き込みやがれ
0840nobodyさん2010/11/10(水) 13:00:06ID:???
>>838
タブ幅はエディタ設定によって違うから
0841nobodyさん2010/11/10(水) 13:01:40ID:???
それだけの理由で禁止にするのはあんまりだわ
バイト数だって半角スペース1つ分で少なくていいのにな
0842nobodyさん2010/11/10(水) 13:03:47ID:???
規約ってのは統一するためだろ
どっちも一長一短あるしな
「タブ幅はエディタ設定によって違う」のなら、好きな幅に変えれて便利じゃない?って話にもなるし
0843nobodyさん2010/11/10(水) 13:04:10ID:???
エディタ設定云々はタブ幅指定でOKだろ
0844nobodyさん2010/11/10(水) 13:07:34ID:???
C言語世代はやけに毛嫌いするよねTAB
0845nobodyさん2010/11/10(水) 13:12:01ID:???
スペース派も4文字分だとか2文字分だとか、いやいや3文字分だとかウゼェしな
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:???
PHPソースはともかくHTMLソースでやたらインデントしてるのって
かえって見にくい。
0850nobodyさん2010/11/10(水) 14:57:17ID:???
ほとんど改行してないHTMLも見かけるけどね、googleとか
0851nobodyさん2010/11/10(水) 15:02:39ID:???
除去してるだけでしょ
0852nobodyさん2010/11/10(水) 15:04:54ID:???
>>850
インデント&改行なしはわざとです
0853nobodyさん2010/11/10(水) 15:07:16ID:???
HTMLから改行とインデントなくすだけでも
リクエスト数があるサイトだと
結構転送量減らせるからそれは普通
0854nobodyさん2010/11/10(水) 17:23:58ID:???
>>852
わざと・・・って、わざとでないとしたら偶然?
有りでも無しでもわざとに決まっているではないか。
0855nobodyさん2010/11/10(水) 17:26:26ID:???
>>854
ソースを可読性のために改行することをしらない人もちょっと前のスレでいたし、
そういう意味で「(改行をしらないのではなくて)わざと改行していない」って言ってるんじゃないかな
たぶん
0856nobodyさん2010/11/10(水) 17:30:46ID:???
【PHP】下らねぇ質問はID出して書き込みやがれ 99
あったこれだ
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:???
>>854
可読性をあげるために、インデント・改行は普通はするだろ?
でも特に何も考えず(何も意図せず)改行入れる/入れない人もいるわけだ。

「わざと」というのは、転送量などのことを考慮して、意図的になしにしているという意味で書いた
0858nobodyさん2010/11/10(水) 17:48:00ID:???
了解しました。
0859nobodyさん2010/11/10(水) 18:45:44ID:Lg2WsF+P
PHP 5.2.14です。

"Thu Sep 16 03:16:09 +0000 2010"という文字列の日付書式があるのですが、これをtime()で返すような秒に変換するにはどうしたらよいのでしょうか。
逆ならdate("r")でいいんですが。
0860nobodyさん2010/11/10(水) 18:53:26ID:???
strtotime
0861nobodyさん2010/11/10(水) 19:06:15ID:???
どうも
0862nobodyさん2010/11/10(水) 20:10:03ID:???
やってみて愕然とするがいいさ
0863nobodyさん2010/11/10(水) 20:11:04ID:???
間違えました・・・すみません
0864nobodyさん2010/11/10(水) 20:12:42ID:???
>>861
どうもじゃなくてありがとうございますだろ
ったく最近のガキはどういう教育受けてんだ・・・
0865nobodyさん2010/11/10(水) 20:17:40ID:???
>>864
どうもとうございますんでした。
0866nobodyさん2010/11/10(水) 20:18:34ID:???
>>864
教育を受けさせてるのは昔のおっさんだろ
0867nobodyさん2010/11/10(水) 20:22:13ID:???
>>866
教育してるのもな
0868nobodyさん2010/11/10(水) 20:28:27ID:???
昔のおっさんは今は爺さんじゃないか?
0869nobodyさん2010/11/10(水) 20:29:33ID:???
やはり礼儀もなってなければ知能も低い
0870nobodyさん2010/11/10(水) 20:35:19ID:???
>>868
たしかに
0871nobodyさん2010/11/10(水) 20:38:55ID:???
http://www.ideaxidea.com/archives/2010/11/php_snippets.html
■ フォロアーの数を取得

一番よく使いそうですな。

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:???
>>871
$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:???
mysqlで構築したDBからデータを取得し、ページ上にechoで表示させようと考えています。
しかし、同じように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);
0875nobodyさん2010/11/10(水) 23:12:50ID:???
>>1
08768742010/11/10(水) 23:18:46ID:NEmk/IZ1
あぁ、申し訳ないです
改めて、よろしくお願いします。
0877nobodyさん2010/11/10(水) 23:23:48ID:kZSlAmYQ
$dbh = new PDO('sqlite:db.sqlite', null, null);
$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:kZSlAmYQ
あ、ありがとう
0880nobodyさん2010/11/10(水) 23:30:17ID:???
>>874
TESTと"テスト"ってのはクオテーションが含まれない方がいいって話から察するに
TESTと"TEST"、あるいはテストと"テスト"のミス?
08818742010/11/10(水) 23:31:16ID:NEmk/IZ1
>880
あぁぁすみません、おっしゃるとおりです。
同じテーブルの同じデータを抽出しているのに、ダブルクォーテーションがつく場合とつかない場合があるという事です。
0882nobodyさん2010/11/11(木) 00:07:17ID:???
PHP側に原因があるのかもしれないけれどMySQLスレ行ったほうが詳しい人多いかも
http://hibari.2ch.net/test/read.cgi/db/1276247839/
0883nobodyさん2010/11/11(木) 00:57:19ID:CAyGAnz/
PHPの処理のタイミングを教えてください。

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の下部へ書かれているアドミン情報が見られる心配はないでしょうか?
大丈夫でしょうか?
08848832010/11/11(木) 01:44:48ID:CAyGAnz/
もう1つ質問です。883に関連していますが、

header でジャンプした場合、セッションが引き継がれないので
urlの後ろにセッション変数を追加しないといけないと知りました。
具体的には

header("Location: $url"."?".session_name()."=".session_id());

と書きますが、その場合アドレスバーにセッション変数が表示され非常にみっともないです。

header 関数のように、他のページ(htmlやphpファイル)へジャンプし
且つセッションを引き継ぐにはどうすればいいのでしょうか。
0885nobodyさん2010/11/11(木) 03:02:30ID:???
>>883
「心配はないでしょうか」と問われれば「心配です」としか答えようが無いね。
どのレベルでのセキュリティを心配しているのか不明なので答えようが無い。
ADMINアカウントを乗っ取れば見られてしまうなど
0886nobodyさん2010/11/11(木) 03:21:26ID:???
>>884
マニュアルの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でもいいですが。
08878812010/11/11(木) 06:25:27ID:???
>882
どうもです。
そちらでも質問してみることにしました
0888nobodyさん2010/11/11(木) 10:36:49ID:???
>>883

セッションの仕組みを理解することをお勧めする
//--------------------------------------------
// header でジャンプした場合、セッションが引き継がれないので
// urlの後ろにセッション変数を追加しないといけないと知りました。
//--------------------------------------------

どこで知ったのか知らんがこれ正しくは
//セッションが引き継がれない場合もある
じゃないかの?

それでも正しくないか・・・
これは別に「header でジャンプした場合」に限らんからなw

セッションIDの引渡しにブラウザ側もしくはPHP側の設定で
クッキーが使えない場合、残された手段がurlにくっつけてgetで引き回す方法しか残ってないだけ

かな?
0889nobodyさん2010/11/12(金) 00:21:56ID:???
>>888
かな? って・・・
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:???
XSSで問題なのはJavaScriptなので
それらを無効にできればよい
具体的にはjavascript文字列、<script>タグ、onClickなどのonイベントハンドラあたりを除去かな
まぁ無難なのは直接タグを記述させるのではなく
プレースホルダのような感じで代わりのものを使用する方法
なんか適当な代替タグのようなものを使って利用者にはそれで記述してもらう
例えば[太字]あいうえお[/太字][強調]こんにちは[/強調]とかしてもらって
サーバ側でhtmlspecialchars処理のあとに[太字]を<strong>に置き換えたりする処理をすればよい
0892nobodyさん2010/11/12(金) 02:14:00ID:???
>>890
strip_tagsは
<span onmouseover="alert('XSS!!')" style="display:block;width:100%;height:100%">hey</span>

なんて記述も余裕でスルーするので、>>891の方法が現実的
0893nobodyさん2010/11/12(金) 02:15:51ID:FZPLBchw
>>891-892
なるほどー。
<script>タグは許可しませんが、確かに、他のタグ内でonclickなどを使われてしまう可能性がありますね。
それを除去する方法について知識がないので、代替タグにするのが楽かなと思いました。
早速やってみます。
ありがとうございました!
0894nobodyさん2010/11/12(金) 05:21:11ID:EVG7rP8i
日本語を扱っている場合、mbstringが使えるのって普通ですか?
私が使っているサーバで、phpinfo()するとmbstringの項目が出てこないので
管理者に問い合わせようとしています。
0895nobodyさん2010/11/12(金) 05:51:16ID:???
バージョンしらんけど古いサーバなら対応してないんじゃね
その場合管理者にメールしてもスルーされると思うが
root権限なしの専用鯖ならともかくどうせ共有鯖だろ?
08968942010/11/12(金) 06:26:27ID:EVG7rP8i
>>895
レスありがとうございます。

サーバの設置は今年の4月です。
業者への要求資料にmbstringについて明記していなかったのではないか、
と考えています。
私はサーバ管理者と連絡が取れる立場です。
0897nobodyさん2010/11/12(金) 06:39:27ID:???
業務用の専用鯖かな?
連絡して解決するならとったほうがいいかもね
0898nobodyさん2010/11/12(金) 08:24:32ID:???
>>894
mbstring は拡張モジュールです。つまり、デフォルトでは 有効にならないということです。 configure スクリプトでモジュールを有効にする必要が あります。詳細は、インストールの 節を参照してください。
http://jp.php.net/manual/ja/mbstring.installation.php
0899nobodyさん2010/11/12(金) 15:13:58ID:???
拡張モジュールはmb以外にもたくさんあるから、
必要なモジュールがあるなら自分で確認しておかないと。
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の時の自動判別限界をしらんのかいな…
0904nobodyさん2010/11/12(金) 19:16:57ID:???
いやだからperlのjcodeのgetcodeよりも貧弱だって
おまいこそ知らんのか
0905nobodyさん2010/11/12(金) 19:52:27ID:???
そういう時は判別する文字を連結して放り込むんだよw
0906nobodyさん2010/11/12(金) 19:58:29ID:???
自動判別が理論的に必ず漏れるから意味無いといってるのにそれがわからんのかいな…
自動判別なんざ脆弱性の固まりもいいとこ
0907nobodyさん2010/11/12(金) 20:07:41ID:???
可能性を言い出したら切がないわ
0908nobodyさん2010/11/12(金) 20:10:30ID:???
PHPの文字コード自動判定は、理論的に漏れるとか厳密がどうのというレベルを語ることすらおこがましいくらいのクソっぷりということを忘れるなよ
0909nobodyさん2010/11/12(金) 20:22:01ID:???
mbstringで文字コード判別することなんてある?
0910nobodyさん2010/11/12(金) 20:41:20ID:???
まぁ仲良くしろよ
レス数が900を超えています。1000を超えると表示できなくなるよ。