【PHP】下らねぇ質問はここに書き込みやがれ 70
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/06/25(水) 10:14:08ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは970が立ててください立たなかった場合は980よろ
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。
◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくは質問時のトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0791nobodyさん
2008/07/11(金) 22:32:13ID:???うん。そしてその「理屈」はPHP限定のものじゃないよ。
どの言語でも使えるものだし、PHPでももちろん使えるもの。
速度アップにあまり言語ってものを意識することは無いんだよね。
0792786
2008/07/11(金) 22:34:22ID:???同意。
数学で、数式を覚えるのではなく、数式に至るまでの展開を覚える方が、
応用問題に対処できるのと一緒ってところか。
0793nobodyさん
2008/07/11(金) 22:35:15ID:???PHP限定のなら山ほどあるがな。
0795nobodyさん
2008/07/11(金) 22:36:38ID:???そういう話で、言語にこだわる人って、本質がわかっていないと思う。
漢数字じゃだめだよ。アラビア数字を使わなきゃ。みたいな。
0797てんちゃん
2008/07/11(金) 23:22:33ID:Z3Uae7Huさっきからずっと試しています。
21番ポートもダメでした
0798nobodyさん
2008/07/11(金) 23:41:16ID:???0799てん
2008/07/12(土) 00:25:37ID:xw9p7232これは普通には開けません。.htaccessで、.datのつくファイルをアクセス拒否しています。
このチェック機構すり抜けれますか?
0801nobodyさん
2008/07/12(土) 00:46:54ID:???0802nobodyさん
2008/07/12(土) 00:49:59ID:lql6772u0804nobodyさん
2008/07/12(土) 03:04:46ID:z/JSD44Zlist(,$val)のように書くとどのような動作をするんでしょうか
<?php
$arr = array ('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each ($arr)){
if ($val == 'stop'){ // stopの文字列あれば処理抜け
break;
}
echo "$val<br />\n";
}
?>
0805nobodyさん
2008/07/12(土) 03:39:00ID:???each()はarrayのkeyとvalueを返すのでlistでvalueのみ受け取ってるだけ
0806nobodyさん
2008/07/12(土) 03:50:27ID:GP2h4Bov処理的に高負荷で可読性の悪いことしてると思うけど
たぶんPHP初期のころの素人の書いたコードだろうな
keyとvalがとりたければ
foreach ( $arr as $key => $val )
とすればいいだけ
無意味な処理だ
0807nobodyさん
2008/07/12(土) 04:58:27ID:???PHP/FIまでforeach構文はなかった。
ついでに言うと、$array as $key=>$val と list($key, $val)=each($array) のパフォーマンス上の違いはほとんどない。
実際に計測してみればよく分かる。
0808nobodyさん
2008/07/12(土) 05:50:41ID:???0809nobodyさん
2008/07/12(土) 08:11:12ID:GP2h4Bovstep数で考えると
list($key, $val)=each($array)の方がstep数が多くなる
パフォーマンスに違いが無いなら
可読性がよくてstep数が短い方がいい
ちがうんか?ワレぼけ
0810nobodyさん
2008/07/12(土) 08:18:16ID:GP2h4Bov今どき使ってる化石みたいやついるの?
foreachさえあれば何でも出来るのによお
0811nobodyさん
2008/07/12(土) 12:05:30ID:???ここのベンチマーク結果だと、5倍くらい差があるね
0812nobodyさん
2008/07/12(土) 12:36:02ID:lql6772u0814nobodyさん
2008/07/12(土) 12:45:36ID:???0815nobodyさん
2008/07/12(土) 13:18:11ID:???0818nobodyさん
2008/07/12(土) 15:21:32ID:???0819nobodyさん
2008/07/12(土) 18:22:09ID:m/I4pXMk0821nobodyさん
2008/07/12(土) 19:25:21ID:???$str = "index.html";
list($filename, $extension) = split("", $str);
0822nobodyさん
2008/07/12(土) 20:05:52ID:???0824nobodyさん
2008/07/12(土) 23:12:48ID:mrNymcfjそれともベタ書き?
0825nobodyさん
2008/07/12(土) 23:14:33ID:???0826nobodyさん
2008/07/12(土) 23:35:07ID:???0827nobodyさん
2008/07/12(土) 23:54:12ID:mrNymcfj0828nobodyさん
2008/07/13(日) 00:15:54ID:???好きにすればいいと思う
0830824
2008/07/13(日) 01:13:33ID:???ぁぃ、好きにしまふ
>>829
フレームワークやテンプレートエンジンを使おうと思う前に作った、
一人で開発してる携帯サイトだから
0831nobodyさん
2008/07/13(日) 01:16:44ID:???<rss version="2.0"
xmlns:hoge="http://purl.org/rss/1.0/modules/content/"
>
<channel>
<title>あ</title>
<link>http://example.net/</link>
<description>ほげ</description>
<hoge:fuga>aaaa</hoge:fuga>
</channel>
</rss>
こんなようなXMLを出力したいんですけどDOMだとうまくいきません
どうやったら出来ますか?
0832831
2008/07/13(日) 01:21:08ID:???new DOMElement('hoge:fuga')
とやると例外が発生してしまいます
0833nobodyさん
2008/07/13(日) 01:33:48ID:???使え
>>832
どううまくいかないのか書いてくれたのは素晴らしいことだけど
例外は何が例外だったのかちゃんと教えてくれているはずだが?
0834nobodyさん
2008/07/13(日) 04:22:28ID:???基礎からのPHPで勉強していざブログアプリケーション
を作ろうと思ったのですが、このサンプルlinuxでは動かないと
担当者に言われました。
2ちゃんの方や自分でadmin.phpなどは動くようにしたのですが
index.phpとsideBar.phpとentryView.phpと
loginform.phpの部分とかがおかしいみたいで
だめでした。
誰か動くようになんとかできませんか?
ソースは
http://gichioka.web.fc2.com/blog.rar
です。
もう基礎からシリーズは絶対買いません
0836nobodyさん
2008/07/13(日) 07:25:20ID:???2.フレームワークを使える環境が整っていない
loginform.php
<FORM method="post" action="<?= $_SERVER['REQUEST_URI'] ?>">
↑自分にPOSTしてんのにloginform.phpにスクリプトが書かれていない
技術屋に丸投げしたほうが楽だよー
0837nobodyさん
2008/07/13(日) 08:23:20ID:???0838831
2008/07/13(日) 13:54:05ID:???echo '<pre>';
try {
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;
$root = $doc->appendChild(new DOMElement('rss'));
$root->setAttributeNode(new DOMAttr('version', '2.0'));
$root->setAttributeNode(new DOMAttr('xmlns:hoge', 'http://xxxx'));
$channel = $root->appendChild(new DOMElement('channel'));
$channel->appendChild(new DOMElement('title', 'あ'));
$channel->appendChild(new DOMElement('hoge:fuga', 'aaaa'));
} catch (Exception $e) {
echo sprintf("Caught exception %s\n", $e->getMessage()) . $e->getTraceAsString();
}
echo "\n" . htmlspecialchars( $doc->saveXML() );
?>
ソースはこんな感じで実行すると
Caught exception Namespace Error
#0 test.php(11): DOMElement->__construct('hoge:fuga', 'aaaa')
#1 {main}
と出ます。
$channel->appendChild(new DOMElement('hoge:fuga', 'aaaa', 'http://xxxx'));
とやればうまくいくのは分かっているのですがhoge:fugaに毎回 xmlns:hoge="http://xxxx" が追加されるのが嫌なので何とかしたいのですがうまい方法はありますか?
0839ひろき
2008/07/14(月) 01:22:49ID:iw+5oFKv@./のディレクトリに.cgiのファイルがあるかないかチェック
Aファイルがあれば、ファイル名.cgiを呼び出す
ですが、$_GET['file']に%00を付加されれば、チェックを擦り抜けられました。
<?php
$file = $_GET['file'];
echo "file test<br>";
echo "How do it?<br>";
if(!file_exists($file.".cgi")) { echo "file not found<br>"; } else { echo "file found<br>"; }
$x = file_get_contents('./'.$file.'.cgi');
echo $x; ?>
上の場合、チェック機構を擦り抜けられてしまったので、下のように書き加えました。
<?php
function check($arr){ if (is_array($arr)){ return array_map('check',$arr );} return str_replace("\0","",$arr );}
$_GET = check($_GET);
$file = $_GET['file'];
echo "read test<br>"; if(!file_exists($file.".cgi")){ echo "file not found<br>"; }else{ echo "file found<br>"; }
$x = file_get_contents('./'.$file.'.cgi');
echo $x;
?>
しかし、まだセキュリティホールがあると、指摘され、詳細がわからずに困っています。誰か教えてください
0840nobodyさん
2008/07/14(月) 02:31:00ID:???0841841
2008/07/14(月) 04:20:33ID:kV2rLyybフレーム以外の方法でそのままhtml言語として元ページに融合させたいです。
0842nobodyさん
2008/07/14(月) 04:26:54ID:???日本語でおk
ちょっと意味がよくわかんないので意図したものになるかはわからないが
a.php
<?php
echo "Hello";
?>
b.php
<html>
<head></head>
<body>
<p><?php include_once("a.php"); ?></p>
</body>
</html>
こういうことか?
外部php(この場合a.php)で最終的にecho(出力)するphp作って
それをb.phpでinclude(require)する
0843841
2008/07/14(月) 04:27:21ID:kV2rLyybframeで呼び出した場合、参照元が変わってしまうので不便で・・・
0844841
2008/07/14(月) 04:31:31ID:kV2rLyybお、こんな朝早くにありがとうございます。
すみません、ちょっと大事なこといい忘れてしまいました。
なるほど、対応している場合は、こういう風に使うんですか。勉強になります。
842さんの説明で言うところのa.phpを呼び出すほうのb.phpにあたる側のサーバーがphpに対応していなくて・・。
0845nobodyさん
2008/07/14(月) 05:00:09ID:???たとえ使えても他サーバのを呼び出すってのはセキュリティ上無理があるね
JavaScriptは外部サイトのでも呼び出せるし
サーバ側で特別な環境が必要のないクライアントサイドの言語なので
PHPが使えるほうでPHPが使えない外部サイト用に
PHPで出力する内容と対応したJavaScriptを生成してそれを外部から呼び出すとか
他にもトリッキーなやりかたがいくつか思い浮かぶけど
JavaScriptでどうこうするのが現実的でないかと
0846nobodyさん
2008/07/14(月) 05:58:45ID:???スレ違いな気がするが……
0847841
2008/07/14(月) 05:59:38ID:kV2rLyyb<script language="JavaScript">
<!--
document.write ("\<script type='text/javascript' src='data.php?key=dada1', uri, '' charset='UTF-8'\>','\</script\>');
// -->
</script>
こんな感じで呼び出せるでしょうか?
具体的にどんな感じのphpを書いたらいいか教えていただけないでしょうか?
<?php
echo 'document.write("Hello");'
?>
なぜかうまくいかない・・
0848nobodyさん
2008/07/14(月) 06:45:20ID:???0849ひろき
2008/07/14(月) 06:50:07ID:iw+5oFKvの質問誰か答えてください(〇>_<)
よろしくお願いします
0850nobodyさん
2008/07/14(月) 08:26:50ID:???document.write ("\<script type='text/javascript' src='data.php?key=dada1', uri, '' charset='UTF-8'\>','\</script\>');
これってする必要ないんじゃ?
<script type="text/javascript" src="data.php?key=data"></script>
と直接呼出せば良いような
0851nobodyさん
2008/07/14(月) 11:16:52ID:tNLuR7u30854nobodyさん
2008/07/14(月) 11:55:31ID:???0855nobodyさん
2008/07/14(月) 14:30:36ID:???includeはhttp://〜略〜count.phpと入力するとエラーになってしまいます。
それならばと../www.hoge.com/count.phpとするとドメインより上にはいけないみたいで。
サーバーはxreaを利用しています。
FTPでの見た目上ではすぐ隣のフォルダにあるからアクセスできそうな気はするんですけどね…。
www.hoge.com ディレクトリ
├index.php
└count.php
sub.hoge.com ディレクトリ
└index.php (www.hoge.comにあるcount.phpをincludeしたい。)
0857855
2008/07/14(月) 14:47:01ID:???サーバーによると思うけど、そのhtmlをSSIで動作させれるなら簡単だよ。
<!--#include virtual="外部.php"-->
これでPHPの動作をさせた後にhtmlにそのデータを書き込んでくれる。
俺はこれで昔のshtmlのままカウンターやらアクセス解析やら色々延命させてる。
0859nobodyさん
2008/07/14(月) 14:54:13ID:???カウンタ処理簡単なんだから
サブドメインのほうはcount.phpは使わないで
count.phpが使用しているカウント用のファイルなりdbなりに
アクセスがあったら+1する処理をして
そのファイルなりdbなりを読みこんでカウンター表示するとか
ロックを忘れずに
public_html
|-count.php
|-www.hoge.com
|-index.php
|-sub.hoge.com
|-index.php
こういう構造でもだめ?
再現できる環境がないので全部憶測だけど
0860nobodyさん
2008/07/14(月) 14:55:32ID:???0861nobodyさん
2008/07/14(月) 15:22:39ID:???AJAX経由でのPOSTの値を受け取れなくて困っています。
全てUTF8保存で他言語ではAjax経験済みです。主要部分のみざっと書きます。
index.php
--------------------------
<button onClick="post();">post</button>
ajax.js
--------------------------
xmlhttp.open('POST','./ajax.php',true);
xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send('type=test');
ajax.php
--------------------------
<?
if(isset($_POST['type'])){
echo 'ok';
}else{
echo 'null';
}
?>
といった感じです。'null'はちゃんと返ってきます。
どなたかアドバイスお願いします。
0862ひろき
2008/07/14(月) 15:44:15ID:iw+5oFKv本当にこの質問答えてください(〇>_<)
よろしくお願いします。
0863nobodyさん
2008/07/14(月) 15:58:00ID:???もっと他人が読みやすいソースを書け
0864nobodyさん
2008/07/14(月) 16:46:45ID:/EKuYqCm読み込まれる方
neko.php
<?php
print "ねこ";
}
inu.php
<?php
print "いぬ";
}
読み込む方
index.php ねこと出したい
<?php
include 'neko.php';
}
index2.php いぬと出したい
<?php
include 'inu.php';
}
続きます。
0865nobodyさん
2008/07/14(月) 16:47:45ID:???読み込まれる方
hoge.php
<?php
if($hoge == "1"){
print "ねこ";
}
if($hoge == "2"){
print "いぬ";
}
?>
読み込む方 ねこと出したい
index.php
<?php
$hoge = "1";
include 'hoge.php';
?>
index2.php いぬと出したい
<?php
$hoge = "2";
include 'hoge.php';
?>
この場合hoge.phpが読み込んだ時すでに処理されてしまっていて、うまくいきません。
phpのinclude関連のページを読んでいったのですが、まったくこういう考え方が出てきません。
基本的に間違っていると思うのですが、何の関数を使ったら外部のファイルをphpの部品のように読み込めるんでしょうか?
まったく手がかりが無くって検索ができません。
ヒントだけでも教えていただけないでしょうか。
0866nobodyさん
2008/07/14(月) 16:53:44ID:???hoge.phpの中身をfunctionにしたら?
hoge.php
<?php
function response_msg($hoge){
if($hoge == "1"){
return "ねこ";
}
if($hoge == "2"){
return "いぬ";
}
?>
index.php
<?php
$hoge = "1";
include 'hoge.php';
echo response_msg($hoge);
?>
index2.php
<?php
$hoge = "2";
include 'hoge.php';
echo response_msg($hoge);
?>
0867nobodyさん
2008/07/14(月) 16:54:48ID:???別サーバのをHTTPを通して呼んでね?
0868nobodyさん
2008/07/14(月) 16:59:16ID:???ただ読み込むファイルの階層がバラバラなので絶対パスで読んでます。
0870nobodyさん
2008/07/14(月) 17:00:49ID:???ねこ
inu.txt
いぬ
いぬと出したい
<?php
readfile 'inu.txt';
?>
ねこと出したい
<?php
readfile 'neko.txt';
?>
そもそもの話になるんだが、>>865の考え方は
「楽に」はなってないんじゃないか?
0871nobodyさん
2008/07/14(月) 17:00:50ID:???http://example.com/aaa/hoge.phpって?
0873864
2008/07/14(月) 17:08:33ID:???それだと最初のファイル分割状態と変わらないので、すいません。
ねこ とか いぬ とか書きましたが、メニューなので本当はリストタグ<li>とかが書いてあります。
一つのファイルだと一気に変更できるので楽になるのです。
今の状態だと、一つ一つファイルを開いて、修正を全部のファイルでしないといけませんので。
0874nobodyさん
2008/07/14(月) 17:12:49ID:???URLの絶対パスかよ・・・
サーバのファイルシステムの絶対パスを使え
たとえば
/home/www/aaa/hoge.php
0876nobodyさん
2008/07/14(月) 17:19:36ID:???コードをincludeしたいならサーバ内のパスでやらないと無理。
http〜は普通絶対パスとは言わない。単なるURL(URI)。
includeするとスクリプトのコードではなく実行結果が返されるよ。
0877864
2008/07/14(月) 17:34:47ID:???うまくいきました。本当にありがとうございます。
>includeするとスクリプトのコードではなく実行結果が返されるよ。
そうなんです。ためしにhoge.phpの<?php ?>はずしてみたら結果だったので、phpの状態で読み込まれていないなぁと思っていたのです。
とても基本的なことだったので、どこのサイトにも書いてなかったのですね。
>>866
せっかく書いてくださったのに、申し訳有りません。
試す前に解決してしまいました。
今回はありがとうございました。
0878nobodyさん
2008/07/14(月) 17:38:37ID:???http://jp2.php.net/include/
ファイルが読み込まれるときには、読み込まれるファイルの先頭で PHPモードを抜けてHTMLモードになり、
最後に再びPHPモードに戻ります。 このため、読み込むファイル中のPHPコードとして実行する必要があるコードは、
有効なPHPの開始タグおよび終了タグで括る必要があります。
"URL fopenラッパー"が 有効になっている場合(デフォルト設定では有効です)、ローカルなパス名 の代わりに
URL(HTTP経由)を用いて読み込むファイルを指定することが可能です。 URLで指定されたサーバがファイルを
PHPコードとして解釈することが 出来る場合には、HTTP GETを使用してURLリクエストに引数を指定することが
出来ます。これはファイルの読み込み云々やスコープの継承とは関係なく、 ただ単純にスクリプトがリモートの
サーバで実行されて結果がローカルの スクリプトに読み込まれる、というだけのことです。
0879864
2008/07/14(月) 17:45:54ID:???そのページ見ていました。
最初読んだ時、何のことやらさっぱり意味が分からなかったんですよね。
今だと、なんとなく分かります。
その記述の少し上の「基本的なinclude()の例」で例題として、うまく行っている例が出てるんですね。
だから「考え方は間違ってない。何かやり方が間違っているんだろう。」と漠然と思っていました。
0880nobodyさん
2008/07/14(月) 17:47:53ID:???0881nobodyさん
2008/07/14(月) 17:58:50ID:???>URLで指定されたサーバがファイルをPHPコードとして解釈することが 出来る場合には、
>HTTP GETを使用してURLリクエストに引数を指定することが 出来ます。
.phpをPHPとしてパースするサーバならば「GETで変数を渡せる」というだけ。
そのスクリプトのコードを読み込めるわけではない。
逆に言うとそれができるなら、その自分が公開しているアプリや、yahooやgoogleなんかのコードも
外部に丸見えになるってことだぞ。
0882nobodyさん
2008/07/14(月) 20:37:04ID:cWY3QFlwImageMagickを使ってGIF画像をトリミングしようとしています。(画像の上下から一定の高さ分ずつ削った画像を作ろうとしています)
最初Imagickエクステンション(というのでしょうか)を使って
----------------------------------------------------------
$im = new Imagick(画像ファイル);
$im->chopImage(0,削りたい高さ,0,0);
$im->chopImage(0,削りたい高さ,0,残したい高さ);
$im -> setImageExtent($im->getImageWidth(),残したい高さ);//※1
---------------------------------------------------------
のような感じで行って、上手く行きました。
まず、画像の上下を削り、トリミングをしたときに残る、画像の余白を、※1の処理で、削除する作業を行っています。
さて。ロリポップ上で、上記の処理を行う必要があるため、
コマンドで処理を行う必要があり、上記のプログラムを書き直す必要が出てきました。
そこで、下記のような感じで行ってみたのですが、
-----------------------------------------------------------
convert -gravity center -crop 横x縦+0+0 元画像ファイル 出力画像ファイル
-----------------------------------------------------------
Imagickエクステンションの時に行っていたのと同様に、
画像に余白が出来ます。
しかし、その余白を消す方法が見つかりません。
-geometry (縮小されてしまう)
-trim (変化無し)
-resize (縮小されてしまう)
など、いろいろ試してみたのですが、
使い方が悪いのかもしれませんが、上手く行きません。
よい方法はありませんでしょうか。よろしくお願いします。
0883nobodyさん
2008/07/14(月) 20:39:15ID:???0885882
2008/07/14(月) 20:50:15ID:cWY3QFlw早速教えていただきありがとうございます。
ぐだぐだで失礼しました。
環境ですが
サーバーは、前述のとおりロリポップを予定していますが、
現在はまだ自前のWinXpSP2+xampp(16.6a)で動作させております。
PHPは5.2.5
ImageMagickは6.4.1-Q16
となっております。
0886nobodyさん
2008/07/14(月) 22:10:07ID:???0887nobodyさん
2008/07/14(月) 22:15:08ID:???0888nobodyさん
2008/07/14(月) 22:20:10ID:???0889nobodyさん
2008/07/14(月) 22:57:34ID:???http://ja.wikipedia.org/wiki/ImageMagick
0890nobodyさん
2008/07/14(月) 23:07:40ID:BjvrU7ewPHP5を使っています。
PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません
<INPUT maxLength=20 name=id value="">
このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」
を取得したいのです。
全文に対して繰り返し取得したいのでpreg_match_allを使っています。
preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs )
このように書いたのですがヒットしてくれません。
ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。
■ このスレッドは過去ログ倉庫に格納されています