【PHP】下らねぇ質問はここに書き込みやがれ 10
レス数が1000を超えています。これ以上書き込みはできません。
PHPに関する質問スレです
前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 9
http://mevius.5ch.net/test/read.cgi/tech/1513760420/
次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 下痢が出そうで出ないのですがどうすればよいでしょうか?
お腹が下らないんです class FriendList implements IteratorAggregate{
private $list=[];
public function getIterator():Traversable ↑誤爆すみません。↓よろしくお願いします。
---Friendlist.php---
<?php
class FriendList implements IteratorAggregate{
private $list=[];
public function getIterator():Traversable{
return new ArrayIterator($this->list);
}
public function add($p){
$this->list[]=$p;
}
これを他のクラスでインスタンス化して、foreachで反復処理する場合、
$friendl=new Friendlist();
foreach($friendl as $value){
}
どの部分でFriendlist.phpのgetIterator()が読み込まれるのでしょうか?
foreact部ですか? >>6
foreachでインスタンスを使うと、getIteratorが呼び出され、ArrayIteratorのコンストラクタにlist配列が引き渡され、ArrayIteratorインスタンスとしてiteratorが戻されます。 アクセスカウンターを自分のサイトに
付けたんだけど、シンプルにこれにしようかと思うんのだが、
やっぱ、30分〜1時間の同じipは弾くとかの改造すべきなのだろうか?
なんか漠然と意識高い系のアクセスカウンターにしたい気もする
アドバイスお願いします。
https://www.php-factory.net/counter/01.php >>8
そんなの自分次第なんだし好きにすれば?
コード読んでみたけど
同じIPが連続した時のみカウントしないようにはなってるが
あんま意味ないなこれw
クッキー食わせて指定時間以内ならカウントしないとかなら
ちょっとした改造でできるんだしやってみれば? Symfony2に関しての質問です。
EC-CUBEのプラグインを開発しているのですが、
例えば、管理画面の会員登録にradioを置きたいのですが、
どうやってフックすればいいのか、よく理解できていません。
というか、Hello Worldに到達できていません。
何かいい解説サイトとかないでしょうか? unsetについて教えてください
<?php
$x=10;
function fc(){
global $x;
unset($x);
return ++$x;
}
print $x;// 結果10
print fc();//結果 1
となるのですが、関数内で$xをグローバルにしても、
unset($x)すると、ローカルな$xを作ってしまう、ということなのでしょうか? unsetしたら無くなる
returnの行で
$x=0;$x=$x+1;
をしてる
return ++$y;
ならどうなんだろうね >>12
最後にもう一度 print $x; をやってごらんよ >>12
http://php.net/manual/ja/function.unset.php
unset($x)の時の$xはローカル変数の$xになってます。
関数内でグローバル変数としての$xを破棄したいのなら
unset($GLOBALS[]);を使います。
そもそもグローバル変数とローカル変数のスコープが異なるのは、
関数内の変数の取り扱いで、グローバル変数に影響させない為
関数の外でunsetせず、関数内で安易にグローバル変数をunsetさせず、
特別な取り扱いをさせている、ということなのですね >> 12
これ、notice 発生するでしょ。
学習時は、そういうの気にしたほうが良いですよ。
グローバルに使うケースなんてあまりないから、マニュアル見る良いきっかけにはなったけどw >>13
>>14
>>15
>>16
皆様ありがとうございました。
最後にprint $xをすると、結果10になります。
関数内の$xと外の$xは別の値を参照してるのですね。
noticの部分も見逃さずに調べる癖を付けようと思います。
どうもありがとうございました。 >>17
>>16も書いている通り
return ++$x; の行で
Notice: Undefined variable
というエラーが発生するので、そもそもコードとしておかしい
php.iniの設定で
error_reporting = E_ALL
display_errors = On
を指定してエラーを全部見る癖をつけよう
どうしてもphp.iniの設定を変えられないならスクリプトの先頭で
error_reporting(E_ALL);
ini_set('display_errors', 1);
を宣言
これやらずに勉強しても意味ないと思え
それぐらい重要 >>18
何冊かテキスト買って読んでいるのですが
初めて教えてもらえました。
今後、是非、そのコードを入れて
エラーに慣れていこうと思います。
ありがとうございました。 >>19
学習・開発環境では
error_reporting = E_ALL
display_errors = On
log_errors = On
error_log = /path/to/error
で、本番(ネット上に公開する)環境では
log_errors = Off
として、エラーは出力せずログに記録するのみとする
(エラーを出力する事はセキュリティ的な穴になり得るから)
/path/to/error ってのはエラーを記録したいファイルへのパスってことね
書き込み権限与える事を忘れないよう
これやるとやらないとでは上達速度に相当差がつく
※本番環境では error_reporting のレベルを下げると書いてるものがたまにあるが
※大間違いなので真似しないよう 小数点8桁を含むjsonをjson_decodeすると6桁に丸められて出力されるわこれ
どうしたらいいんだ。。 laravelに関する質問って、どこですればいいですか? webprogのphpスレは初心者お断りみたいだから
このスレで質問したほうがいいけど
初心者お断りスレじゃなければwebprogの該当スレでいいんじゃね
age エディタの配色テーマによっては、下記のようなスラッシュで囲んだ文字列がエラーっぽい色で表示されるんですが
書き方が間違っているんでしょうか?
$var = '/string/'; preg_matchとかの正規表現だと判断されてるとかかな? >>32
正規表現も値によっては色が変わったので、それかもしれません。
ありがとうございました >>30
ありがとうございます。
@slot と @includeの違いについてなのですが、
@slotは、@endslopまでの範囲の記載内容をテンプレの変数に割り当て
@includeでは、連想配列をつかって、テンプレ側でキーに対応する値を表示させる、ということのようですが、
結果的に同じような役割のように思えます。
決定的な違いって何なのでしょうか? 機能的な違いはない
htmlタグを含む場合はslotのほうが見やすい(書きやすい)
と誰かが言ってた larabelを使ってます。
その機能でオートローダーのスタティックを利用してます。
useしてnewするのは不要にってます
一方、larabelにはdi機能というのもあるようです。
どちらもnew不要ですがどちらの使い分けとかパターンわけなど何か使い分けるヒントをお願いします class作るとき必ずinterfaceって作るものなの? おめでとうございます。今年もよろしくお願いします。
laravelの質問なのですが、ご教授くださいましたら幸いです。
class HelloController extends Controller{
public function index(Request $request,Response $response){
$html =<<<EOF
<html>
<body>
<h1>request</h1>
<p>{$request}</p>
<h1>response</h1>
<p>{$response}</p>
</body>
</html>
EOF;
$response->setContent($html);
return $response;
}
}
この最終行から3行目の,return $responseを、return $htmlとしても、ブラウザに表示される内容は同じです。
return $htmlで表示させないで、responseのcontentにhtmlコードを追加してreturnしている理由は、何かあるのでしょうか? >>40
ララベルの仕様をみてsetContentはなんと書いてあるの? >>41
ありがとうございます。
setContentは、Responseでクライアントに戻すHTMLソースが格納されてます。
HTMLソースを返すのなら、return $htmlを返しても同じなのかな、と思いまして質問しました。 掲示板作ってるんだけど、更新すると連投しちゃうのを防ぎたいんだけどどうすればいい?
POSTの中身を消して分岐させるとかイメージでいいの? >>43
登録後にブラウザの更新ボタンが押されると送信済みのPOSTデータが再送信され結果2重登録してしまうって事だよね?
なら↓のやり方でどうか
画面アクセス毎にセッションにランダム文字列を保存&出力htmlに<INPUT type="hidden">で保存した文字列を埋め込む
登録処理時、セッションに文字列が無い場合やPOSTされた文字列とセッションに保存された文字列が一致しない場合はNGとする 戻って更新なら連投の可能性もわかるけど
ただの更新でなんでそんな状況になるのか 投稿内容をどこに保存しているかによるけれど
Requestに保存されてるんだからって言えばいい? indexから同じindexにpostしてindexで更新してるってことかな?
普通はpost用のコントローラに渡して実行後にindexにリダイレクトするから
戻るおさん限りは更新しても問題にはならんと思うのだけど
チャットほどじゃないにせよリロードが出来ない掲示板なんて…
まあ手動じゃなくて更新データはスクリプトで非同期でとってくりゃいいけど
サーバでどうにかなればプッシュすれば利便性もUP ディベロッパーツールで確認してごらんよ
POSTつかってリロードするとブラウザ内でPOST情報がどうなっているか >>43
同じ掲示板にジャンプして書き込まれたPOSTの中身を確認してテキストに保存してって感じで作ってる
でもtime変数使ってページ読み込んだ時とボタン押されたときの変数で一致したら書き込むって感じでやってみるわ POST後はLocationでリダイレクトしちゃうな >>50
それよりは「戻る」にも対応できる >>49 の方法の方が利点があるんじゃね Rails など、普通のフレームワークの作り方では、
Post したら別の画面、一覧画面などに移動する
ルーティング(routes.rb)に、CRUD が定義されている。
追加(C)・更新(U)されたら、一覧(R)に戻る
一覧に戻ると、追加・更新されたのを見れる 戻るに対応するなら
セッションでトランザクション処理のようなことをやればいいだけだけど
更新するだけで連投されるなんていうミラクル仕様に突っ込んでるだけで
それとこれは話が別よ >>49
俺が作った掲示板は、if($投稿された文章==='保存したテキスト')die('二重投稿です')ってやってる
要するに重複チェック 他人のファイルに書き込みたいのですが、うまくいきません。
<?php
$file = 'https://mevius.5ch.net/test/read.cgi/tech/1543392526/l50';
file_put_contents($file, 'shine');
?>
なぜでしょうか? phpの質問をお願いします
class HelloRequest extends FormRequest すみません、誤射でした><
class HelloRequest extends FormRequest{
public function authorize(){
if($this->path() =='hello'){
return true;
}}}
if文にあるthis->path()は、validationメソッドですが
スーパークラスのFormRequestはControllerを継承してるのでしょうか?
また、laravelのクラスの継承図のようなものってどこかにありますか? >>55
file_put_contentsは使わないけどそれ以前にPOSTする為のパラメーターが足りてない
どういうことか理解できるならstream_context_createのページ見てみればいい
それ踏まえて方法はいくつかあるがcURLが一般的なので「PHP cURL POST」でググればいいよ cakephp 2
find x3回
を
(unbind, find) x3回
にしたら8倍速くなった
やってること合ってる? 超くだらない質問なんですが
PHPにパスワードを保存しようと思うのですが
PHPのソースコードが読まれないか心配です
いちおうブラウザからはソースを選択しても表示されないのですが
もしかしたら何らかの方法で読まれる可能性もありそうで
心配で寝れません
教えて下さい
お願いします パスワードをスクリプトから分離して
phpからは参照出来るが外から直接参照できないとこ(ドキュメントルートの上とかDBとか)に置く
ファイルに保存するならファイル名は.htを先頭につけるといい
パスワードはハッシュ化しておく
これらが有効なのは放置してサーバの仕様変更に気づかなかったり(php廃止とか)
設定ミスってphpをtxtとして配信してしまうようなケースのみ
そのへんに問題なくてphpのソースコードが見られてしまうような場合は
もう何もかもがだめなことが多いので心配するだけ無駄だわ >>59
わざわざありがとう
今日は時間が取れそうなのでちょっとしらべてみます
みなさんはどんなフレームワーク使ってますか? Laravel使いたいのに絶対にcakePHP!!と言われて仕方なくそっちでやってる すみません、助けてください
Vagrantが警告出てインストール出来ない環境って
何が問題なんでしょうか?
インストールが強制終了されます
バージョンは最新です
何が邪魔してるのでしょうか?
https://i.imgur.com/3jCEdpw.png 知らん
てか普通は作ったサポートに聞くだろ
なんで関係ない他人に聞くんだよ? >>65
ありがとうございます!
cakePHPもフレームワークで優れていると
買った教材に書いてありました
今後とも、色々ご指導お願いします! 今でも使えるリファレンス本って何があるのでしょうか?
出版されてるものって古いですけど使えます? phpはほぼ変わってないからよほど古くない限りどれでもいいからさっさとやれ laravel マイグレーション、シーディング処理について教えてください
現象:マイグレーションは作成できた。シーディングの実行で、columnが無い、というエラーが出る
----- migration --------
class CreatePeopleTable extends Migration{
pubulic function up(){
Schema::create('people',function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->timestamps(); laravelついて教えてください。現象:マイグレーションでテーブルは作成できた。シーディングの実行で、columnが無い、というエラーが出る
//----- migration --------
class CreatePeopleTable extends Migration{
pubulic function up(){
Schema::create('people',function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->integer('age');
$table->timestamps();
});}
//----- Seeder -----
publid function run(){
$param=['name'=>'suzu','age'=>20,]:
DB::table('people')->insert($param);
$param=['name'=>'mizu','age'=>24];
DB::table('peope')->insert($param);}
//----- Seeding実行 -----
php artisan db:seed
//----- エラー -----
General error:table people has no column named name(SQL:insert into "people"("name","age") value(suzu,20))
catch(Exception $e){//・・・
$query,$this->prepareBindings($bindings),$e
マイグレーションで作成したテーブルにデータが登録できないのはなぜなのでしょうか?よろしくお願いします。 すみません、なんだか分かりませんでしたが自己解決しました。
お騒がせしました。 練習兼ねて小規模&少機能で簡単なネットショップを作ろうとしてるのですが、設計段階でファイルがごちゃごちゃになってしまいそうです
フォルダの作り方やファイルの分け方はどんな感じでやればスッキリ分かりやすくなりますかね? フレームワーク自体のメンテが厄介だから入れずに済むのであれば入れない方がいいよ rep2という2chビューアのうち、DB連携部分のみうまく動かずデバッグしています。
■環境
php7.2で、phpinfo()には mysqli,mysqlnd,pdo_mysql
いずれもバージョン情報が表示されてて、必要な環境は準備できていると思っています。
■現象
$db = \DB::connect($dsn);
を実行すると、"DB Error: no database selected"というエラーになります。実際やりたいこと(imagecache2の利用)もできません。
■調べたこと
$this->comment('dsn=' . var_export($dsn, true));
の結果、以下の通り$dsnは正しいように見えます。
dsn='mysqli://rep2:password@localhost:3306/rep2'
しかし、以下のようにすると…
$db = \DB::connect($dsn);
$this->comment('db=' . var_export($db, true));
配列にusernameやpasswordが代入されていないようです。
'dsn' =>
array (
'phptype' => 'mysqli',
'dbsyntax' => 'mysqli',
'username' => false,
'password' => false,
'protocol' => false,
'hostspec' => false,
'port' => false,
'socket' => false,
'database' => false,
ではなぜ代入されないのか、がわからず。教えていただけないでしょうか。 よく知らないけど、
connect は、データソースへつなぐだけじゃないの?
SQL のselect みたいなものは無いの?
CRUD も検索して $url = 'http://example.com/'+'/path/';
だと、途中に余分なスラッシュが入りますよね。
それを綺麗に整形してくれる関数や手法などはありますか? 標準関数にズバリのものはないと思うけど探せば誰かコード書いてるはず
簡単なのでよければsubstr使うとか
parse_urlしたのを組み直すかそのあたりで
./../とかも考慮するならちょっと面倒になってくるが >>80
自分でパスを連結する関数を書いちゃうとかどうだろう?
その中では rtrim($path1, '/') . '/' . ltrim($path2, '/') を繰り返す感じ? / の2個以上の連続を一つに置換する操作する処理を見かけたことあるなぁ。。。
あんまりきれいじゃない気がするけどw ちょっと乱暴かも知れませんが、スラッシュが二重になっても
パスとしてはエラーにはならないと思います(見た目汚いですが) echo 'aaa';
echo('aaa');
include_once 'path/file.php';
include_once( 'path/file.php');
のようにカッコが有っても無くても良い関数がありますが、
php上級者の人はどっちを使うのでしょうか?
理由も教えてけろ 関数・・・・・カッコを付ける
言語構造・・・カッコを付けない
echo も include も言語構造。
迷ったらマニュアルの例文をコピペ。 phpの関数の戻り値って望む型の他にfalseも返ることがあるよね
そんで7からは戻り値の型宣言いれて戻り値の型が違ったらTypeError出す
もうごちゃごちゃだね Ruby では、これだけで正常につながる
File.join 'http://example.com/', '/path/' laravelに関して質問させてください。
Eloqentのモデルに関してです。
<?php
namespace ---
use ---\Model
class Person extends Model{
public function scopeAgeGreaterThan($query,$n){
return $query->where('age',$n);
}
コード中の$queryは、$thisとしても同じ結果が得られます。
$thisではなく、引数$queryを利用する意味は、何かあるのでしょうか?
もしあるのなら、その意味、意義を教えていただけないでしょうか?
よろしくお願いします。 $thisは自分自身のインスタンスからテーブル情報を取得
$queryはクエリビルダーを使ってテーブル情報を取得 ttps://stackoverflow.com/questions/4366730/how-do-i-check-if-a-string-contains-a-specific-word
の5831の回答で、
if (\strpos($a, 'are') !== false) {
の部分ですが、if( の次のスラッシュは何ですか? そのサイトの下の方では、\ は付いていないから、気にしなくてよいのでは?
<?php
$haystack = 'how are you';
$needle = 'are';
if (strpos($haystack,$needle) !== false) {
echo "$haystack contains $needle";
}
?> >>93
了解です、気にしません。
ところで、わざわざ !==falseで判定する理由は何ですか? Ruby には、偽がnil, false の2つしかないけど、
JavaScript, Python, PHP には、偽が10個ぐらいある
0, 0文字列、空配列とか、様々な可能性が排除できない。
少しでも表現を変えると、バグる
例えば、それをtrue に変えると、様々な偽の条件が存在してしまう。
0 の時とか、空配列とか
他の言語は、Rubyに比べて、バグる確率が高い >>94
strposは0を返しうるから if (!strpos(...)) だと false が返ってきた(見つからなかった)のか 0 が返ってきた(先頭に見つかった)のか判別出来ない
http://php.net/manual/ja/function.strpos.php
の返り値の警告の部分 Ruby 以外の言語では、
!= など、普通の比較演算子では、偽が10個ぐらいあるから危険!
!== などの厳密比較演算子を使うべし! >>92-93
名前空間指定してるだけ
phpの標準関数や内部クラスはすべて\の名前空間に属している
普通はわざわざ書かない >>92のサイト見てなかったけどおそらく別の名前空間内で使うこと想定して
回答したんだろうね
でも例えばこんなコードでも書かない限りは不要
namespace my;
function strpos(string $haystack, string $needle, int $offset = 0)
{
$retval = \strpos($haystack, $needle, $offset);
if ($retval === false) {
return false;
} else {
return $retval + 1;
}
}
var_dump(\strpos('abcde', 'c'));
var_dump(strpos('abcde', 'c')); >>99
$retval = \strpos($haystack, $needle, $offset);
これだと、どこかよその名前空間で定義されているstrposと言う意味ですか?
$retval = \MY_NameSpace\strpos($haystack, $needle, $offset);
と書くと、特定の名前空間を絶対パスで指定出来るという理解で良いですか? >>101
>どこかよその名前空間で定義されているstrposと言う意味ですか?
どこかっていうか標準関数のstrposことなんだけど
これはnamespace myで定義しなおした標準関数strposのラッパー関数
もしここで
>$retval = \strpos($haystack, $needle, $offset);
に\をつけないと自身のstrposをさしてしまうので
この関数自体は標準関数のラッパーに過ぎず実装を持たないので正しく動かない
へたしたら再帰処理でループに陥るのと同じ感じになってしまう もう1つの質問に答えてなかった
>$retval = \MY_NameSpace\strpos($haystack, $needle, $offset);
>と書くと、特定の名前空間を絶対パスで指定出来るという理解で良いですか?
まあそんな理解で大丈夫かと >>103
ありがとうございます。
もう一つ教えて下さい。
自分で作ったライブラリ関数群は、自分用の名前空間を定義して
例えば、こんな感じで
namespace MyLib{
function myfunc1(){
・・・
};
function myfunc2(){
・・・
};
}
のように、名前空間に入れておくべきですか?
それとも名前空間無しにしておくほうが使い易いですか? ユーザー定義関数の引数を変数にした時、渡された変数名も同じでいいんですよね?下の様に
でもいろんな説明みると変更してることが多いけどなんで?
function func($hoge){
・・・
}
func($hoge); >>104
名前空間を指定しないということは
標準関数や内部クラスと同じグローバルの名前空間(\)に属することになるので
もちろんコーディングする上での利便性はいい
名前空間がPHP5.3から導入されたように昔はなかったわけだし「やりよう」によっては問題にならない
例えば被ってしまってエラー出たら関数名を変えるとか
被る可能性がかぎりなくないような風変わりな関数名をつけるとか
先人がその「やりよう」が面倒だったから導入したんだけど
実際にはよほど巨大なプロジェクトでもない限り問題は起きないと思う
あとは名前空間の概要見て決めたらいいんじゃないかな
http://php.net/manual/ja/language.namespaces.rationale.php
他人に使ってもらうことを考慮するならつけるべきだけどね >>107
解説ありがとうございました。
ところで関数にprivateやpublicを付けられるのはclassの中だけですか?
namespaceの中でprivateな関数を定義することは出来ませんか?
つまり、そのnamespaceの中だけで作業する為の関数で、
外部に公開したくない関数です。 質問させてください。
配列で「りんご・バナナ・みかん・りんご・みかん・りんご」とあった場合、
これを「りんご1・バナナ1・みかん1・りんご2・みかん2・りんご3」
みたいに同じものが何個目かを書き加えたいのです。
どうやるといいしょうか? $data=array('りんご','バナナ','みかん','りんご','みかん','りんご');
$result=$count=array();
foreach( $data as $key => $value ){
if( isset($count[$value]) ){
++$count[$value];
}else{
$count[$value]=1;
}
$result[$key]=$value.$count[$value];
}
var_dump($result); print_r(array_count_values($data));
でよくないすか? array_multisort()の配列が多次元だった場合はどこを比較してるの?
$ar[] = array(1);
$ar[] = array(1);
$ar[] = array(2);
$ar[] = array(2);
$ar2 = array(1,2,3,4);
array_multisort($ar, SORT_DESC, $ar2);
Array
(
[0] => 3
[1] => 4
[2] => 1
[3] => 2
)
----
$ar[] = array(1, 1);
$ar[] = array(1, 2);
$ar[] = array(2, 3);
$ar[] = array(2, 4);
$ar2 = array(1,2,3,4);
array_multisort($ar, SORT_DESC, $ar2);
Array
(
[0] => 4
[1] => 3
[2] => 2
[3] => 1
) >>110
返信が遅くなってしまいすみません。
うまくできました。
本当にありがとうございます。 phpでスクレイピングした文字列をmysqlのデータベースにInsertしたいのですが、ざっくりどういう風にやればよいでしょうか?
スクレイピング自体は出来ていて、ここからDBに挿入する方法が知りたいです。
よろしくおねがいします。 ざっくりいうとINSERTのSQL文を書けばいいんだよ サーバー側に数万枚の画像を保存する場合、数万枚を1つのフォルダに入れるのと、10000台、20000台のようにフォルダ分けしたほうがいいですか? 1ページに20件〜50件くらいサムネ表示したり、1ページに数枚表示したり
ネットショップのようなイメージ フォルダ分けするとアクセス時間が短くなる場合が多い laravel関連の質問をお願いします。4日間前進できてません(汗
laravelのデフォルトのモデルUserと、テーブルusersを使い、ログイン(sign in)認証を行いたいのです。
----- form -------
<form action="***" method="post">
<input type="email" name="email>
<input type="password" name="password">
</form>
---- controller -------
public function post***(Requeat $request){
if(Auth::attempt(['email'=>$request->emai,'password'=>$request->password])
{
XXXXX;
}
ここで、if文のtrueにならず、すべてfalseになります。
Auth::attemptが、usersテーブルを読み込んでないような気がするのですが、
どうしてtrueにならないのか、教えていただけないでしょうか><
どうか、よろしくお願いします。 $request->emaiにlが足りて無いとか? すみません。$request->emailです。
タイプミスはなくても、falseになります。
よろしくお願いします。 他人のホームページを書き換えたいんでつけど
PHP使えば狩野でつか? その他人が許諾しているなら、その他人に聞け
その他人が許諾していないなら、警察が聞いてくれる 何を書き換えたいんだろう?
HTML CSS JAVASCRIPT、それともフレームワークに依存?
PHP,CAKE,いろいろあるから、一概になんとも・・・ >>130
PEAR server is down
「PEAR公式サイトのウェブサーバー上で改変された『tainted go-pear.phar』と
セキュリティ侵害が発見されました。PEARのウェブサイト自体は無害なクリー
ンサイトを再構築するまで使用不能とします。より詳細な情報はPEARの公式
ブログでチェックしてください」 Python勉強してるの
リストから”取り出す”っていう日本語ってなんか違和感ある
リストから取り出して要素を付け加えると元のリストにも反映されてる
これって取り出すっていう日本語だとイメージ変だよね
なんていうかリストのいち部分をズームアップしてそこだけ見えるようにしたようなイメージのほうがいいきがするの
だって取り出したんだったらいつ元に戻したの?っていうことになるよね?
イメージ的に
たぶん想像だけど元々のリストのメモリ上の位置は全く変わっていなくてずーっとそこにあるから取り出したっていう日本語が変なんだと思うの これはリスト=辞書a、辞書b
みたいになってて辞書aをとりだしてそこになにかを付け加えた場合に
元のリストに変更がそのまま反映されることを言ってます
取り出すっていう日本語の操作だといつ元に戻したのっておもうよね? laravelに関する質問お願いします
Auth;;attemptで参照されるテーブルが、どこで定義されているか分かりますか? laravelの質問です
コントローラーの関数にフォームリクエストを入れるとPOSTからGETになるんですけど何でですかね?
use App\Http\Requests\fivechRequest;
class fivechContoroller extends Controller
{
public function write_ready() {
return view('write_ready');
}
public function write(fivechRequest $reqest) {
return "helllo world!";
}
}
fivechRequest $reqest
これ入れた途端にGETになってしまう
Route::get('test/bbs.cgi', 'fivechContoroller@write_ready');
Route::post('test/bbs.cgi', 'fivechContoroller@write')
->middleware(fivechMiddleware::class); public function rules()
{
return [
//'bbs' => 'string|alpha|max:8|required',
//'key' => 'integer|digits:10',
//'subject' => 'string|max:64|required',
//'from' => 'string|max:32',
//'mail' => 'string|max:16',
//'message' => 'string|max:4096|required'
];
}
}
に変更したらPOSTになりました… なんででしょうか? cronで実行しているPHPで不具合が出て調べているのですが、
php.iniでエラーログを指定していない場合、
コマンドラインからPHPを実行した時のエラーログってどこに出るのでしょうか?
apacheで実行した場合はapacheのエラーログに出るようですが 質問させていただきます
データベースにセッション保存するようにsessionhandlerinterfaceを作りました
session_set_save_handlerで該当のハンドラを指定したらちゃんとデータベースにも書き込めているのですが
あるサイト上の複数ページで統一的にこのデータベース利用のセッションを使うには
各ページでsession_startの前に毎回ハンドラ指定をする必要があるのでしょうか?
(テストしてみると指定しないとデフォルトのファイル利用のセッションが作られているようでした)
php.iniか何かの編集でそもそもデフォルトをデータベース利用のセッションにするということなしに
上手いやり方があるのであればお教えいただければ幸いです
どうぞよろしくお願いいたします >>140
cronから実行したプロセスは端末と結びついていないから、リダイレクト指定しなければただ閉じてる。 >>141
ありがとうございます
デフォルトの設定だと標準エラー出力に出るんですね
log_errorsを使ってサーバ側のエラーログを出力先に指定することもできると >>143
なるほど
エラー出力をリダイレクトすればいいんですね
ありがとうございました laravelに関する質問を受け付けていただけますと幸いです><
今まで使っていたcontroller(app/http/controllers/)が、突然使えなくなりました。
<現象>
上記パスのcontrollerを変更しても反映されない。
上記パスのcontrollerを削除しても、古いcontrollerの設定が生きてて、プログラム自体は従来どおり動く
なにか、他のパスに古いcontrollerが保存されていて、そっちを読んでいるような感じがする
という感じなのですが、何か改善する方法を教えてくださるかた、いらっしゃいませんでしょうか? PHPをFastCGIやmod_phpで常駐させて動作させるとき、最初に一回だけ実行されるコードとリクエストの度に実行されるコードはどうやって区別しますか
CGIモードの時は毎回全てのコードをロードして実行することになると思うんですが、
FastCGIやmod_phpだと予めロード済みの状態のプロセスを待機させてプロセスの起動やコンパイルの実行を省いて高速化していると思っています
例えばpythonのWSGIだと起動時にアプリケーション関数の外側に書いたコードが実行され、その後はリクエストのたびにアプリケーション関数の内部だけ実行されます
--------------------
do_something()
def application(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain')])
return 'Hello, world'
--------------------
これと同じようなことはどのように実現しますか 親クラスのprotectedプロパティに値を代入する時、
子クラス側にもプロパティを定義するものですか?
コーディングの一般的な作法や、可読性的な話です。 >>148
そういうのはドキュメントに出力すればいいと思うけど
PHPDocが面倒なら個人開発程度なら簡易的なものとして
trait ClassInfo {
public static function getClass() {
return Reflection::export(new ReflectionClass(get_called_class()), true);
}
}
親クラスにこんなん入れて必要なときに参照すれば
少しはましになるんではないかと >>149
遅くなりましたがレスありがとうございます
わざわざ子クラスにまで書く必要はなさそうですね "SELECT name FROM table WHERE name = 'hoge'"
これはしっかり結果帰ってくるのに
事前に$hoge = 'hoge'してから
"SELECT name FROM table WHERE name = $hoge"
これだと空になるのなんで
"SELECT name FROM table WHERE name = '$hoge'"
"SELECT name FROM table WHERE name = ".$hoge
とか試したけどダメだったわ; >>151
"SELECT name FROM table WHERE name = '" . $hoge . "'"
これだと? >>153
編集したSQLをファイルか画面に出力してみて
意図した編集ができてないとしか思えないな PHP: nl2br - Manual
http://www.php.net/manual/ja/function.nl2br.php
string に含まれるすべての改行文字 (\r\n、 \n\r、\n および \r) の前に <br /> あるいは <br> を挿入して返します。
とありますが
\r\nはWindowsのCR+LFだとして、\n\rという改行コードは存在するのでしょうか?
よろしくお願いします 改行を\n\rで保存したり取り扱うエディタが存在するかもしれないし
\r\nと勘違いして\n\rとか渡しちゃうかもしれないし
そんな人にも<br><br>と2つにはせずに<br>1つにしてくれる親切設計ってだけでは めんどくさい
CR絶滅してLFだけで統一してくれればいい
ありがとうございました 昔はCRとLFで機能使い分けてたみたいだけど、当時からほぼCR+LFの使い方が主流だったよね?
CRだけ使うなんて、同一行書き換え以外に使い道が思い浮かばない laravelの質問なのですが、よろしかったらご教授くださいませ
DBに登録されている性別情報を取得して
view画面のラジオボタンの初期値として、該当する性別をチェック状態にしたいと考えてます。
コントローラー側で、
$profile=['u_sex'=>$xxx->u_sex,***];
$param=['user'=>$user,'profile'=>$profile];
view側のhtmlを
<input type="radio" name="u_sex" value=1 @php ($profile->u_sex) ? 'checked':''>
としたいのですが、
htmlの「@php ($profile->
の > で、<input を閉じてしまってうまく動かせません。
なにか良い方法はありませんか? >>162
laravel知らんけど↓でどう?
@if ($profile->u_sex) checked @endif >>163
言葉足らずだったね。スマン。
OSによっての解釈の話ではなくて、本来のCR、LFの意味での話。
CRはキャリッジリターン(行頭復帰)、LFはラインフィード(行送り)。
元々タイプライター(テレタイプ)から来てると思うけど、PCにおいてそれぞれ片方だけ
使う事あったのかな?って話。
結局使わないからOSによって都合のいい解釈になったんだろうけど。
まあどうでもいいや。スレチスマン。 ダウンロードしたソースをapacheで動かしたところ
PHP Strict Standards: Declaration of defaultAuth::useredit() should be compatible with authBase::useredit($user)
このようなエラーが出て該当する部分を見ると
function useredit(&$user,$pwd = false) {
if ($pwd) {
$user['password']=crypt($user['password']);
}
$this->db->update('users',$user,array('id' => $user['id']),$this->userfields);
}
1行目の function useredit(&$user,$pwd = false)
に「&」があるのですが、それを取り除くとエラーが出なくなりますが、
関数の引数の前に & はつけることがあるのでしょうか? >>167-168
ありがとうございます、参照渡しというのがあるのですね。
php 5.4で、参照渡しが無くなったので、エラーが出ていることがわかりました。
&を取っても動いている感じなのですが、とりあえずそれで様子を見たいと思います。 >>169
エラーになるのは呼び出し側で&を使った場合
https://ideone.com/qo7ccI
親子でfunctionの定義が異なる場合にDeclaration of...って出る
https://ideone.com/9aCPU1
親子両方で&をつけるか&を取るか一致させればいいんだろうけど、多分&をつけるほうが正解なんじゃないかな? >>170
>多分&をつけるほうが正解なんじゃないかな?
クラスのことは勉強不足でわからないのですが、
class hoge
function useredit($user) {}
を
function useredit(&$user) {}
に変更するとエラーが出なくなりました、
確かに両方で無しか有りにするとエラーが出ないので、どちらが良いかわかりませんが、
これで様子を見たいと思います、ありがとうございました。 >>164
ありがとうございます
そのコードでも、−>の'>'が、<input タグの閉じる>と認識されてしまいます。
どうやってエスケープしていいか、方法が見つからないので、多重配列を避けて記述するようにします。 自分もbladeは知らないが
> htmlの「@php ($profile->
> の > で、<input を閉じてしまってうまく動かせません。
これはどうやって判断したの?
出力されるコードが
<input type="radio" name="u_sex" value=1 @php ($profile->
あるいはコードが変換されずにそのまんま
<input type="radio" name="u_sex" value=1 @php ($profile->u_sex) ? 'checked':''>
になってるの?
それともそこでエラーが出てて自分でそこが原因だと思ってるってこと? 予期せぬ > というエラーです
タグ内で@phpを使い、変数で判定することは避けて
タグの外で判定するようにしました。
色々ご指導ありがとうございました。 syntaxエラーかね
コード見る限りobjectにキャストしてない連想配列を
アロー演算子使って参照してるから
エラー起きてるのかと思ったけどそういうわけではなさそうか
よくよく見ると>>162はどこまでがPHPか判定できなさそうだな
普通のPHPだと下のようになるが
<input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''>>
最後にいれるべき>が1つかけてる感じ
調べてみたら@endphpがあるようだからそれ使えば良さそう?
説明見る限りプレーンなPHP実行でechoしない感じがするから
<input type="radio" name="u_sex" value=1 @php echo ($profile->u_sex) ? 'checked' : '' @endphp>
これで一応>>162の閉じてなさそう問題は解決するけど
明白にとじてる>>164が動かないとなると
@php-@endphpや@if-@endifは1行じゃ無理とか
行頭に書かないといけないとかあるのかもしれない ちょっとミス
> 普通のPHPだと下のようになるが
> <input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''>>
↓
<input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''?>> >>175
先生、本当にありがとうございます。
@endphpは記載忘れですが、実際には記載してます。
<input type="radio" name="u_sex" value=1 <?= ($profile->u_sex) ? 'checked':''?>>
でも同じエラーが出てましたので、他の解決策が必要のようです。
コード的には
<?php
if($profile->u_sex==1){
echo '<input type="radio" name="u_sex" value=1 checked="checked">';
}
と修正したものを使うようにしました。
コードが1行で綺麗に書けないのが残念でした。
本当ありがとうございました! あ、apacheのWebサーバで動くphpのことです WEBサーバに数十ミリ秒ごとにアクセスして、命令が出てる時はブラウザがスクリプトを実行する仕組みが今風らしい 質問させてください
ファイルを開く
処理1
ファイルを閉じる
ファイルを開く
処理2
ファイルを閉じる
というようなコードを書いたんですが、
ファイルを開く
処理1
処理2
ファイルを閉じる
に変えた方がいいですか?
懸念としてはファイルを開くという処理そのものが処理速度的に重いのであまり繰り返すのはよくないかな?と
1と2を分けた理由は一つにまとめると処理が複雑になって可読性が低くなってしまったからです
お力添えよろしくお願いします >>183
素人的な考えだけど、ファイルを開くとファイルを閉じるを二回もしてるから
一回で済ますことができるならまとめたほうがいいかもだしなんで開くと閉じるを2回もしてるの?理由があるの?とかいわれるだろうし ファイルに対する操作が追記なのか、それともランダムアクセスによる更新なのか
ファイルのサイズがどの位なのか、
処理1と処理2は独立した内容なのか、それとも順序性があり、処理1が完了する前提が必要なのか
などなど色々条件がありそうだけど、
乱暴に言ってしまうけど、ファイル操作なんて大して重たい処理ではないと思う >>184 >>185
PC上でフォルダを覗いてファイルを開くと動作がもさっとしてる(スペックによる)けど、サーバー側ではそういった見た目(GUI)を伴わないから実際はサクサクサクッ!と動いてると考えていいですか?
どうしても自分のPC上での動きを参考に「ファイル操作」を捉えてるから、「開いて閉じて開いて閉じて」は動作が遅いかもと感じます。間違った考え方とは薄々思ってますけど 正確に言えば、PHPが動作している環境次第
ストレージの性能が良いなら殆ど気にする必要が無いだろうし
扱うファイルがとても大きいならファイル操作はそれなりの時間が掛かる
示された条件だと、この程度の一般的な見解しか出てこないと思う 処理の開始時間と終了時間を記録し、
処理の違いでどの程度変わるかを見てみれば良いと思う
自分の予測だと、殆ど誤差でしかないと思う >>188
処理速度の計測方法調べてやってみたいと思います
参考になります。ありがとうございました phpのセッションとかでセッションの中身が1の時はAのページ成型、セッションの中身が2の時はBのページの成型、セッションの中身が3の時なら中身を1にしてAのページにって作られてた時に
ブラウザのクロームとかの履歴では全部同一のページと認識されて上書きされるの?前のページ内で書かれてたものも全部上書きされるのか? Ruby では、小さいサイズで、読み込みだけなら、
File.read, readlines で、一気に全部読み込んで閉じる
処理は、その後に行う
読み込んで書き戻すのなら、処理中もファイルを開いておくかも知れないけど、
そうするとその間、排他制御で、そのファイルはロックされる laravelなのですが、よろしかったら教えてください。
ローカルに作成したサイトのindex.に接続すると、
geolocationで位置情報を取得するようにしたいのですが
アクセス先がlocalhost:8000/indexの場合には位置情報が取得できるのですが
実機を使うために、IPアドレスでアクセスできるように
php artisan serve --host 192.166.13.102と設定すると
開発しているPCや、実機でアクセスしても、geolocationが使えなくなります。
実機でローカルサイトにアクセスして、geolocationが使えるようにするには
どうしたらいいのでしょうか? エスケープ処理のために$clean[$key] = htmlspecialchars( $value, ENT_QUOTES);でしてるんだけど
<や>が変換されないでそのまま表示されちゃってるんだけどちゃんと変換できてないの?それとも書き方が悪い?誰か教えて >>193
そのまま表示されるのが正しい動作じゃないの? >>193
$valueの中身を忘れてた
$value = <script type='text/javascript'> location.href='http://www.yahoo.co.jp'; </script>;
これで 何でVisualStudioみたいにGUIで開発できないんですか? >>194
でもサニタイズしたはずなのにphpでフォームにJavascriptの$valueの中身入れるて飛ぶとYahooに飛んじゃってるんだよなIEで確認したから間違いないけど どうせブラウザのソース表示してみたら&lt;&gt;になってるとかいうオチだろ それは、タグ内の属性じゃん!
そこは、要素内の内容部分じゃないよ! PHPやたったことないんだけど、どういう風に起動してるのか俺に簡単に説明してくれない?
cgi(まあperlとしよう)だと、ブラウザがhttpdにリクエストして、cgi(perl)を起動する。
httpdは標準出力(まあたぶんhtml)を受け取り、それを必要なら加工/整形(主にヘッダー) してブラウザに出力する。
phpはどこで誰からリクエストを受けてどうやって動いて、誰に何を出力してんの?
そしてcgiとは何が違うの?
とりあえず、cgi(perl)と違うのは、常駐して起動してるから速いんだよ、ってのは聞いたけど、それ以上は分からない。
そのへんを分かりやすく俺に教えてやってくれ
お願いします phpはcgiモードとmoduleモードがあって
cgiは呼び出し式
moduleモードは常駐式
受け取ったデータの処理の流れは一般的なcgiと同じでhttpd経由
常駐だから早いのも確かにそうだけど、標準機能のみで色々できるから、機能を都度importしない事も速さの主因
まあそれはちょっとhttpdとの関連性からは離れている話ですね >>202
わかったありがとう!
cgiモードとmoduleモードの選択ってのは、どこで誰(どのプログラム)が判断して決めるの?
php自身がmoduleモードで動いていて、httpdがmoduleモードで動いてるphpに対してのアクセス方法を知っているってこと? .exe, .dll の違い。
例えば、sqlite3.exe, sqlite3.dll の違い
CGI は、.exe と同じ。
別プロセスを起動するから、その起動時間が掛かる
.dll は、そのプログラム(プロセス)内にライブラリを読み込むだけ。
別プロセスを起動していない Ruby, PHP, Perl などのCGI では、
httpd が別プロセスを起動して、結果を取得して、プロセスを終了させる
毎回この起動・終了に、時間が掛かるから、
起動しっ放しというモードもある >>204
かなり分かった!
httpdが自分のプロセスにdllを取り込むってことかな? https://i.imgur.com/QB190U9.jpg
このプログラム実行して、43行目にphp Array to string conversion inっていうエラーが出る。ググッて見たけど分からん。 ループ足りないような
30行目のarray_chunkで$imagesは配列の配列になる
http://php.net/manual/ja/function.array-chunk.php
42行目で$imgは配列
43行目で配列($img)をechoしようとしてる
foreachを追加して2重ループにすればいいんじゃないか $images が文字列の配列の配列なんだから$images[$page]が文字列の配列
$imgは文字列だろ >>207
とりあえず43行目あたりで print_r($img); とかやってみたら >>209
確かにそうだ >>208は間違い
>>211
どう解決したのか書いてくれると有り難い >>193
原因がわかったわ、その前にページが止まるからなぜなんだろうと思ったらChromeが制御してたわ
コードのscriptタグを検知して連続遷移しないようにしてたみたいだ、余計なことを・・・ 質問です。
htmlソースをinclude等で読み込む際、そのソースの途中に追記する事ってできますでしょうか?
読み込むソース
<div>1行目</div>
<div>2行目</div>
<div>3行目</div>
↓
includeする時にこうしたい
<div>1行目</div>
<p>追記</p>
<div>2行目</div>
<div>3行目</div> $text = "<p>追記</p>";
<div>1行目</div>
<?php echo $text."\n" ?>
<div>2行目</div>
<div>3行目</div>
とか
<div>1行目</div>
<?= $text ?>
<div>2行目</div>
<div>3行目</div>
とか Ruby, JavaScript にもある、部分テンプレートを読み込む、partial file の機能だろ。
PHP のフレームワークにもあるはず
一般的には、header, footer などの各部分は、別ファイルにして読み込んで使う >>215
すいません質問の仕方が悪かったです。
読み込む側のページでのみ関数みたいに個別で追記をしたいんです。
読み込まれる側のファイルにURL判別とかの細工でもしないと無理ですかね・・?
jQueryでいう、.loadしたソースにコールバックで.insertAfter();を走らせるイメージです。 >>216
そうです。ありがとうございます。
フレームワークなどで行うのですね。 include/requireは関数じゃないので返り値としてソースを受け取れないから
そのinclude/requireしたファイル内で追記してどうこうってのは無理
file_get_contentsみたいの使ってメモリにロードすれば可能
そこでロードしたソースをいじればいい
PHP標準のDOMパーサーは非常に使いづらいので正規表現がお手軽
細かい関数の使い方は調べてもらうにして
#tmpl.inc
<div>1行目</div>
<div>2行目</div>
<div>3行目</div>
#a.php
<?php
$src = file_get_contents('tmpl.inc');
〜
a.phpでどうしてもinclude/requireしたものをとっておきたいならラップして
#a.php
<?php
require 'tmpl.inc';
#b.php
<?php
$src = file_get_contents('a.php');
〜 >>219
a.php や b.php のくだりがよく分からんが、
ob_start();
include 'tmpl.inc';
$contents = ob_get_contents();
ob_end_clean();
とやる方が手っ取り早いんじゃね。 >>219
>include/requireは関数じゃないので返り値としてソースを受け取れない
理解しました。ありがとうございます!
file_get_contentsはスクレイピング時に使った事あるのですぐ理解できました
ありがとうございます〜
>>220,>>221
ありがとうございます
一番知りたかったのはinclude/requireでは無理と言う事でした
方法論、参考にさせていただきます >>222
http経由の file_get_contents なら >>219 の b.php は tmpl.inc の内容(が require で処理されたもの)が得られるけど、多分そのままやってもローカルの a.php のソース自体が得られるだけだと思うからきちんと実験した方がいいよ。
>>220 のやり方は例えばメールの文面なんかを別ファイル化したりといろいろ使い道があるよ。
mail.inc を
お問い合わせありがとうございます
<?=$date;?>に<?=$name;?>からのお問い合わせを受け付けました。
受付番号は <?=$no;?> です。
みたいに書いておいて >>220 のやり方で mail.inc を include すると、変数が当て込まれた形で $contents として得られる。
これを
list($subject, $body) = explode("¥n", $contents, 2);
とやってタイトルと本文に分離してメールを送るとかね。
$date とか $name なんかの変数は include してるスコープから見えるように設定しておく。 >>223
ご親切にありがとうございます。
とてもスマートな印象ですね。
今後の参考にさせていただきます。 $paramに連想配列を格納して、foreachで取り出そうとしてるんですけど
先頭要素のキーが取り出せず、先頭要素の値から取り出し始めてしまうのですが
そういう挙動に詳しい人いらっしゃいますか? foreach ($array as $key => $value)
にして、$keyにアクセスしてる? してます
var_dumpで配列を吐き出すと、しっかり吐き出せるんですけどね
こんなんで時間かかってしまって泣きですわ >>227
array_keys を使うとどうなる? いいの?それでw
気になるわぁ
再現コードあれば欲しい 初めて聞く症状だけれど
var_dumpで確認できている配列データなら
foreachで取り出せないわけないので
見間違いとか、スクリプトやタグのせいで消えてしまっているとか別の要因なんでしょ だなぁ
>>226 のコードで最初のキーが取り出せず値から取れちゃうというのが、$key と $value に具体的に何が入ってるということなのか分からんな。
言葉通りに捉えれば $key に最初の要素の値が入ってるんだろうが、んじゃ $value には何が入ってるの?みたいな。 centos7でphp72をremiで入れた場合、
# php
-bash: php: コマンドが見つかりません
を解消するための、正しいシンボリックリンクの張り方ってどこに作ってどこへ向けるのが正解?
/usr/binに作るのか、
パスが通っていればどこでも良いのか、迷ってます。
インストールしたときは
# cd /bin/ ; ll | grep php
php72 -> /opt/remi/php72/root/usr/bin/php
となっています。 >>234
はい、入ってますが、phpは宙ぶらりんな状態になっていますので、毎回シンボリックは張る物だと思っていました。
# yum list | grep php72 | grep cli
php72-php-cli.x86_64 7.2.16-1.el7.remi @remi-safe
# which php
/usr/bin/which: no php in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
# which php72
/bin/php72 lineボット作ろうとしてるけど
curl_initが使えない 参考までに、Windows 10・WSL・Ubuntu 16.04 で、python の、symbolic link は、
/usr/bin$ file python
python: symbolic link to python2.7
/usr/bin$ file python3
python3: symbolic link to python3.5 >>237
1. 使えるようにする
2. curlの実装を探してくる
3. curlを自分で実装する
好きなのえらべ Windows 10では、バージョン1803(Windows 10 April 2018 Update)で、
curlコマンドが、標準コマンドとして追加された。
ただし、Linux のcurl とは挙動が異なるかも知れない??
コマンドプロンプトで、where curl とすると、
C:\Windows\System32\curl.exe
PowerShell にも、curl というalias がある。
こちらの実体は、Invoke-WebRequest。
こちらよりも、curl.exe を使った方がよいかも
PowerShellで、gal -name curl とすると、
curl -> Invoke-WebRequest >>242
ubuntu18でやってるんよね
webシステム作ってて 質問させてください。よろしくお願いします。
DBはsqliteというのを使っています。
DBは、user_name : 都道府県 :というカラムがあります。DB件数は1000件で、ランダムで生成しています。
formページで、都道府県を入力すると、$form_prefという変数に入力値を格納し、
DBへは、where('都道府県','$form_pref)で検索すると、検索結果は0になります。
また、where('都道府県','東京')で検索すると、検索結果は正しく検索されます。
where句で、変数によって検索をかけると、正しく検索されないのはなぜなのでしょうか? >>244
なんのライブラリ使ってるかしらんが、そもそもお前のそのソースよくみろ
余計なものが入ってるだろ >>245
ありがとうございます
where('都道府県',$form_pref)で検索しても検索できないです。
クオーテーションがないことが問題なのでしょうか? >>248
DBに渡っているはずのSQL文を一度画面に表示させてみ
多分、それで解決するよ 特定のフォルダ内にjpgファイルが1枚でもあるか確認する良い方法なにかありますか? direcoryiteratoriteratorでリスト取得してforeach >>248
エラーが出てるならエラーの内容を教えて
プログラムエラーでなくて論理エラーなら
単に検索に使ってる値と、対象となる値が違うとか、そんなもんでしょ リストを全部取得するのではなく、jpgがあった時点でtrueを返す方法ってありますか?
数が多いファイルが含まれると遅くなってしまいました。 dbでファイル情報管理すりゃいい
index化みたいな >>254
ファイル数が万単位とかであるならば
255も言ってるようにDBで拡張子ごとにファイル名を管理したり
jsonでデータ管理してみたら >>254
まんま、したい事すりゃ良い。
jpgか調べて見つけた時点でreturn true。 全取得してからしか調べられないようなのでglobを使っていきます。
ありがとうございました。 ls *.jpg 2>/dev/null | wc -l >>254
jpgかどうかに関係なくファイルの多いディレクトリというだけで遅くなるからあきらめろ。 PHP始めるけどどんな環境がいいの?
IDEは多分vscode使いたい
Pythonだとインポートサジェストがvscodeにはまだないけどphpは大丈夫?
それとPythonで言うanacondaみたいなものはあるの?
鉄板とかあるの? 色々と調べてみるとザンプにしますか?Dockerにしますか?って感じなんだな
やっぱりLinux上でやらないと駄目かな?出来るだけ仕事現場でそのまま使えるテクノロジーで学びたいんだけど 色々と調べてみた結果Lpicの資格も欲しいのでVMwareにCentOS入れてDockerでやっていこうと決めました。普通にPHP学ぶだけなら>>263が最適解だと思います。>>263氏ありがとう 今どきサーバの知識とかいらなくね?
LaravelとかRailsは内蔵されてるし
Xamppとかいらんわ このスレはXAMPP派が多いらしい
開発環境ならビルトインサーバで十分だしCI環境ならDockerだろうと思うのだがねぇ >>267
違う板で未経験から働きたいならlpicとってサーバーをある程度理解してる事をアピールしたほうが良いとアドバイスされたんだよね
まぁ取ってなくても早いうちに転職活動したほうがいいとも言われたけど Pythonが出来る風な口調だけど
なんでわざわざ就職考えるのにPHPなんて始めるんだっちゅう なんでそうやってしれーっと嘘つくんだよ
indeedで東京エリアでPHPで検索して15000件
Pythonで検索して10000件だぞ それSES会社がテキトーに検索ワード盛ってるだけだろ
求人量ならJava、PHPの足元にも及ばんぞPythonとかRubyって
質は高いと思うけど PHPのエディタ、今までAtomを使ってて、VScodeも気になるんだけどどう? いやいや
今スタートアップはほとんどPythonだから Atomよりはだいぶ軽いし動作は軽快
使い勝手もほぼ一緒
まあしょせんエディタだけども マカーはVSコードなど使わないからな
もちろんGithubも使わねえ PHP は多いけど、低価格っぽい。
多さの順は、COBOL > Ruby > Python
Ruby は、Vagrant, Chef など、サーバー管理構築運用の仕事もあるから、
OS をよく知っている印象が強い >>266
今はLPIC じゃなくて、LinuC。
OS の機能やサーバー管理構築運用なら、Vagrant, Chef などで使われている、Ruby がお勧め。
こういうシェルスクリプトの代替機能を、面倒なPython で学ぶ必要はない!
先に、Rails よりも、Sinatra をいじくりまわせ!
YouTube に、雑食系エンジニアのKENTA の動画がある。
転職者は、見ておくべき。
PHP は、転職での評価が低い
KENTA 自身は、Ruby にそっくりな関数型言語、
Elixir のフレームワークで、ポートフォリオを作ったらしい。
ここまで行くと、年収1千万超! Rails は、年収3千万円超のハーバード大学でも、教えているほど!
プログラマーなんて、年収が1/5 ぐらいになるのに、なぜ教えるのか、わからないw OSのコマンドアプリやシェルをラップする事務員向けWebGUIみたいなのできますか? KENTAって人の動画をマジで信じてる人いてビビったわ
技術を煽って自分のオンラインサロンに入らせる典型的な不安ビジネスやってる人じゃん
あとあの人のポートフォリオ見たらわかるけどHelloWorldレベルのことしかやってないぞ KENTA の言ってる事は、おおむね正しい。
また、Ruby から、Elixir までやっているから、てっきりトップ・エンジニアだと思っていた
>>286
Ruby なら、`〜` で囲むと、コマンドも実行できる。
puts `ls | wc -l`
1-liner なら、
ruby -e 'puts `ls | wc -l`'
だから、OS の機能や、サーバー管理構築運用のVagrant, Chef などで、Rubyが使われている
PowerShell コマンドも呼べる。
例えば、クリップボードを取得する
puts `powershell Get-Clipboard`
1-liner なら、
ruby -e 'puts `powershell Get-Clipboard`' ターミナルで
ruby -e 'puts `ls | wc -l`'
なんて打ってる奴いたらクビにするわw このスレなら 「PukiWikiから○○に移行したよ」って人もいそうなのでお聞きします。
いま時の 小規模向けWiki でオススメのがあったら教えてください。 PHPベースでなくても構いません。
昔 PukiWiki で個人的なメモを管理してたんですが もう何年もご無沙汰しています。 ローカルでしかPHP触ったことないんだけどネットに繋ぐ場合ってどんな方法ある?サーバーを借りるの以外で >>293
ローカルのPCをインターネット側からアクセス可能なサーバにするとか。 >>295
いまアパッチ使ってローカルでやってるんだけど設定変えて繋げたらセキュリティとかの対策必要なの?
仮想環境でやってないからちょい怖い 思い…出した!ngrokだ。flywheelでも採用されてたツール。 面接のポートフォリオで動いてるとこ見せたい場合1番簡単な方法って何がある?
GitHubとかに上げても動いてるとこは見れないよね >>300
動画なら通信環境があれば見せられるんじゃね? >>301
やっぱ相手側が触ることは出来んよね
awsとか使えば相手が動かせる事も出来るよね ファイルアップロードフォームを作って、
iPhoneから写真や動画をアップロードして、
$_Filesからファイル名を取り出すと、
6CCC151C-DF3B-486F-8C97-AA06485047BD.jpeg
こんな感じの文字列になってしまいます。
元はIMG_0000.jpgのような名称だと思います。
iPhoneからの場合はどうすれば、正しい名称になるんでしょうか? phpでデータベースのカラムに寿命付けるのってどうすれば出来る?
takashiが一時ログインしたらタカシのデータを24時間で削除したいんやけど…
セッションやクッキーに保存するのは何か駄目な気がして。。 >>306
登録した時間によって削除の時間が変わったりせんかな…
なんつーか個別にイベントを発行する感じにしたいんや。
一時的に登録して登録から24時間立ったら削除するみたいな。cron使う頭いいやり方があるなら知りてえ >>307
あっそうか。それをcronで判定すればいいのか。アホやな俺 そういうのを銀行などの運用業務では、日次処理と言う。
他にも、週次・月次処理もある
>>300-302
PC 内でサーバーを構築しておいて、PC を持っていって、ブラウザで動かせば? $array = ['name'=>'ななし','age'=>'20','sex=>'男']
という配列があるとして、
$array = ['member_name'=>'ななし','member_age'=>'20','member_sex=>'男']
と、キーにmember_を追加する方法を模索しています。
foreachで代入し直す以外に、簡単な方法はありますでしょうか? >>313
PHPの配列は原則的にハッシュマップだからそういう操作は想定してない $array = [
member_name => $array[name],
...
]; $array = array_combine(array_map(function($v){
return 'member_'.$v;
} ,array_keys($array)), $array);
テストしてないけどforeachのが早そう $array = (function($old){
foreach ($old as $k => $v) $new['member_'.$k] = $v;
return $new;
})($array);
foreachつかってかーさい 正規表現で、\w と [0-9A-Za-z] とで、どちらが早いとかありますか?
小文字アルファベットだけでいい時に、[a-z] と \w のどちらも指定できるとしたら、どちらが早いでしょうか? 単に1つずつ、動的に辞書に追加してるだけだろ
結局、1つずつ、すべてを追加するだけの処理 >>314-317
色々とご意見ありがとうございます。
素直にforeach使って対応します。 PHP実務で最低限知ってればいいことって何かありますか? GETとかPOSTではfilter_inputを使えという話ですが、$_SERVERを扱うときは例外で旧来通り
直接アクセスが基本ですか?
さくらサーバーでは云々という情報が引っかかるのですが。 filter_inputにこだわる必要なんて無いよ。 環境変数が改ざんされてたら
もうfilter_inputどうこうの次元じゃないけどな 例えばCで以下のようなdefineをPHPで実現するにはどうすればいいでしょうか?
#define errlog(msg) ErrorLog(__FILE__, __LINE__, msg)
初歩的ですみません。 phpさらっと勉強したのですが
具体的にphpで作られてるウェブサイトで、phpを公開してる奴ってありませんかね?
勉強のために見てみたいです WebDBアプリでソース公開されているものないですか?
デザインパターンとかも学びたいです 学校の課題でHTMLでHP作ってるんだけどwin10のパソコンで書いたやつを学校PC(win7)で開くと文字化けするんだがどうすればいいのか教えてくれ >>340
SJISとかUTF-8などの文字コードを勉強して、UTF-8が使えるテキストエディタ使え。和解の URLですが.../と打ち込んだ場合
...というファイルにアクセスするのですか? >>343
ディレクトリ名で「..」は一つ上のフォルダという意味がある。点二つね。 >>344
. 今いる所
.. ひとつ上
... 二つ上? 小学生のプログラム教材見たけど、
ロボを前へ3歩右へ2歩動かす命令をみたいなやつとか
PHPの教科書と同じレベルだわ
算数で足し算とか習ってるレベルの子供にほんとに理解できるのかな? >>336
オラは個人でポータルサイト作って公開してるが
PHPはサーバサイドの言語だから
サイト見たところで勉強にはならんと思うぞ
非遷移をやりたければAjax使わんといかんし >>350
アングリーバードのプログラミング教材は面白かった
でも、プログラミングってよりブロックタイプのやつだから
アルゴリズムを考える作業が殆だよね
micro:bitのブロックで書いたコードをJSやPythonなどに変換できる機能は良いなと思った >>352
俺見た本はぱっと見は絵が多くて小学生用なんだが普通に
条件分岐if文、ループfor文とか説明されてて
英語も算数も絡んでくるけど、今後の小中学生が脅威にかんじたわ
小さいうちから当たり前になじんでれば抵抗ないんだろうな まあphpとか仕事にしてるような奴らは仕事なくなるだろな >>350
ロボットに正三角形を書かせて出発地に戻るとか、具体的だから小学生にも分かり易い。
Turtle LOGOの流れですね。 PHPでradioにチェックマークを付けたい場合、下記は間違ってますか?
<input type="radio" name="AAA" value="OK" <?php if($HEN['AAA'] === 'OK' ){ echo 'checked'; } ?> required>OK
$HEN['AAA']は確実に'ON'です。
入力フォームで入力確認画面からsubmitで最初の画面に戻すやり方です。
戻ってきてON状態にしたいのですが、なってくれません。 >>357
>if($HEN['AAA'] === 'OK' ){
>$HEN['AAA']は確実に'ON'です。 >>358
すいませんif($HEN['AAA']の内容は「OK」です。
print_rなどで変数の内容を見ても、ちゃんと入ってます。 checkedとrequiredがつながってる可能性 ソースをみると、
<input type="radio" name="AAA" value="OK" required>
こうなります。
OKのあとに半角2つスペースでrequired >>363
提案
radioをcheckboxに変えてみる
=== を == に変えてみる
if($HEN['AAA'] === 'OK' ){ echo 'checked'; } を echo 'checked'; だけにしてみる
いずれかで何か変わりませんか?
どこかに間違いがあると思うけど、提示された範囲では分からないです >>357
><input type="radio" name="AAA" value="OK" <?php if($HEN['AAA'] === 'OK' ){ echo 'checked'; } ?> required>OK
例えば、Ruby のERB なら、
<p>
Name: <%=h name %>
</p>
h は、<, > などの特殊文字を、HTML Escape する。
でも、君のはコンテンツじゃなく、属性だから、HTML Escape してはいけない
一旦、php 文を変数に入れて、その変数をそこに書けば?
ERB では、<% 〜 %> は、Ruby式を実行するだけで、出力しない。
<%= 〜 %> は、式を実行して、そこへ出力する
同様に、phpにも、出力する記法があるのでは?
そんな、echo などを、わざわざ使うかな? 見た感じでは構文的な間違いはなさそうなんだよな
ただ全体を晒しているわけではないので、間違い部分が分からない if($HEN['AAA'] !== 'OK' ) に試しにしてみる OKっていうyvalueはちゃんと入れてるのか?
入れてないならチェックつけたらonって入ると思うけど
それは大文字ではなくて小文字のonになる
$HEN['AAA']って名前の変数は定義されてるのか?
普通に考えるとそこに入るのは$_GET['AAA']もしくは$_POST['AAA']
テンプレートエンジン使ったほうがいいと思うけど
バカ正直に書くとこんな感じになるはず
<input type="radio" name="AAA" value="OK" <?php if (isset($_POST['AAA']) && $_POST['AAA'] === 'OK') { echo 'checked '; } ?>required>
読みにくくなるが三項演算子を使えばもうちょいスッキリ書ける
もうちょい読みやすく書くと
<?php if (isset($_POST['AAA']) && $_POST['AAA'] === 'OK'): ?>
<input type="radio" name="AAA" value="OK" checked required>
<?php else: ?>
<input type="radio" name="AAA" value="OK" required>
<?php endif; ?>
>>367も言ってるけど
この条件文の前に$HENなんていう変数を本当に用意してるのであれば
その$HENの中身を'checked 'か''にするところまでやって
<input type="radio" name="AAA" value="OK" <?= $HEN ?>required>
にすりゃいいだけ ><?= $HEN ?>required
ああ!
前後に、空白が無いから、
checkedrequired みたいに、文字列がつながって、HTML の構文エラーになるのだろう!
必ず、前後に空白を入れるべし! phpで、画像にアクセスしてきたIPを保存することってできますか? ダイレクトに画像アクセスされたら分からないだろう
Webサーバーのログ見るしかない apacheでやっていることをphpでやるようにしたらできるぞ 画像は非公開領域に置いて、PHP経由で画像を出力するとかできたような ありがとうございます、もうちょっとphpを勉強してから
また考えてみます 呼んだ関数の返り値がfalse相当でなければ、その値を返す
そうでなければ、次の関数を呼んで、その値を返す
というのをスマートに書くにはどうしたらいいですか?
return func0() || func1()
と書けばいい気がしたのですが、func0の返り値が文字列の場合、うまくいきません if (func0() !== false) {
return func0();
}
return func1(); >>379
スマートにする目的はなに?
可読性?実行速度?タイプ量? >>379
イマイチ何がしたいのかわからないが、↓は駄目なんだよね?
http://codepad.org/Pmd52Nk7
↓みたいに、falseで無い文字列の場合はその文字列を返したいの?
https://ideone.com/HjePmQ >>379
三項演算子で
return func0() ? func0() : func1();
ただこれだとfunc0()を2回呼び出して無駄なので
return ($a = func0()) ? $a : func1();
かな
>>379のはJavaScriptで使うけどPHPじゃ使わない スマートってのがばく然とし過ぎてるよ。
何を叶えたくてそういう書き方をしたいのか。
それ用の構文が用意されてるか聞いてるのかな。
COALESCE みたいなのを探してるならPHP7で ??(null合体演算子)が追加されたけど、false や 0 にも適用させたいなら合わないだろうね。
if文で書くのが見やすいしメンテもしやすくてスマートなんじゃね。 動的言語じゃ短絡評価の型がboolじゃないのは普通だよ CakePHPって人気無いのか?(´・ω・`)
今、参考書読み始めたばかりなんだが 成熟したFWって感じだと思う。今から学んでも良いと思うよ twitterのBotを作りたいと思っています
指定ワードに引っかかったらブロックするという動作を入れたいのでアプリだと対応できなさそうです
と言うか PHP でもそもそもそんな仕様で作れるのかも分からないので参考になりそうな資料があったら教えてください 勉強中の身であり、変数の名前に気になるところがあるのですが、
$productName
$productColorとか、単語を並べてわかりやすくする時、2単語目は1文字目は大文字なのに、
先頭の単語は大文字にならないのをよく見受けるのですがなぜでしょうか? 世の中にはいろんな宗教があって、それぞれが信じる神に従ってる
何故その宗教なのか、人によって違うrだろうけど
好きなのを選べ >>395
そういうもんだから、としか
ローワーキャメルケースでググって phpの変数の場合は先頭に$がつくから大文字開始でもいいわなと適当に無責任に思ったりする
アンダーバー使いからでした レスどうもです、色々見てみました。
たしかに組織の中でルールを統一しないと色々不便があると思うので、こういうのがあるのですね。
for文のどこに半角スペースを入れるか入れないかでも悩んで居るので
できるだけ「ベタ」なやり方に沿っていたほうが良いとは思うのですが、標準化というのかわかりませんが、
そういう心構えを案内しているサイトは、何でググればいいでしょうか? glassfishは使えますか?
また、類似のものはありますか? >>401-402
ありがとうございます。
たしかに「〜しなければならない」と書かれると守らないより、守った方が色々トラブルなどにならないかもしれないので、
できるだけ遵守したいと思います。 ファイルの読み書きの練習でカウンターを始めたのですが、とりあえずロック無しやエラー分岐無しでも上手く動かず
var_dumpなる便利なものがあるので使ったところ、
string(3) "1 " string(3) "1 " あなたは1 人目のお客様です、 と出るようで
文字列で読んでいるため ++が効かないようです。
ただ、$count = $count = 1;とすると
string(3) "1 "
Notice: A non well formed numeric value encountered in c:\********\counter\index.php on line 7
int(2) あなたは2人目のお客様です
とファイルには1を足されて書き込めるのですが、$count++; を使って動くようにするためにはどうすればいいでしょうか。
<?php
$counter_file = "count.dat";
$counter_length = 5;
$fp = fopen($counter_file, "r+" );
$count = fgets($fp, $counter_length);
var_dump($count);
$count++;
var_dump($count);
rewind($fp);
fputs($fp, $count);
fclose($fp);
echo 'あなたは'.$count.'人目のお客様です';
?> ×:ただ、$count = $count = 1;とすると
○:ただ、$count = $count + 1;とすると
です、すいません。 $count = intval(trim(fgets($fp, $counter_length))); >>405
string(3) ってのは長さ 3 の文字列ということを示してるから、カウンタファイルにカウント値に続いてスペースとか改行コードがくっついてるんだろうね。
fgets した値を trim すればいいんじゃないかな。
文字列変数を数値としてそのまま計算することは可能だから、intval は必須ではない。
あと fgets や fputs じゃなく fread と fwrite を使ってはいかが。 PHPにおける連想配列はキーが文字列の場合を指すのでしょうか?
$yasai = [1 => 'キャベツ', 'にんじん', 'レタス', 'トマト'];
これはキーが1から始まる整数ですが、
プログラマが指定しているので連想配列ですか? >>408
なんとなく使い出したatomの仕様でした。
datファイルを1バイトの文字だけ書いて上書き保存すると0A0Dの文字コードが足されていました・・・
string(3)というのが不思議だったのですが、自分で1バイトなのになぜ?と思い込みが強く気付くのが遅れてしまいました。
fread, fwriteというのがあるのですね。
検索すると色々出てきたりするのですが、どれも正しいものと思っていたのですが、
時代的に推奨されない関数などがあるようで、そのあたりの見極めが良くなりたいです。
>>407
excelの関数でたくさん入れ子になったものを見たことがあります、こんな感じでまとめられるのですね。 >>410
php では fputs と fwrite は全く一緒。
C なんかだと文字列長をサイズなり終端文字なりで示す必要があるので、その示し方の違いで関数が別れてる。
php の変数は文字列の長さを変数自体が知っているから、fputs と fwrite に違いを付けようがない。
fgets については、改行かファイル終端まで、または指定サイズに達するまで読み込むが、fread は改行で読み取りをやめない点が違う。
対象のファイルが改行区切りのテキストファイルを読む場合は fgets が便利に使えることも多い。
でも今回のカウンタファイルはカウント値がひとつ書いてあるだけのファイルだから fgets でも fread でも表向きの結果は一緒だけど、
それでも fgets は改行を探しながら読み取る分少し遅いことが予想される。
そもそも fgets を使う場面では、そのファイルが改行で区切られていることを暗に示しているので、今回の使用を表すコードとしては適切と言えない。 >>411
正 今回の仕様を表すコード
誤 今回の使用を表すコード 遅くなってすいません。
カウンターのデータとしてあるべき姿ではありませんが、複数行に数字を書いたファイルを
fgetとfreadを使って読むと、fgetは改行付きの1行、freadはすべての数字と改行を読みましたが、
意外と後者でも1つ目の数字だけをインクリメントして書き戻しました。
最終的にはLAMP環境でDBとの読み書きを行いたいのですが、
やはりアプリケーションのログとかをディレクトリ内で追記することを考えると
ファイルの読み書きコマンドは必須ですよね。 データベースに書き込みコードを作ったんだけどどうしてもカラムがカラムとして認識されなくてエラーになるんだけどなぜか教えてくれ
$sql = "INSERT INTO comments(
number, name, time, comment←ここ
) VALUES (
'', '$myname', '$time', '$comment'
)"; >>416
desc comments か show create table comments の結果を見せて `number`
`name`
`time`
`comment` >>416
解決しました、このコードの前の変数代入のスペルミスでした、お騒がせしました 自分で、SQL 文を組み立てて送信するのは、
SQLインジェクションもあり、お勧めできない!
フレームワークには、O/R マッパーが付いている
Ruby on Rails を知っているなら、CakePHP も出来る。
CakePHPは、Rails のコピーだから!
掌田津耶乃が、CakePHPの本も書いてる。
彼は、ほとんどのフレームワーク・ゲームエンジンの本も書いてる in とか like とか動的な条件式を構成する程度のありふれたことをやるにもおかしなラッパやライブラリを作るハメになるから、
SQLインジェクション対策ごときで有りもののフレームワークに拘る必要なんて全く無い。 >>426
だからPDOで充分じゃん。
でもPDOの名前つきプレースホルダは、値を入れる連想配列に余剰な項目があるとエラーになっちゃうのがイケてないんだよな。
いくつかSQLを続けて発行しようと思っても、同じ連想配列の使い回しがやりづらい、というか実質できない。
なんでこんな余計なお世話の仕様にした。 PHP7.2をインストールしたサーバから外部サイトを取得しているfile_get_contentsで
SSL routines:ssl3_get_server_certificate:certificate verify failed
というエラーが出たので
ググったところ、サーバのSSL証明書ファイルが古かったりうまく設定できていない時に出るエラーのようでした
ググった先の情報に従って、
opensslをアップデートしてから、php.iniで
openssl.cafile=/etc/ssl/certs/ca-bundle.crt
と設定したのですが現象は変わらず(phpinfoで設定の反映は確認済み)
http://curl.haxx.se/ca/cacert.pem
を取得してそれをopenssl.cafileに設定しても、やはり現象に変化なしでした
しかたなくfile_get_contentsのオプションでverify_peerとverify_peer_nameをfalseにして、
証明書のチェック自体をしないようにしたらエラーは消えましたが、
なぜ証明書ファイルを設定してもエラーになったのかが気になります
どんな原因が考えられるでしょうか? >>429
もしかして読み込み先のサーバに問題があるのでは?
と思ってhttps://yahoo.co.jp/をfile_get_contentsで取得してみたら、
エラーは出ませんでした
そこで読み込み先のサイトをブラウザで表示して、証明書を確認したところ、
有効期間が2019/6/14〜になっていました
つまり、最近証明書を更新したようです
file_get_contentsでは古い証明書を取得しまっている、ということだと思いますが
何故そんなことが起きるのでしょうか?
どうすれば解決できますか? プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。 ファイルの書き出し処理で分からないことがあったので質問します
Windowsでファイル名に使えない文字がありますよね
日本語だと、全角文字に置き換えるということができますが
海外だと、どんな方法で対処してるのでしょうか?
英語というか、1バイト文字でどう回避してるのか、よく分からないです
全部 _(アンダースコア)で置き換えとか? 音楽ファイルなんかでよく見るけど予約文字は大体アンダースコアになってるね
アポストロフィや?は省略されてることが多い 単一のphpで、1つのinput textからポストしてデータベースに接続してselectしてレコードを
input textの下に表示する、というコードを書いて動いたのは嬉しいのですが、
functionは使っていません。
いずれclassの中にfunctionを入れたいのですが、私のphp部分なら30行ぐらいのコードでもそういう
ことができるのでしょうか?
人のコードで、functionばかりあって、最後に
main();
みたいなのがありますが、それが行き着く先の形なのでしょうか。 補足です。
sqlインジェクションとかXSSとかの対策も知らないのでそのままではダメですが、
自分なりの堅牢なfunctionを作って、それを組み合わせるというのがphpプログラマーなのでしょうか。 >>437
ありとうございます。デザインパターンで検索するとちょっと内容が濃すぎました。
オンラインの学習でclassやextendを使った内容は一通りやってみたのですが、
既存のfunction無しのコードを、classやfunctionありのコードに直すのではなくて、
始めから書き直すことになりそうですね。 >>438
「PHP リファクタリング」で検索
リファクタリングして、デザインパターンに寄せるのがいい設計のひとつ。
30行ぐらいのコードでも機能が3つあれば、10行ずつ3つに分けてfunctionにしてもいい。
そして、それをまとめて1つのclassにしてもいい。
試しにfunction化して動かしてみて、それが出来たら更にclass化して動かしてみればいいよ。
思ったより簡単に動くから。 >>439
>試しにfunction化して動かしてみて
そうですね、恐らく自分の書いているのはifとメソッドと呼ばれるものを上から書いているだけなので、
function化をやってみたいと思います。
リファクタリングの単語ありがとうございます、今ではデザインパターンよりこっちのほうが
合っていると思います。 PhpOffice¥PhpSpreadsheetの質問です
$sheet->getCell()->getValue()メソッドでセルの値をとっているのですが
エクセル側でセルの内容が装飾されているとき
プレーンテキストではなく
object(PhpOffice¥PhpSpreadsheet¥RichText¥RichText)
として返ってきます
これをサラっとプレーンテキストにするにはどうしたらよいでしょか? DB板が過疎化しているので、こちらで聞きたいのですが、
phpのページにアクセスするとカウンターの値をデータベースから取得して、
1足して表示して、その値をupdateしたいのですが、
DBのcounterテーブルにはcountカラムだけあり、値を入れています。
MariaDB [web]> select * from web.counter;
+-------+
| count |
+-------+
| 1 |
+-------+
カウンターを上げようとするとエラーが出るのですが、
MariaDB [web]> updete web.counter set count=2;
ERROR 1064 (42000): You have an error in your SQL syntax;
2カラムにして、name=count, value=1みたいなテーブルを作って
whereを使ってupdateするのが正しいやり方なのでしょうか?
1カラムではそもそも無理があるのでしょうか。 すみません、自決しました。
コマンドのスペルミスでした。 じゃあ昔DB板にいた人たちは今どこにいるんだろ?まさかTwitterとか?w DB板の1-3番目はoracleですが、
3番目のスレッドは2003年のスレ立てから16年経っても250スレしかないぐらいですね・・・ DB板は比較的過疎だけど、
マイナーなDBMSでなければ
質問すれば回答してくれるよ
MariaならMySQLスレで聞けば良い unixタイムスタンプで
mktime(0,0,0,1,2,1970);
1970年1月2日0時0分0秒(1日後)
を実行すると82800秒と1日の秒数より1時間少ない結果が出るので
次に1970年1月3日0時0分0秒(2日後)を試し
169200と23時間+1日という結果が出ました
これはどういう仕様なのでしょうか?
何か見落としてますか? >>452
ありがとうございます
タイムゾーンを調べる方法があれば教えてもらえますか?
初心者でlocalサーバーで勉強中なのですがそれは関係ないですかね? セミコロンを文字列としてechoしようとするとエラーが出るので、エスケープしようと思うのですがバックスラッシュが効きません
どうしたらいいでしょうか? >>454ですがくだらなすぎました
phpのバージョン上げたら解決しました php.iniファイルのdate.timezoneをasia/tokyoに変更したらうまくいきました
ありがとうございました。 mb_send_mailでメール送信すると、特定のアドレスに送信するとuser unkownになって送れない
これってsmtpの設定をしなくて直接受信サーバーを叩きにいってしまうからダメなのかな
phpmailerとかにすれば解決すると思う? ウインドウズ10で
include_once "C:/folder1/folder2/mytest.php";
みたいな絶対パス指定してphpファイルを読み込んで実行する事は出来ないの? ローカルにあるHTML ファイルを、ブラウザで読み込める
file:///C:/Users/Owner/Documents/index.html
ローカルにあるHTML ファイル内で、ローカルの相対パスを読み込める
<script type="text/javascript" src="../jQuery/jquery-3.1.0.js"></script>
<script src="test.js"></script>
ローカルにあるHTML ファイル内で、ローカルにある画像も読み込める
<img src="C:/Users/Owner/Pictures/a.png">
<img src="C:/Users/Owner/Pictures/b.jpg">
ローカルにあるRuby ファイル内で、ローカルの相対パスを読み込める
require_relative "../my_utility.rb" 今php.exeが配布してるか知らないが
php.exe -filename.php
的なことができるかも Rubyファイルは読み込めないな。
そんなゴミ入れてないからwww XAMPP使えば、phpをコマンドラインから実行できるぞ。 >>464
include_onceで使えますか? >>465
試してみなさい。危険なコードでなければ簡単には壊れないから。
危険なコードというのはファイルを削除したりシステム設定などを書き換えたりするコード。 >>467
じゃあ、エラーメッセージを確認して。phpはローカルにあるの? PHPがローカルにないなら、サーバー側のPHPからローカルファイルにはアクセスできない。アップロードするかなんかしないといけないよ。 初心者は、最初に警告やエラーが見えるようにPHPを設定した方がいいよ。 パスに一字でも間違いはない? 全角・半角が間違ってない? そもそもphpだからって、
Webサーバでしか動かしてはいけない、
なんてルールはないと思うが
シェルスクリプトとかpythonみたいに使ったら良いと思うの >>473
Win10にインストールしたFlywheelのPHPなんだけど、
それが絶対パスでファイルが読めない原因かな? phpを始めて、50行程度で色々作ったりしているのですが、
それが合っているかどうか、無駄や脆弱性があったりと心配になるので、
webサービスでコードを貼り付けて、相談してもらうようなサービスはあるのでしょうか。
数行であればスレの皆さんにご指摘を受けるのは嬉しいのですが
多い行を貼り付けることもスレ汚しにもなるので、何か良い方法はありませんか? >>476
長いソースなら、こういう所を利用して公開すればいい
http://codepad.org/ >>477
ありがとうございます。
適当にechoとか書くとシンタックスハイライトもしたので、便利ですね。 ファイル名にUnicode制御文字らしきものが入ってしまったのですが
それを削除する方法を教えてください
具体的に何が入っているのかを調べる方法もあれば教えて欲しいです
https://i.imgur.com/V7xutMK.png
twitter のツイートをコピペしたものをファイル名にする処理をしたときに
そうなりました
上の画像で言うと、@の前にある文字です
おそらく、[RLO]だと思いますが、これを取り除く方法が分かりません >>479
自己解決
とりあえず、これでなんとかなりました
$str = preg_replace('/[\p{Cc}\p{Cf}\p{Zs}]/u', '', $str);
このへん、参考にしました
U+001DなどUnicode(ASCII,C0)制御文字がHeaderに含まれるとaborting requestするので除去する - Qiita
https://qiita.com/khsk/items/3c98174bc6cb9b596e61
PHP: Unicode 文字プロパティ - Manual
https://www.php.net/manual/ja/regexp.reference.unicode.php メーラーを作ってる人が集まってるスレはありますか? ものすごく基本的な質問かもしれません。
本物のサーバで実験したいのですが
PHPが使えるレンタルサーバで安いところはどこですか?
将来的にはなんらかの形でネット商売するかもしれません。 「PHPが使えるレンタルサーバで安いところ」で検索するだけなのにマジで商売するの? まず目の前にあるPCに仮想環境を入れて
適当なLinuxをインストールしてサーバーにしてみ
それなら好き勝手にいじれるし誰にも迷惑かけないしタダだ
そっから始めてみたらどう? CentOS6 + Remi php 5.6 で動いているphpは
CentOS7 + Remi php 5.6 でも動くのでしょうか?
DBはOSのリポジトリに登録されているmysqlを使います。 プラットフォームによっては使えない機能や関数もあるけど
使う(必要な)パッケージが揃ってればOSによる差はだいたい設定でどうにかなる
意図的にプログラム側でOSに依存するコードやOSを制限するコード書いてなければ
CentOSのバージョンアップぐらいならそのまま使えるんじゃないの php内でexecを使って外部コマンドを実行させたいです
ローカルでは成功しますが、
webブラウザだとexecでエラー126(コマンド実行不可能)が返ってきます
やはりサーバー側の問題なのでしょうか?
Xサーバーを使っているんですが、どこをいじればいいのか分からなくて・・ >>491
せめてなにを実行してるくらい書かないと誰にも伝わらんぞ
パーミッション関係だと思うけども >>492
exeファイルを実行しています
パーミッションを疑って、Xサーバー側にアップしたものを全部777に書き換えたんですが動きませんでした >>493
exeファイルって何?サーバーの既存のコマンド? Xサーバって X window のじゃなくてレンタルサーバのことなのか。
それは置いといて、exec エラー126 で検索すると答えっぽい情報があるよ。
実行ファイル名をフルパスで書けばいいとか。
試してないけど。 XサーバーってUnix環境だと思うから、その環境で動かせるって事がまず必要だよ
もしかしてWindowsで動作するファイルをアップロードしてない? >>494
いえ個人が作ったexeファイルです
>>495
それも
echo __FILE__ ;
でフルパス確認して、フルパス表記で実行したんですがエラー126のままで・・・
フルパスって
exec ("/home/hogehoge/xxxxx.com/public_html/hogehoge2/xxx.exe", $output, $error);
var_dump($output);
var_dump($error);
こういう表記でいいんですよね? >>496
してました・・
フリーの実行プログラムを使ってるのですが、
一応Unix用のファイルも配布元が配布していて
そっちを使ってもエラー126になります・・・ >>498
ユーザーがアップロードした実行プログラムは動かせないと思う
phpやperlのスクリプトなら動作するようなので
そういうものを用意するしかないと思う 皆さんありがとうございます
根本的に無理ぽな感じですね
一人で煮詰まっていましたが、いろいろ指摘をもらってまた頑張ろうと思います 一般的に、鯖側でexec可能になると悪意のないプログラムでもミスで鯖全体を殺してしまうリスクがあるので
鯖屋ではexecは認められない
はずよ
今時は知らんけど 最後に
Unixで実行可能なファイルで、フルパスで、パーミッションの実行権限付与したら
いけました!
4日間悩んでたのでとても嬉しいです
どうもありがとうございました!!
>>502
複雑な数値計算をするプログラムです
>>503
そうなんですね今後使えなくなったら困るな〜 >>504
xserverでは一応、負荷かかったら制限するかもと書いてるので
その辺注意しとけば大丈夫そう ど素人がよくそう言ってるの聞くけどプログラミング言語だよ って玄人気取った素人が言ってるけど実際プログラミング言語だよ ランク2多相もGADTもない言語はプログラミング言語じゃない、ど素人向け 煽りが低レベルすぎて
HTMLがプログラム言語じゃないとか言ってるやつと同レベルだな
俺の考えたプログラム言語の定義なんてどうでもいいっす いやそんなのよりも、PHPなんてプログラミング言語じゃないって言ってるありがちな初級者と同レベルの煽りなんだと思うけど HTMLはプログラミング言語ではないけどPHPはプログラミング言語です 重要なのはそこじゃない
ドヤ顔でしょうもない主張するところ >>513、>>515
プログラム言語には変数という概念が必要。
この定義に従うと、PHPはプログラム言語だが、HTMLはプログラム言語ではなくマークアップ言語。 HTMLはWEB屋がプログラマーを自称するための鉄板ネタやぞ phpできない俺からすれば、if使えてる時点で立派なプログラム言語だと思うけどなぁ。 >>519
HTMLというよりJS(中身はjqueryみたいなのを使ったコピペ)じゃなくて? HTMLはチューリング完全じゃないからプログラミング言語じゃないな
HTML+CSSはチューリング完全だとか プログラミングのために作られてればルログラミング言語だよ プログラミングのために作られてればエログラミング言語だよ 初学者です
たとえば「ブログ」ページの「php」カテゴリーの「2」ページ目を表示したい場合、
URL(略~index.php? content=blog &category=php &page=2)
のように、GETメソッドでリンクから送った変数を取得していく方法でよいのでしょうか?
一応表示は出来るのですが、条件をつけるたびにどんどんURLが長くなっていくのが気になって
何か他にもっとスマートな方法があったりします……? クエリじゃなくてパス(例: /blog/php/2)にすればいいんじゃない
あと普通はblogは独立したアプリになると思うから、/index.php?content=blog よりは /blog.php or /blog/index.php の方が自然 ありがとうございます
むむむ、WordPress的にコンテンツブロックを入れ替えられるようにするべきなのかと思ったのですが、
やっぱりblog.phpで作る方が自然なんですね
実は独立したアプリという意味がよく分かっていないので、調べてみます >>526
googleさんdisってんですか?
content=blogをAとして
category=phpをBとして
page=2をCとすれば
ABCで表現できる 絶対にやるなと書いてあったのですが
unset関数でグローバル変数のSESSION自体を消してしまうとどうなるんですか?unset($_SESSION←こんな感じで
そのサーバー上では二度とセッションを使えなくなるとか?取り返しのつかないことになるのですか? >>530
少なくとも自分の環境じゃなにもおきない
$_SESSION自体をunsetしたあとも普通に登録できるし
別セッションで変数登録したあとunsetしても別セッションには影響ないし
最悪おかしくなってもサーバ再起動すれば問題ないだろう
まあやるなって言われてることはやらないほうがいいんじゃね
ソースコード読めば何が問題なのかわかるかもしれんが大変だしね >>530
unset($_SESSION)とか全部消そうとするとセッション変数自体が消えて使えなくなるからダメで unset($_SESSION['hope'])とかやるのはok
セッション全部消すならsession_destroyを使う
ログオフする処理に使っているよ >>532
>>533
ありがとうございました
何かあったら対処できないと思うので使わないようにします(^^; PHP7で脆弱性見つかる
7.1.32よりも前
7.2.22よりも前
7.3.9よりも前
それぞれアップデートしてくれって javascriptの力を借りずに非同期でサーバーサイドに処理投げてサクサク動かすことは可能ですか? >>536
フレーム使ってやる感じになるのかな?
ajaxなんてのが確立されてなかった頃に似たようなことをフレーム使ってやったことがあるけど、javascriptは使った。 それに近い考えでサーバーサイドレンダリングってのがある
流行るかどうかは不明 あー質問の意味を取り違えてた
今ブラウザ上で行ってる処理をサーバサイドでやらせるってことか。
例えばオセロのコンピュータ側の処理をブラウザ上のJSじゃなくてサーバサイドでやるみたいな? そもそも非同期処理するのにJavaScriptが必要じゃね laravelとDBが分かれてる時ってどうやってアクセスしてるの?URL設定なんかあって接続してるのか? Ruby on Rails のデータベース設定ファイルには、host という項目があって、そこでホスト名を指定する
host: localhost $name="山田";
変数$nameに山田と入れ
PDOでデーターベースに接続し
dbh->query('SELECT * FROM table名 WHERE name="$name"');
このようなSQL文を書いたところ変数の$nameがそのまま文字列として扱われて何度やってもデータを取り出せなかったので、
なんとなくダブルクオテーションとシングルクオテーションを入れ替えて
dbh->query("SELECT * FROM table名 WHERE name='$name'");
このようにしたところ上手くいったのですがどういう事なのか分からず、この現象を調べるのに、どう検索していいのか分からなかったので質問させてください
本にはコードを書くときはシングルでもダブルでも好きな方を使ってもいいと書いてあったのですが
SQL文の中では何か決まりがあるのでしょうか?
よろしくお願いします PHPとSQLが混ざってるからごっちゃなんだろう
どっちでもいいってのはSQLの方に対して言ってるんでしょ
変数展開後に
WHERE name='山田'
WHERE name="山田"
となってる状態のことをどっちでもいいって言ってるだけだと思う
んでPHPの変数が展開されるのはダブルのほう
echo "$name"; //変数が展開されるので山田が表示される
echo '$name'; //変数は展開されないので$nameが表示される
シングルで同じことをする場合
"略 WHERE name='" . $name . "'";
のように一回抜けて$nameを連結しないといけない
だいたいPHPの本の最初のほうに書いてることだと思うがね
忘れちまったのかい ↑訂正
"略 WHERE name='" . $name . "'";
↓
'略 WHERE name="' . $name . '"';
ね 文字列に変数を展開や連結してqueryはSQLインジェクションのおそれもあるのでprepareとexecute使え
$sth = $dbh->prepare('SELECT * FROM table WHERE name=:name');
$sth->execute([':name' => $name]); それはたぶん5ページぐらいあとに書いてると思うからあえて言わんかったけど >>547
ありがとうございました。
やはり持ってる本には説明がないので別の本を買いました
こんな重要な事が書いてないとは
>>549
了解です
ありがとうございました。 親クラスのメソッド内で、protectedコンストラクタを持つサブクラスを生成する場合、
new static()ではなく、クラス名を直接指定してnew SubClass()でも生成出来るのは正常な仕様ですか?
この辺調べても、なかなか出てこないので・・ 素朴な疑問、PHPファイルをダウンロードしてきて、コピペでサーバーディレクトリに貼り付けると500エラーになるのってどういう原理?
仮想サーバーで動かしてる方にコピペは動くんだが、ネットのサーバーってFTPとか挟まないともしかしてアップロード出来ない仕組み?
レンタルサーバーで借りてる方はFTP通してアップロードしてて、そんな事起きた事ないから分からん >>554
.htaccess
が怪しそう。それぞれ、どうなってますか? >>555-557
意外と心当たりあるもんだな
改行コードは盲点だったわ
そんな事あるのか >>558
viが使えるならそれでソースを開く
行末に ^M って出るかも
DOSの改行はCRLFだが
Unix系はLFだけでいい
取り除きたいなら開いているvi上で
:%s/^M//
と打ち、リターンキー ちょっと不親切だったな
^Mは制御文字なので、CTRL+Vと打ってから続けてCTRL+Mと入力
:%s/^M$//
念のため、$も入れておこう それは 行頭のMだけを削除するという意味?
改行コードが違う時ってどんなふうにviで見えるんだろう 掲示板だと区別付かないんだけど
^Mで一文字の制御文字を意味する
vi(vim)の画面で見るとカラー表示するので区別できる
設定次第だけども 改行コードでエラーになるのか
どっちでもエラーに遭遇したことなかったから勉強になった・・・ような
どうせ忘れてしまう可能性が高杉 なんでだれも答えてくれないんですか!プンプン!
もういいです自分で調べます! オレンジクインという葉が黄色い白菜は緑黄色野菜になるのでしょうか? PHPを勉強しますが、いわゆる駄目なコード(メンテ不能とか他人が読めないとか)を書かないようにするための方法がまとめられた書籍とかWebサイトってありますか?
ググって見ましたが、Githubの他人のコードを読むとかとにかくググるとかで、お手本が一箇所にまとめてあるような事例が見つかりません
そもそもプログラミング初心者なのでどういうコードが良くて駄目なのか根拠が無いと理解できないので、Webサイトで調べるのはちょっとハードル高いです 最初から完璧を目指してると前に進まない上に身にも付かないんで
気にせずガンガン組んで経験値上げた方がいいよ
経験値上げる=ダメコードが分かってくる 読みやすいコード手法やアルゴリズムを勉強したいなら、
もっとシンプルな、例えばC言語や、Javaで勉強しtが方が良いと思う
PHPはどちらかと言うと実用本位で動けば何でもありの書き方してしまうから
人によって書き方も違うし、手本にして学ぶというのには向かない気がする >>567
初心者にあれこれ言っても仕方ないと思うので
Beauty Is in Simplicity code
という言葉を送る
日本語訳は「美はシンプルさに宿る」や「プログラマが知るべき97のこと」でググるといい >>567
他人なんて気にするな。
一年後の自分が読んで理解できるコードを書けば良い。 >>568-573
初心者のうちから変な癖をつけないようにしたと思いましたが
あれこれ手を広げないほうがいいかなとも思っていました
PHP自体が可読性より生産性を重視してるのなら
初心者のうちは経験値を積んで生産性をあげて
次のステップとしてリーダブルコードで読みやすさなどを学ぶことにします
みなさん回答ありがとうございました 実際に動いているPHPって
HTMLのソースみたいにソースコードを見ることは、できないのですか? PHPのソースは見れるかと聞いておるのだ。
誰か分かる者はいないのか?
この馬鹿モンが! 厳密に言えば見れるよ、ハック的な手段で
たまにソースコード流出とかって騒ぎになってるじゃん、あれやれば見れる
頑張って勉強しろ 念のため書いておくけど、
サイト側の設定ミスだとしても、
サイト側が公開を意図していないものの取得は
不正アクセスとなります 初心者です。
PHP7.2にてfile_get_contentsにてHTMLを
全取得するテストをしているのですが、
youtube、yahoo.co.jpのトップページは
全取得できますが、
Tver.jpなどの一部サイトでは、HTMLの一部が取得できないのですが、
この違いが何なのか分からず。。
コンテキストオプションはchromeのデベロッパーツールと同内容をいずれも使用しています。
一部しか取得できないだけで、errorが返ってきているわけではありません。
このようなケースで想定される原因は何か、
お教え下さい。 その関数フロントで生成されるコードは取得できなかった筈なんでそれじゃね
仮想端末挟んで生成してもらってからソース取得の処理作るかで悩んだ覚えある
結局pythonとかJavaScriptにクローラー向きのAPI一杯あるからそっちで操作した方がラクって結論に落ち着いたけど 解決したから原因までは特定しなかったけど
fsockopenだとうまくいくけど
file_get_contentsじゃうまくいかない
ということはあったな
同じcontext使ってるんだけどね
cURL使うと多分うまくいくよ >>581,582
回答ありがとうございます。
なるほど、動的なコンテンツはこの関数では取得できないのですね。もう少し構造について調べてみます。
curlや他の言語も検討してみます。 例えば、5ch みたいに最初に、空のHTML を送ってきてから、
その後、Ajax で内容をサーバーから取得するようなページでは、
普通のクローラーでは、確実に取得できない
そういう場合は、Ruby などで、Selenium WebDriver を使って、
人がやるのと同じように、ブラウザを操作すれば取得できる JS挟んだあとのコードがほしいって話なのか
ソースの表示のソースが取れればいいものかと
そりゃ普通にやってちゃ無理だわな まぁ今どきPHPでスクレイピングなんてやらないしな
Python使えPython だからどうした
そもそも向いてねンだから無理矢理処理作ったってしゃーねーだろ
何でもかんでも手作業で作ってたらキリねーぞラクな方行けラクな方 pythonはスクレイピングしやすいの?
ちょっと興味出てきた python自体がjavascript動かしてスクレイピングできるわけじゃないよ
たいていwebdriverでheadless chrome動かしてそれを取るだけ
phpにもwebdriverはあるので同様のことはできる >>589
Python Seleniumでググってみ
すげぇ簡単だぞ
原理的には>>591の書いてる通りだが手軽さはPHPの比じゃない
>>588
だよな
言語なんか手段にすぎないのだから目的に応じて生産性の高い手段を選べってことだ
1つの言語に齧りついてるのは能無しの証拠 >>592
能無しっていうか
まぁこだわりがあるなら別にそれでもいいとは思うよ
内部動作のよく分からん機械に依存するのが不安だって気持ちも分かるし
彫刻刀一本であらゆるものを作りたいって人を否定する気は無い
電ノコやドリルが入った工具箱が横に置いてあるなら俺はそっち使うけど phpStormでアロー演算子使って無名関数宣言すると警告出るのどうしてる? 古い環境から新しい環境に、古いプログラムを移行したいのですが、
古い環境でphpinfoでtimezoneがAsia/Tokyoになっているのに
php.iniや、php.d/*にはその項目がありません。
# php -i | grep timezone
Default timezone => Asia/Tokyo
date.timezone => no value => no value
# grep Tokyo /etc/php.ini
#
# grep Tokyo /etc/php.d/*
#
あと、ログにエラーが出ないので調べると
# php -i | grep error_report
error_reporting => 0 => 0
# grep error_report /etc/php.ini
error_reporting = E_ALL & E_STRICT
と矛盾した感じになっていますが、どこにその設定が書かれているか探す方法はあるのでしょうか? >>596
せめて古い環境、新しい環境のバージョンくらいは教えてくれないと 申し訳無いです。
CentOS5 の PHP 5.1.6 (cli)です。
新しい環境はCentoOS7のbaseにある5.4にて動くか試しているのですが、たくさんnoticeやwarningが出ていますが、
とりあえずこの古い環境でTokyoがどこから来ているか不思議な感じです。 >>598
/etc/php.iniの870行目辺りに
date.timezone がコメントになって書かれてない?
そこを編集して設定すれば良いと思う
あやふやなので間違ってたらごめん >>600は、CentoOS7のPH5.4での話ね >>599
なんと環境変数から取っていたのですか・・・ありがとうございます。
5.1.6@CentOS5で
# grep Tokyo /etc/*/*
/etc/sysconfig/clock:ZONE="Asia/Tokyo"
となるとここから取っていたことになりそうです。
つまりは、この古い環境を作った人は、timezoneの項目をコメントアウトして編集していなかったのですね。
あと、ここがわからないのですが、
5.1.6における php.iniのerror_reporting のデフォルト値は コメントアウトして
error_reporting = E_ALL & E_STRICT とあるのですが、
あるプログラムで、新環境5.4では出てくるPHP Notice: Undefined variable:が、この5.1.6で出ないのは
# php -i | grep error_report
error_reporting => 0 => 0
この「0」が効いているからでしょうか? php.iniの設定がどこかで無効に上書きされていると考えればいいのでしょうか?
>>600-601
はい、新しい環境ではphp.iniに記載します date()よりgmdate()+9*60*60の方が速い JavaScript でも、サーバー側のNode.js では、UTC。
一方、クライアント側のブラウザでは、Local Time
たぶん、Ruby, PHP もサーバー側だから、UTC にしたいのだろう >>602
>この「0」が効いているからでしょうか? php.iniの設定がどこかで無効に上書きされていると考えればいいのでしょうか?
デフォルトはNULLなのでどっかで設定してるんじゃないのかな
$ php -i | grep '¥.ini'
で他に読み込んでる設定がないか確認するといいと思う >>605
/etc/php.ini, /etc/php.d/*.iniが対象でしたが、
php.iniのerror_reporting = E_ALL & E_STRICTだけでした。
不思議な感じですが新しい環境へ移していこうと思います。 E_ALL & E_STRICT
って設定懐かしいな。何年前のPHPだw 74のpreloadとffiめっちゃいいな。
いいんだけど、ffi現場で使ってる人いる? 現場投入はまだだな
Preloadingは素敵すぎるが、
Foreign Function InterfaceってPHPに要るかね? FFIのRFC調べたら
賛成24の反対15で切り可決か
これ昔PECLにあったやつだよな
まぁそうだろうなw >>609
ffi、とても便利だけど、phpの現場でなんでphpかって、その言語で書く事が求められているからであってffi使うならphp使わないよねーっていうそもそも論もあると思う
preloadはプロセス再起動しないといけないからコンテナ向きだよね <button class="bubbly-button">
<a href="http://coonelnel.net/" target="_blank" rel="nofollow noopener">素人</a>
</a>に exec系関数にあわせて外部プログラム作ってたから
ffiはだいぶ楽が出来るようになるな
まあ肝心のCを知らないんだけどw そりゃ、Ruby だって、C をほとんど知らない人が、FFI を使っているのは、PHP と同じw >>613
これをwebページのどこ家に埋め込みたいんだけど、どのファイルに書けばいいのかってこと? >>616
612のHTMLに設置してURLつきボタンのクリック数をカウントして ランキング機能を実装する目的なのですが PHPを612のHTMLの何処に設置してしていいか分からず困ってます… >>611
> っていうそもそも論もあると思う
そそ
これRFCで賛成24の反対15だから、今のRFCルール(要2/3の賛成)だと否決されてた代物だ
https://externals.io/message/103613
で議論されてるが、俺はJefferson Gonzalezの意見に賛成だな
今更いっても仕方ないけどw >>621
phpが動くのとサーバー借りてるのは同義ではないぞよ。
sshはできるの? >>622
俺も同意。
そもそもffi書ける技術スタックのエンジニア集められてるならphpじゃなくていいよねって Jefferson Gonzalezの意見って明らかにFFI導入に賛成なんだけど >>625
c書けるスキルがあるのにphpの現場にいる人間が幸せになるよってとこなのかな >>626
書くのが必ずしも許されるわけではないから難しいよね。
俺はライブラリ系は全部書き直した。
これじゃメンテナンスできないですーっていう方々を炙り出すために exec関数でサーバのコマンドを実行できますが、
ソフトウェアをインストールするときなどに表示される
「キーボードのyを押してインストールを進める」
みたいな処理もexecで行うことができるのでしょうか?
もしできる場合、どのように書けばいいか教えて下さい >>629
バッチで動かすことを想定しているプログラムには
例えば起動オプションに "-y" が用意されてあって
キーボード応答全てにyが打たれたとして動作するものもある
動かしたいプログラム次第だと思うが
こういうものなら動かせるかもしれない
そうで無い場合は、プログラムからの応答を判断しながら
動かさないと、想定出来ない問題が起きかねないのでは >>629
yesかecho yesをpipeで渡す 漏れは、自分のPC で、
Windows10, WSL, Ubuntu16.04 で、全パッケージの更新をするのに、
Ruby で、sudo のパスワードの入力とか、
apt-get の-y で、yes の入力もやってる
#!/usr/bin/ruby
# frozen_string_literal: true
# 全パッケージの更新
# sudo のパスワードを自動入力する
# echo <your_password> | sudo -S <your_command>
puts `echo パスワード | sudo -S apt-get update`
puts `sudo apt-get upgrade -yV` >>630-633
適当なコマンドですが、
exec("create database -y hogehoge");
みたいに-yをつけると
「hogehogeデータベースを絶対作成する」みたいな事ができるのでしょうか?
>>632さんが書いてるのは
exec("echo yes");
ということなのでしょうか? yesっていうコマンドがあるんだよ
exec('yes | create database hogehoge');
-yオプション的なのををサポートしてるかどうかはそのコマンドのマニュアル読んで すみません。公式のマニュアルを見てみたのですが、
yesに関しての記述が見当たらなかったんです。
>>635のように書くのだと理解します。ありがとうございました。 >>637
エイプリルフールかと思ったら本当にあってビビった
コマンド打ってウイルスに感染したような挙動になって焦ったわ PHPの環境構築ってWindowsの場合どの方法が主流なのかね
検索するとXAMPPの記事ばかり出てくるけど手軽な一方環境を汚すんで微妙な気がするんだが PHPの勉強が目的ならXAMPPやMANPでいいと思うけどな
仮想環境やらの設定や不具合で時間食ってたら元も子もない 初心者にいきなり全CUI操作を強いるのはどうかと思う
VirtualBoxあたりでUbuntu入れて環境構築させればいいんじゃない PHPを使ったサーバーサイドってどんなことしてるの?
ここはSQLの内部データ表示したいからhtmlの中にdivタグ付けて関数呼び出してってそんな感じでやってるの? >>645
別にPHPに限ったことじゃないけどサーバサイドでやることはだいたいそんな感じ やっぱそうなんか、SQLのログイン設定とかばれるからそうやって防いだり動的処理するんか 質問です。
環境はMacでXAMPPを使っています。
エラーが出てググったところgdの「JPG Support」がないからだというところまでわかりました。
ですがサポートのさせ方がわかりません。
どうするといいのでしょうか? php7環境でpear mailを練習していたところ、
Parse error: syntax error, unexpected 'new' (T_NEW) in /usr/share/pear/Mail/smtp.php on line 349
が出るので調べてみると非対応のようですが、
何に置き換えるのが一般的なのでしょうか?
mail、mb_send_mailでも良いのでしょうか?
これらがあるのにpear mailが利用されていたのでしょうか? SMTP.phpの該当箇所349行目を見ると
$this->_smtp = &new Net_SMTP($this->host,
とあったので、&new を new に置き換えると
エラーは出なくなりましたが。
さすがにソースを変えるのは良くないと思いますが、
php7用のpear mailがremiから提供されているのでしょうか?
他の方法を検討するべきでしょうか? >>649
macは知らんけど一般的にはphp.iniでgdのextensionを有効にするだけでいい
ていうか自己判断してるけどエラー内容を書かないことには答えようがないな
>>651
pearとかPHP7時代にそぐわないレガシーだよ
PHPMailerでも使えばいいんじゃない? >>652
エラーは
Fatal error: Uncaught Error: Call to undefined function imagecreatefromjpeg() in /Applications/XAMPP/xamppfiles/htdocs/php/sample2.php:5 Stack trace: #0 {main} thrown
です。
ググったところgdの「JPG Support」がないとのことで、phpinfoで調べたところ実際にありませんでした。
extension=php_gd2.dllのコメント化も解除し、再起動しましたがまだエラーになります。 https://ideone.com/VwTTUI
こういう書き方って良くないん?こういう手があったかって思ったが見た目が悪いことに気付いた >>653
XAMPP7.4x使ってる?
確かにPHP7.4(XAMPP7.4x)でGDのJPEG Supportがないって報告出てるね
7.4からGDのconfigureオプションが変更されてるようだけど
旧オプションのままコンパイルしようとして無視されてるのかも
そのうち対応してくれると思うけど
自力でどうにかできないならPHP7.3(xampp7.3x)以下を使ってみると解決するかも?
>>654
https://ideone.com/ZwhEN8
まあフレームワーク使いましょう >>655
やっぱそれが正しい書き方なんだな、悩んでたがスッキリしたわ >>655
データ移して、アンインストールして7.3.13にダウングレードしたところありました。
ありがとうございます。 >>655
foreach のブロックをカッコじゃなく endforeach にするのはなんで?
カッコの対応を取ってくれるテキストエディタは多いのにそういうアシストも受けられなくなるし、タイプ量も増えるし、
あんまりやらんとは思うがループを foreach から for に変更するなんてのも面倒だし、何がよくてそうするのかさっぱり分からん。 >>659
テンプレートエンジンだとだいたいそういう風に書くと思うけど >>660
理由になってなくね?
他のテンプテートエンジンと雰囲気を合わせると何かいいことある? そんな下らないとこで噛みつかれるとは思いもしないんで
気の利く答えなんて持ち合わせてないでw
自分にあったスタイルで「好きにしろ」でいいんじゃないの別に あぁ、ごめん
そういうスタイルで書いてるのをしばしば見るので、どんなメリットがあってそうしてるのか気になっただけだ。
単に好みの問題なのね。 括弧だとわかりにくいから。
htmlが混じるとインデントもややこしくなるし。 個人的にはhtmlのタグのインテリセンスがかかるからスペルミス閉じミスが起きないから良いなって感じかな 配列なら、$his より $histories の方がしっくりくる
変に略されると読みづらい 新しいサーバへの移行をしているのですが、
とりあえず動かすと「Parse error: Invalid numeric literal 」が出ます。
覚え立ての開発環境ではこんな感じです。
https://i.imgur.com/Jmw3irM.png
配列を空にして、配列が空でないならば、それぞれの「時」に対して「true, false」を入れた連想配列を作って、
現在時の「時」を$hourに入れて、それを比較して連想配列の「時」をキーにして「true」か「false」どちらかを返すということだと思いますが、
Invalid numeric literalは「使えない数字」と考えて良いのでしょうか?
php5では使えていたとは思いますが、php7では厳しくなったということでしょうか?
vscodeを覚えて時を止めてデバッグができる時に感動しました。
変数がコマ送りに変化していくことが見えるのは凄いです。 0から始まってるのは8進数なのでphp7ではエラー
php5以下で08は0と解釈されてたはず ありとうございます。
シングルクォートを使ってキーを文字列として配列にしました。
phpって曖昧とは聞きますが、08 にだけ8進数として反応するのですね。 そんなばかなー
10進数で言う0から10までを8進数で書いてみるといい(手書きでいい >>670
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12
ですよね。
シングルクォートで文字列にしてエラーは出なくなりました。
この関数は昔誰かが書いたものですが、時によってフラグを立てる方法としてはまだ改良の余地があるのでしょうか。 08と09は8進表記であり得ないからInvalid numeric literal
素直に頭文字0を削除すればいいのに >>671
そもそもなんだけど、関数の引数で $time_array が渡されたとき、その添字はどんな形式になってるの?
$hour は文字列なんだから、元々配列の添字は文字列であるべきだったように見えるけど。
それはそれとして、小さなフラグテーブルなら文字列で書く方法もあるかもね。
$timetbl = '000000000011111111111100';
return $timetbl[(int)$hour] === '1';
みたいな。
その例ではインタフェースを変更しないといけなくなるから適用しづらいだろうけど。 >>671
do_check_exec_time関数だけどさ
返却値が不規則ならともかく、10〜21の範囲ならtrue、それ以外はfalseで駄目なの?
引数範囲もチェックしたいなら、先頭行で行えば良いと思う レスを書くと forbiddenになったので、レスにNGワードが含まれているようです。
何がダメなんだろう・・・
レスは返したかったので画像にしました
https://i.imgur.com/XjOXs1g.jpg PHPはJavaScriptなんかと違って文字連結とは演算子が別れてるから
+演算子は加算専用で数字として扱えるというか数値として扱うというのが正しい
>>667のコード見た感想としてはそこで初期値設定するか?って思ったわ
渡すべき$time_arrayの初期値としてならともかく
ちゃんとarrayのみ渡されるよう想定したほうがいいね ちなみに勘違いしてなければいいけど
date関数のreturn値は文字列なんで08は正確には"08"
8進数でも他の数値的な何者かではなくただの文字列 質問があります。もしわかる方がいましたらご教授頂きたいです。
htmlを読み込んでbodyタグの中のaタグに書かれている内容を表示させようとしています。
(このサイトを参考:https://blog.katty.in/1400)
$url = 'https://haruoto.com/?page_id=11';
$html = file_get_contents($url);
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS');
$domDocument = new DOMDocument();
$domDocument->loadHTML($html);
$xmlString = $domDocument->saveXML();
$xmlObject = simplexml_load_string($xmlString);
$array = json_decode(json_encode($xmlObject), true);
echo $array['body']['a']; //「コンテンツへスキップ」と表示される
上記のコードは正しく動作するのですが、URLを「https://haruoto.com/?reply=407」に変更すると正しく動作しません。
何が原因なんでしょうか? HTMLの構造が違うんじゃねーの?
FirefoxなどのブラウザでHTMLのソースを見てみたら? ?reply=407の693〜697行目がコメントの中に--を含む不正な構造なのでsimplexml_load_stringが失敗してるから >>680
ありがとうございます!
そちらのコメント部分を修正したところ正常に動作するようになりました! PHPのDOMload周りは@でエラー無視が一般的だと思う
$domDocument->loadHTML($html);
↓
@$domDocument->loadHTML($html);
>>678も自分の環境じゃWarning出まくるけどこれで結果を得られるし
?reply=407へURL書き換えたあともちゃんと結果を得られる
自分はPHPのDOM周りはいまいちなんでJavaScript側でやるかな 自分のサイトを作ることにしました。
目的は主に2つあって、なにか簡単な商売をして副業としてお金をかせぐことと、ブログみたいになにか情報発信しようかと思っています。
PHPも使います。
どこのレンタルサーバを使うのが得策でしょうか?
今後生涯サイトは使おうと思います。 ここはまんさんでもやさしくしてくれるやろか
あのな、画像検索するとある画像が大きさが5504x8256ってなってるんやが開くとちっさいんや大きさが指定してあって。アドレスバーのとこに410x618って書いてあって。しかもこいつ実際は274x410なんやで。
wysiwygとかでダメなんやろかってやってもちっさいんや。大きいのは格納されとるハズなんやろうけど初心者すぎて大きい元画像にたどりつけないんやで。
やさしい人手取り足取り教えてほしいんやでどなたか どうですかね?
いまの時代、無料のレンタルサーバでPHP/SQLも使えるところはあるのでしょうか? >>684
自分のサイトの話じゃなくて、他人のサイトに置いてある画像の元ファイルにどうしたらたどりつけるかって話か
ここは下らねぇ質問のスレだが自分のサイト以外の問題を持ち掛けられてもしょうもないと思います >>683
スレチ
レン鯖スレへ
「いまの時代、”無料のレンタルサーバでPHP/SQLも使えるところ”はあるのでしょうか?」
ダブルクォートのワードそのまんまで検索すればいいのに
>>684
スレチ
google画像検索ならimagesizeのオプション追加すればある程度絞り込めても万能じゃない
サイトまでたどり着けてるならurlを想像してアタックする mysql_real_escape_string($string)
を多用している手続き型のphp5環境からphp7へ移行をしていて、
mysqli_real_escape_string($link, $string)
への修正しているのですが、
htmlspecialcharsのように、エスケープ目的で多用しているコードなのですが、
データベースのリンクも引数の強制になったようですが、リンクを使うのはどういう理由なのでしょうか?
また使いどころとしては、多用せずsqlクエリを使う前に1回で済ますという感じでしょうか? >リンクを使うのはどういう理由なのでしょうか?
マニュアルに書いてるけど、
「接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする」から。
接続が複数あって文字セットが異なる場合なんかを考慮してるのでしょう。
>多用せずsqlクエリを使う前に1回で済ますという感じでしょうか?
プリペアドステートメントで行うのが普通。
mysqliみたいなベンダー固有関数は汎用性がないのであまり使われないよ。
mysqlしか使わないならいいけど、本気で修正するなら手間も同じだしPDOでやったほうがいいと思う。 >>690の答えはちょっと答えになってなかったから補足しとく
・mysql関数時代も接続(リンク)は必要っちゃ必要だったけど、省略可能な第二引数だった。
省略した場合は、直近に使った接続になる。
・mysqli関数は省略不可能な第一引数になった。(引数の順番が変わった)
mysql関数は、接続を明示しなくていいので、
接続が複数ある場合、意図しないDBを操作するミスがおきる可能性がある。
エスケープする場合も同様、意図しないエスケープ結果になってしまう恐れがある。
そういうミスを減らすためにも、接続を明示しないといけないmysqli関数ってことなんじゃないかな多分。 今まで1つの接続しかしたことが無かったので複数を接続するって考えもしなかったです。
たしかにそれだと文字コードが違う場合も想定すると、明示したほうが良いですよね。
古すぎてpdoに書き直すのは難しいので、とりあえず地味に書き換えていきます。
しかしmysqli_real_escape_stringや、mysqli_queryとか
引数の強制が増えたり、引数が入れ替わったり、pdoを使っていない古いコードは修正に振り回されることになりますよね。
プリペアドステートメントは「?」とかコードの行数が一気に増えて難しそうなのですが、
クエリに直接変数を書いて、real_escapeすればと思ってしまうのですがやはりデメリットがあるのでしょうか。
新規で練習するときはプリペアドステートメントを使おうと思っています。 >>692
具体的なコードは書かないけど、
real_escape_stringでは攻撃対策としては不十分だから、プリペアドステートメントは必須。
(PDO使う場合、PDO::ATTR_EMULATE_PREPARESが1で、PDO側でエミュレートする場合、攻撃が成立する場合があるのは注意)
型を調べたり、想定してるフォーマットに沿うものか検証(バリデーション)して、
受け渡された変数が安全なデータであることが保証されてればいいけど、それこそコード長くなるし、
プリペアドステートメントでやったほうが、確実だし簡単だと思う。 >>692
あちこちに適用するライブラリでもなくいろんなDBに対応するわけでもないんだろうから、無理して PDO に置き換える必要は無いんじゃね。
プリペアドステートメントのいいところはプレースホルダが使えることもあるけど、プリペア済みのオブジェクトを何度も使い回すことによってSQLのパースを省略してパフォーマンスを上げられるって利点がある。
でも使い回しなんてせず同じSQLでも使う度にプリペアするようなコードが多いだろうし、バッチならともかくwebの1リクエストでどんだけ使い回せるの?って話もある。
それに加えて LIKE とか可変個の IN とか面倒だから、プリペアドステートメントに拘る必要は無いというのが俺の考えだな。
新規じゃないなら特に。 pdoに置き換えは無理してってほど大袈裟なものじゃないでしょ
手続きが用意されてないからオブジェクトになるけど
オブジェクト型のmysqliと比較してコードは似たりよったりだ
新規はpdoにしたほうがいい どこかの機会で書き替えて行けば良いよ
将来はサポートされなくなる訳だし クラス内のメソッドについて、
似たような処理を行うもの(少し変更している)のがあるとします。
たとえば「redirect」というメソッドだったとして、
少し変更したのを「_redirect」みたいにして、親クラスに用意しているのですが
こういう書き方・使い方はまずいでしょうか?
beforeRedirectとかcustomRedirectみたいに変えた方がいいでしょうか? extendsで新しいクラスにすることと比べると
悩みどころですね 将来メンテする人にとって無用な負担をかけない方法を選択しよう
使うユーザーができるだけ負担を感じない道を選んだ方がいい >>697
どう変更してるのかわからないけど、
引数の数や型が違うならオーバーロードにする手もある。
ただしPHPにはない機能なので、可変引数を使ったり工夫が必要になるけど。
あとは柔軟に引数でモード選ぶとか、言ってるように名前変えるとかでいいと思う。 共通部分の処理は親側で全部行うようにして、差分だけを子側に委譲する(abstractメソッド)。 >>693-694
今回は古い部分を直すだけで必死なのでreal_escapeを使いますが、
たしかにプリペアドステートメントが
エスケープも兼ねるので新規では使いたいです。
古いコードなので、闇雲に同じクエリを投げているので、そういう意味ではプリペアドステートメントの利点を受けられるかもしれません >>699-700
できれば他の人が見てもわかる方法にしたいのですが、
親クラス
class Main {
function redirect($url){
header('Location:' . $url);
}
function _redirect($url){
〜$urlになにかする処理〜
$this->redirect($url);
}
}
みたいなことをしていまして、これだとわかりづらいですよね?
※redirectになにかする処理を書くのは別とします。
なので別のメソッド名にした方がいいのかな?と思うものの、
beforeRedirectとかcustomRedirectとかにするのは変かな?
と感じており、質問した次第です。 >>703
API見て使い方が理解出来ん
クラス利用者はredirectと_redirectのどっちをコールする想定なんだ?
あとbeforeRedirectは名前的にイベントハンドラっぽく思える >>705
通常はredirectの方で、変わったことがしたい(ページ推移を分岐させたい等)時は
_redirectの方を使うというイメージです。
そのため、「このリダイレクトは、カスタマイズしたリダイレクトですよ」
ということを説明するためのメソッドであればと思うのですが、
「_redirect」のような名前は、間違いやすいし、
beforeRedirectの場合はイベントハンドラっぽいので、悩んでいる次第です。 すみません、自己レスですがやっぱり変なので
class Main {
function beforeRedirect($url){
〜$urlになにかする処理〜
return $url;
}
function redirect($url){
$url = $this->beforeRedirect($url);
header('Location:' . $url);
}
}
みたいな設計にし直します。 ネーミングの問題だと思うけど、アンダーバーが付いたのは予約語だったりシステムコールに
見えちゃうので、ちゃんと名前付けた方がいいね
個人的には面倒くさかったら拡張した方はすべて〜exで済ませる editURL/editRedirectURLとか
あとはめっちゃ冗長だけどeditURLBeforeRedirectとかな
そもそもredirectと並列に並べるような処理してないんだから同じ動詞が中心になるような命名はダメ formのactionを「action=""」と記述した場合、再帰的に現在のページが呼び出されると
あったのですが、その際は現在のページの記述を全て読み込みなおすってことでしょうか? >>710
ある意味そうだよ。当然、新規にページが読み込まれる。
「再帰的に」っていうのはよくわからないが。 >>710
遷移先のURLが今と同じになるということ。
submitされる内容はその時のformの中身だから、ページの内容を読み込み直すということではない。
よくあるフォームだと、入力、確認、完了画面を順に遷移していくと思うけど、それら全部を同じ myform.php というひとつの URL で対応する感じ。
今どの画面を表示すべきなのかは submitされるパラメータのどれかに仕込むとかして判別できるようにする。
method が get だと URL自体が変化していくから、その手法をやるなら method は必然的に post になる。 >>711-712
即レスどうもです。
動画サイトで勉強してまして、なんでその記述になるのか説明がないので、
>>712さんの説明で理解が深まりました。
遷移先が同じ場合はformのパラメータのみが変化して、ページの記述は読み直さないってこと
なのでしょうか?
下記のようにPOSTされていたら関数を呼び出すという条件式がheadタグより
上に書いてあり、ページの記述を読み直しでもしないと
この条件式の処理が走りようがないのでは?と混乱しております。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uploader->upload();
} GETだとブラウザのキャッシュが使われる可能性もあるが
POSTなら確実に再度リクエストが来る >>713
それは同じURLで get と post の両方に対応してるんだね。
リンク踏んだりURL叩いてページに来たときは get でのアクセスになるから、とりあえず動画閲覧画面でも表示するのでしょう。
でもその画面では動画のアップロードもできるようになってて、post によってアクセスされる場合はアップロードの操作がされたものとして動画を差し換え、改めて閲覧画面を表示するのでしょう。
ページの記述とか何言ってるのかはよくわからないけど、その URL はアクセスされる度に毎回一からページを送り出してるだけだと思うよ。
動画のIDなんかURL自体に含まれてて、閲覧や更新対象を示すキーとして満ち足りてるから、同じURLを使い回すようにしてるんじゃないかな。
ブックマークするときなんかも、リンク踏んで来た場合でもアップロード後でも URL が一緒になるからタイミングを選ばず都合がいいだろうしね。 phpでPixivの画像まとめてDLしたいなと思いついて
https://html-css-javascript.com/demo/pixiv/
これ参考にやってるんだけどうまく行かない
Pixivの画像ってphpじゃDLできないの? phpじゃ厳しいなあ
rubyなら簡単にできるんだけどね >>717
それ少なくともおととしのpixivのUIが糞化する前用のやつだから マジか…
Rubyわかんないからphpでやりたかった
Pixivの画像のURL自体は変わってなかったから下記のURLの画像が保存できる方法知ってたら教えて下さい
https://i.pximg.net/img-original/img/2020/01/28/01/28/46/79136582_p0.png 718にrubyで書いてもらって、PHPに移植すれば良いんでね? ranking TOP10のやつ全部ダウンロードするスクリプト
curl, pup, jqが必要
curl -s 'https://www.pixiv.net/ranking.php' ¥
| pup 'a.work' attr{href} ¥
| head -10 ¥
| sed -E 's/¥/artworks¥/([0-9]+)/¥1/' ¥
| xargs -I {} curl -s https://www.pixiv.net/ajax/illust/{}/pages ¥
| jq '.body[].urls.original' ¥
| xargs -I {} curl -# {} -H 'Referer: https://www.pixiv.net/en/artworks/' -O -w "%{url_effective}¥n" >>724
なぜ?
円マークとバックスラッシュは同じじゃないの?日本語のパソコンだと円マークに表示されるだけで。
この辺の仕組みを「文字コード」とてう言葉を使って竹を割ったようなスッキリ解説できるかた、どうかお願いできませんかね? >>725
円マークとして表示されてる文字の文字コードが
バックスラッシュと同じ0x5Cならいいんだけど
>>723の円マークは0xA5なので別の文字
バックスラッシュと円マークは同じ場合もあれば
違う場合もあるってこと N/97jNZ60 様
ありがとうございます。
ですが、素人に毛が生えた程度の私では難しいようです。(Rubyもスクリプトもできません)
phpで無理そうなら諦めます。 >>728
PHPでもシェルスクリプトより少し面倒なだけで普通にできるよ
処理手順だけ書いておくからPHPでトライしてみて
https://www.pixiv.net/en/artworks/79136582の一連の画像を全部ダウンロードしたい場合
https://www.pixiv.net/ajax/illust/79136582/pagesにアクセスすれば
各サイズのURLのリストがJSON形式で取得できる
取得したURLリスト(JSON)から目的のURLだけ抜き出して
そのURLを一つずつアクセスして画像をファイルに保存すればOK
>>723の後半3行が上の手順に相当する部分 >>728
書いて頂いたスクリプトはPHPではないですがRubyでもないですよ
このスレで解説してもらえるかは分かりませんが
じっくり噛んで飲みこんでいけば消化可能です
がんばれ! >>729の仕様がわかれば根こそぎダウンロード出来るな
適当なsleep値挟まないと岡崎図書館になりそうでおそろしいw >>723
は、Linux コマンド、またはシェルスクリプト
一方、Windows 10 にも、curl が入っている。
コマンドプロンプトで、where curl と打つと、
C:\Windows\System32\curl.exe
このcurl とは別に、PowerShell にもcurl がある
Ruby で、`〜` 内に、コマンドを書いて、呼び出すこともできる。
例えば、curl のヘルプの最初の5行を表示する
puts `curl -help`.lines.first( 5 )
同様に、PHP にも、コマンドを呼び出す記法があるはず。
ダウンロードでは、Linux のcurl, wget は、よく使うコマンド
Windows 10 上で, WSL, Ubuntu 18.04 を使っているなら、
Linux側で、Linuxコマンド・シェルスクリプトを書いて、Windows側のフォルダをいじる事もできる PHPで頼む言われてんのにRuby厨また沸いてんのかw
$api = 'https://www.pixiv.net/ajax/illust/79136582/pages';
$json = json_decode(file_get_contents($api));
$ctx = stream_context_create(['http'=>['header'=>"Referer: {$api}\r\n"]]);
foreach ($json->body as $body) {
$url = $body->urls->original;
$fname = basename($url);
file_put_contents($fname, file_get_contents($url, false, $ctx));
sleep(1);
}
保存先やら上書きやら考慮してないからこのままは使うなよ 昨日Pixivの件で質問した者です。
皆様のおかげでなんとかできました。
ありがとうございます。
ただ、>>735 さんのようにきれいに書けてないので修正しながら使っていきたいです。 Pixivの質問者です。
画像をタイトル名で保存したかったので、下記のようにしました。
$url = "https://www.pixiv.net/artworks/79152593";
$html = file_get_contents($url);
preg_match("/この作品 「(.*)」 は 「/", $html, $titlearr);
echo $title = $titlearr[1];
タイトル以外にも投稿日や閲覧数などが取得できたのですが、カテゴリが上手く取得できません。
なにか良い方法はないでしょうか?
もしくは「https://www.pixiv.net/ajax/illust/79152593/pages」のような画像の情報集のようなものがあるのでしょうか? DOMDocumentで$htmlをロードして
getElementById('meta-preload-data')->getAttribute('content')取って
json_decodeすればあとはapiと同じ様につかえるんじゃね?
文字コードまわりの処理がちょっと面倒だと思うが ありがとうございます。
JSONならなんとかなりそうです。
「/pages」を取るだけだったんですね… >>732
に、API を公開してるって、誰かが書いてる
大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
ちゃんと会社と契約して、API を使ってやるように!
会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
クローラーの開発者は、robots.txtに従うべき!
従わないと訴えてくる。特に、5ch みたいなサイトは
クローラーのテストも、自分のPC 内に、Rubyのサーバーを立てて、
そこにウェブサイトのコピーを作って、それにアクセスしてテストする
本当のサイトに対して、テストしたりしない!
何回もテストしていると、営業妨害になるから!
クローラー開発者の大原則!
1. 会社と契約して、API を使う
2. robots.txtに従う
3. 自分のPC内に、サーバーを立ててテストする
それと書き込むときは、名前欄に、717 と入れてください!
誰が書き込んでいるか、分からないので 一般のブラウザと同程度の頻度でアクセスしている分には
サイト側で区別するのは困難だろうし、
訴えられる事も無いんじゃないかな、知らんけど >>742
>大々的に横断検索のようなスクレイピングしてると、営業妨害で逮捕される!
>会社のrobots.txt で、スクレイピングを禁止している場合は、有罪にされる!
>何回もテストしていると、営業妨害になるから!
すべてデマ
一般論としてデマ書くくらいは別にいいけど
それを元に人を犯罪者扱いするとそれこそ罪になるから気をつけてね 専用ブラウザだろうが一般ブラウザだろうが、使う人間が同じなら同程度のアクセスにしかならんと思う
あと、API使わないWEB通信で専用か一般かを判別するのは無理じゃね?
UAも偽装できるし、そもそも廃止方向だし いたずら電話でも、回数が多いと逮捕される!
一杯逮捕されてるし、有罪にもなってる!
会社は、一般的な用法でアクセスできるようにしてるだけで、
常識内の使い方じゃないと、営業妨害になる
クローラー開発者が、robots.txt に従うのは常識だから、従わないと営業妨害になる。
クローラー開発者はそもそも一般人じゃないし、一般的な使い方じゃない
株取引と同じで、プロの取引だから、守るべきハードルが高い。
これほど専門的な開発者は、素人の一般人が作っていましたという弁明ができない。
専門家として扱われるから >>747
誰にレスしてるのか分からないけど、俺にレスしてるんなら改めて書いとく
俺は良い悪いの話をしていない
API非使用の話
同じ人間がスレ見るような使い方はアクセス頻度も負荷も変わらないだろう
判別するのは技術的に無理じゃねえか
以上
弁明とかそんな次元の話をしているのではないので、そこんとこよろしく robots.txtの記述に従わないと行けない法的根拠はないんだが
あくまでも、マナーやエチケットのレベル 法律では、常識というのが判断基準になる
マナー・エチケットなどは関係ない。
契約していない者同士では、有形力の行使が判断基準
API の契約をした場合は、契約者同士だから、刑事事件にならないけど、
契約をしていない場合は、有形力の行使で判断する
いたずら電話とか、万引き・痴漢・家宅侵入などは、
契約していない者同士での有形力の行使
一般的じゃない使い方は、非常識になる。
プログラミングなど、プロの技術を用いた場合は、一般人と違う扱いになる
一般人が手でクリックした場合と、違う扱いになる
マナー・エチケットも、プロ・素人では、遵守レベルが異なる。
一般人の遵守レベルと、プロの遵守レベルは違う
株取引と同じ。
株はプロの遵守レベルだから、1桁間違って入力しても、勘違いとして撤回できないだろ。
普通の民法なら、錯誤で撤回できるけど
株は一般人の商取引じゃなく、プロの商取引だから、遵守レベルが厳しい それ有名なrubyキチだから相手にするだけ時間の無駄やで pixivとか大きいところならインフラで帯域制御してるだろうから、IP詐称やら多数の接続元やらで大規模にやらない限り、
スクリプトでのDLは気付かないだろうし看過されるだろうけどね
逆に目立てば注意とか何も言われず制限とかされる
まあ、インターネットがある意味良識で成り立ってるところもあるから、あまり変なことはしない方がいいよ
自分のことばかり考えるなってね サイト内検索を設置したいのですがわかりません
どのように作ればよいのでしょうか? サイト内検索は、Google を使えば?
「site:URL 検索したい文字列」だろ
このコントロールを、はめ込めば良いのでは? サイト内のキーワードを検索したいんです
絞り込み検索など 多くのサイトが、Google のコントロールを使っているから、
Googleが配布しているのでは? 平面上に座標の判明している点が数百あるとして、全ての点どうしの距離を
計算時間はかかって構わないのでハングしないように計算したいのですが
PHPではどうやったらいいのでしょうか
普通のPHPプログラムと同じように
点の座標情報をリクエストとして受け取って
全ての計算が終わったらブラウザにレスポンスしたいです 普通に2重for文で愚直に計算すればいいんじゃねーの
数百程度なら一瞬でしょ Ruby なら、標準のwebrick サーバーで、
VSCode の拡張機能、REST Client で、JSON 文字列をPOST すると、同じ配列が返ってくる。
CGI にも出来る
POST http://localhost:8888/ HTTP/1.1
content-type: application/json
[[0,0],[10,20],[10,10]]
以下は、Ruby
require 'webrick'
require 'json'
srv = WEBrick::HTTPServer.new( {
:DocumentRoot => './',
:BindAddress => '127.0.0.1', :Port => 8888 } )
srv.mount_proc( '/' ) do |req, res|
res[ "content-type" ] = "text/plain"
ary = JSON.parse( req.body ) # JSON 文字列から、Ruby のオブジェクトに変換する
# ここで、ary を処理する
result = JSON.generate( ary ) # Ruby のオブジェクトから、JSON 文字列に変換する
res.body = result
end
Signal.trap( :INT ){ srv.shutdown } # Ctrl+C で終了
srv.start >>759
長い計算で問題になるのはタイムアウトと使用人数
色々考慮しないといけないのでケースバイケースになるが
そういう計算はJavaScriptでやったほうがいいと思う
非力な環境考慮やスマホの節電狙ってるならとめはしないが
基本はある程度計算した時点で(タイムアウトする前に)一度レスポンス返して
計算再開するようリクエスト再送して計算終わるまでそれを繰り返すとか
サーバ側でタイムアウトを無効にしてマルチスレッドで計算しながら
Transfer-Encoding: chunked(flush関数)とかでなんかブラウザに送り続けるとかそんなところ
あと設定したことないので確認はしてないがxhr使えばブラウザ側のタイムアウトは無効に出来るはず
大人数で使う&計算が数時間に渡る場合サーバ側タイムアウトを無効にするような計算はしないほうがいい 確かに、計算のタイムアウトなどを考えたら、
AWS Lambda などを使った方がよい >>760
450点あたりで
計算は10万回超えちゃいそうな気がするんですが…
>>762
あざます、そんで説明下手ですみません
アクセス数とか、ユーザビリティ的なことはそれほど考えなくていいんです
説明が難しいんですが、MovableTypeみたいな動き方と言いますか
このプログラムを一度実行することで静的なファイルを生成して
ウェブのユーザにはそのファイルを見てもらうことになるので
なのでとりあえず、10万なら10万回
時間かけていいんで、PHPがハングしないように計算を終えて
その結果が出たら、ブラウザに返したいな、と
昨夜自分で考えて
PHPは1点ずつの計算結果をテキストファイルとして生成して
ブラウザはそのファイルが出来ているか定期的にポーリングする
みたいなことを考えたんですが… それがサーバー上にあって、割と自由にいじれるなら
バッチ処理で結果を出して表示にしたら良いんじゃないかな >>766
点の情報は、ブラウザからJSONかCSVかXLSXかでポストさせるので
実行時点で数が不明ですので、クロンを書くのも難しいかなと
たぶんポストされた座標データ群を基に
foreach($datas as $data){
foreach($datas as $data){
// ここで距離を計算
// 計算済みのものは除外
}
}
みたいになるわけですが、$datasの数が多いと止まってしまうので
非同期でいいので止まらない方法はないものかなと 数百の点同士だから最大1000 x 1000でも100万でしょ
floatだとしても100msもかからないと思うんだけどそれでハングするの?
クライアント側で計算させても一瞬だから
ラウンドトリップさせるのをやめて計算結果だけ非同期で受け取るようにしたほうが
ユーザーにとっても運用してる側にとってもいいと思う >>768
あざます
大丈夫ですかね?100万回
とりあえずストレートにやってみようかなあ… JSON が普通。
非同期処理なら、Ajax を使う方法もある
C/C++ で計算だけして、ファイルに書き込んでから、
ウェブサーバーで、そのファイルを見れば?
計算速度が遅くてもよいなら、どの言語でも良いし 実際の処理時間次第って気がする
10分程度なら、そのまま終わるのを画面監視して待っていれば良い
数時間以上掛かるなら、結果をメールで送ってもらうなり
夜間バッチで動かしておくのも良いかも クライアント/サーバー間の通信は、JSON で良いけど、
元のデータは、CSV の方が、データベースとの連携でも簡単かも
そして、CSVを計算して、ファイルに書き込む
JSON
[[0,0],[10,20],[10,10]]
CSV
x,y
0,0
10,20
10,10 $url = "https://page.auctions.yahoo.co.jp/jp/auction/u332334293"; //エロ個別ページ
//$url = "https://page.auctions.yahoo.co.jp/jp/auction/n399439358"; //ノーマル個別ページ
$filestr = file_get_contents($url);
echo $filestr = mb_convert_encoding($filestr,'utf8','auto');
こんな感じでヤフオクのページにアクセスしたいんだけど、
通常のページなら問題ないけどアダルトカテゴリの場合ログインしてくださいとなる
この場合ログインなしで対処することはできますか? そういやヤフーの文字画像認証って難易度高過ぎだよね。
この間パスワード連続間違いやらかして文字画像認証になったんだけど、まともに読めなかったw 漏れは、Ruby で、Selenium WebDriver, Nokogiri などで、
Chrome, Edge などのブラウザーを自動操作して、スクレイピングするけど
ここに書いておいた
【VBScript】WSHについて話し合うスレ【JScript】
https://mevius.5ch.net/test/read.cgi/tech/1578522041/24-27 fopenでファイルに書き込んでいたのですが
突然文字化けするようになったのですが
ファイルも送信もUTF-8なのですが
$str = mb_convert_encoding($str, "UTF-8");
のようにする必要性も感じないのですが
これはサーバー側の問題なのでしょうか 相手のサーバーか、または自分のプログラムのファイルを保存した際に、
文字コードが異なるとか、BOM 有りUTF-8 になってるとか? >>773
どういう目的で取得するのかしらんけど
googleのキャッシュならそこそこ取れてるようだから
そこに欲しい情報があれば検討したら?
https://webcache.googleusercontent.com/search?q=cache:https://page.auctions.yahoo.co.jp/jp/auction/u332334293
まあ普通にログインしてやればいいと思うけど
ヤフーにcaptcha認証なんてあったっけ?記憶にないな
しかしなんだねこのいかがわしい人形はw >>778
検索かけて出てきた商品情報から希望要項に合うものピックアップし、
その中にある画像をまとめて表示させるて一気に見たいと思って作ってた
そしたら呼び出せない項目があって内容見てたらアダルトカテゴリに該当するものだった
キャッシュ必要だと使うのは難しいな 返り値が空と表示されるのですがどうすれば治るのでしょうか? 空だと表示される原因としてmariadbの設定を適当にしてしまった
phpadminを使用している時のユーザー名パスワードとmariadbを作成した時のパスワード又はユーザー名が全く別のものだと考えられるのですが原因はやっぱりこれでしょうか? コマンドプロンプトで消せと書いてあるんですがデータのみインストールでzipからインストールしなかった場合消せるのでしょうか? 0.1を10回足しても1.0にならないのはおかしい >>780
君は一体なんの話をしてるのかね
>>781
多くの言語は0.99999とかになるのだがw mysqli関数使ってるんだが、PDOについて質問です。
別のDBMSに乗り換えるときに便利、みたいな記事をよく見ますが、DBMSごとにSQL文の制約が少しずつ違いますよね?
この差はPDO自体は吸収できませんよね?コードで分岐するしかないんですよね?
すると、MySQLしか使わない限りは、PDOを使うメリットって何でしょうか? >>786
DBMS依存の書き方が多いなら無理して使う必要もないんじゃね。
専用のやつの方がパフォーマンスもいいんだろうし。 >すると、MySQLしか使わない限りは、PDOを使うメリットって何でしょうか?
自分で使うもので将来的な移行もありえないならメリットは特にない
pdoのほうがよりモダンなコードで書けるぐらいか
パフォーマンスは公式にも書いてるけどどのAPI使ってもほぼ同じで誤差程度 >>787
>>788
レスありがとう。
そっか、じゃあインジェクション対策もしてあるからこのままで行きます。 ID:qcCZ1na20
はとりあえず日本語から勉強し直せ
アホー知恵袋より酷いぞ
つかプログラミング向いてないから手遅れになる前に諦めた方がいいんじゃね? アップロードしたファイル名をDBに書き込んでファイルはtmpディレクトリに保存しておくときって
ファイルの名前はハッシュ値に変えるべきかそのままのファイル名で処理するかどっちがいいの? いつ消えるかわからないtmpに保存しとくって解せぬ
ファイル名をハッシュ値に変える意味はわからないけどそこは好きにすればいいのでは 下記記述のようにグローバルな場所で $arr を出力することはできたのですが、
関数の中で出力するとエラーになってしまいます。
PHPだと親に位置する変数って参照できないのでしょうか?
$arr = [
'a' => 1,
'b' => 2
];
var_dump($arr);
function test() {
var_dump($arr);
};
test(); >>793
function test() {
global $arr; >>794
どうも。
教えていただいた記述ではエラーが出てしまい、下記にしたらいけました。
仕組みググってきます!
var_dump($GLOBALS['arr']); 質問です。
色の近さを測る方法ってあるでしょうか?
例えば、
A.#4169e1 B.#ff7f50 C.#dc143c
があった場合、Cにより近い色はAとBどちら?
といった感じで使いたいです。 色コードといえば、RGBとかHSVとかCYMKとか習うと思うけど、これらは数学的にいうと、(ベクトル空間みたいな)色空間上の位置を持った点を意味する。
色の近さは色空間での2点間の距離の長さ。というわけで、色空間と距離の定義しだい。 https://ja.wikipedia.org/wiki/色差
DeltaE00をRGBから計算する
面倒くさいのでライブラリ的なの探す 思った以上に難しそうだな…
16進数だからC-AとC-Bを行い絶対数の小さい方が似てる色くらいに思ってたぜ 色の近さの判断基準が分からんとな。
とにかくRGBをHSVなりに変換したとして、
色相(H)が近ければ濃さ(S)や明るさ(V)はどうでもいいのか?
どうでもよくないならそれぞれのパラメータの重みを決める必要があるな。 SASS のmixin に、そういう機能は無いのか? 単純に3次元ベクトルの距離差だけでよいじゃん
RGBなんだし 人の目に感じる色の近さは、RGBの数値だけでは判定できないな
色合いと彩度で比較する方が感覚に近い csvをアップロードして中身読み込んで確認画面を出して問題なければDBに登録する仕組み作ってるんですけど
ページ間のデータ渡しって2Mくらいのそれなりに大きいデータでもセッションで大丈夫ですか? セションの中身はディスクに書いてるんだろうから、2MBくらいなら保存自体の問題は無いんじゃね。
でも不要になったらセッションからさっさと削除しないと、毎回そのデータがメモリにロードされることになる。
セッションとは別に一時ファイルに書き出してそのファイル名をセッションで保持するのがスマートな気がするけど、一時ファイルの掃除の方法を別途考えないといけないのが面倒だな。 >>807
ありがとうございます!
ファイルに保持させる方法も考えてみます >>808
一時ファイルの掃除のためにこの辺を読んでおくといいと思う。
https://www.php.net/manual/ja/session.customhandler.php
destroy とか gc で一時ファイルを掃除する必要があるはず。 preg_match_allを使ってリンク先が画像のURL取得したいんだけど正規表現がわかりません。
これを↓
<a href="http://img.hoge/001.jpg" target="_blank">
こうしたい↓
http://img.hoge/001.jpg
作ってみたのがこれ↓
preg_match_all('/href="(.*?)(jpg|jpeg|png)?"/', $html, $imgurllist);
わかる方いらっしゃいました教えて下さい。 "の前に\が必要かも?
href=\"(.*?\.png|.*?\.jpeg|.*?\.jpeg)\"
なんてどうでしょう なんでもかんでも正規表現でやらんほうがいいよ
ちゃんとしたの書くの難しいし何より自分がわからないのは良くない
多少時間はかかるかもしれないが
getElementsByTagName('a')->getAttribute('href')でa hrefのリストとってきて
1個ずつpathinfo['extension']を見ていく感じ
pathinfo['extenstion']の?以降を除外してstrtolowerで拡張子小文字にした上で
in_arrayあたりで比較すればいいんでは? 正規表現なら一行で書けるのにごちゃごちゃ関数かます方が意味分からない あの呪文のような記述を受け付けない人もいるみたいだ
俺は好きなんだけどな >>814
一行で書いてみ
もちろん810がやろうとしてるザルなのはだめな ま、こんなもんだろ
口先だけで自信ないから書けない
正規表現なんて書けた気でいるやつが大半でバグの温床
本当にちゃんと書けるやつだけ使えな >>818
自分が有能と勘違いしてるプログラマにありがちだな
教えて→こんなこともわからないの?底辺!→はよ教えて→考える力が身につかないよ!自分でやれ!→はよ教えて→無言で逃走 先輩が書いたコードを見ると $_SERVER などの取得する値に対して
urldecode やら isset やらで本当にその値か正しいものかどうか、セットされてるかどうか
毎度調べてるようなのですが、正しくない場合の事例が書いてあるサイトってありますか?
また、この手のエスケープや存在確認やらがまとめてあるサイトもあれば教えていただけますでしょうか。
自分では追っかけきれず、毎度先輩に迷惑掛けてしまっている状態で申し訳ないっす… 横からワロス
>>817
なんでわざわざ二レス三行も書いて、一行で書けるものを書かないのか >>821
$_SERVERで取れるのは環境変数
環境変数って言うぐらいだから、その値が必ずある保証なんてないし、めちゃくちゃな値をセットする事もできる
例えば
$_SERVER['HTTP_USER_AGENT']
とかな。自分でめちゃくちゃな値をセットして自分で実験してみたらいい
isset()なんか使わんけどねw
あるか無いか分からない時は getenv() 使えばいい
urldecode()にいたっては検証用の関数ですらない
URLエンコードされたデータをデコードしてるだけ
なんていうかHTTPの基礎から理解できてない
とりあえずGoogle Chromeのデベロッパツールでも眺めてHTTPの流れから理解した方がいいんじゃね? >>818
ペチパーはクソ正規表現をネットに載せるな!って昔からよく馬鹿にされるからなぁ…
まずは>>813のようにHTMLをパースする別の手段を検討すべき
その上であえて正規表現を選ぶってのなら別にいいけどさ >>810
くそ適当に書くけど
$html = '<a href="http://img.hoge/001.jpg" target="_blank">';
preg_match_all('/href\s*=\s*([\'"])(.+?\.(?:jpe?g|png))\\1/i', $html, $match, PREG_SET_ORDER);
print_r($match);
・大文字小文字の考慮
・スペース文字の考慮
・シングルクォートで挟むのかダブルクォートで挟むのかの考慮
正規表現を使うならせめてこれぐらいはしようよw 自分で書いた>>825のクソコードを眺めて思ったがほんと>>818の言う通りだな
一字一句同意する
きちんと処理したいならHTMLパーサーを使ってきちんとパースしなされ >>810です。
皆様ありがとうございます。
勉強不足であると実感しました。
URL取得はうまくいきました。 >>821
毎度?普通はそういう繰り返し使われる処理はライブラリ化すると思うけど 正規表現なら1行で書けるといいながらその1行すら書けずに逃げた>>814が恥ずかしすぎる >>823
ありがとうございます。
色々値セットして試してみます。
ちなみにデベロッパーツールの何処をみたらHTTPの流れを知ることができるのでしょうか? >>830
上のタブでNetworkを選んでHeadersのところを見る
Request Headersに書かれてるのが、ウェブサーバに対するHTTPリクエストの内容
例えばそこにAccept-Encoding: gzip とあれば
ウェブサーバがそれを見てコンテンツをgzip圧縮してレスポンスとして返す
そしてウェブブラウザがそれをデコードして元に戻す
User-Agentなんかも書かれてるはず
Accept-EncodingにせよUser-Agentにせよあくまでも自称であり、
そこには嘘でもめちゃくちゃな文字列でもなんでも書けるんだよ
だから値を信用したら駄目ってこと >>830
自分でHTTPクライアントを作ってみるのが一番いい
fsockopen()やstream_socket_client()あたりでサーバに接続して
HTTPの命令を送ってレスポンスを受け取るみたいなコードを書けばHTTPの流れは一発で理解できる
「PHP stream_socket_client HTTP/1.1」とか適当にググったら、たぶんサンプルコードは見つかるはず 漏れは、5ch の投稿から、画像のリンクだけを取り出すために、
Ruby で、こういうモジュールを作っている
module MyUtility
require 'uri'
@@EXTS = %w(png jpg jpeg gif) # 画像の拡張子
# 画像の拡張子かどうか?
def check_picture_extname? ( picture_url )
return false if picture_url.empty?
begin
uri = URI.parse picture_url
rescue # 半角以外の文字
return false
end
file_name = File.basename(uri.path) # ファイル名
file_extname = File.extname(file_name) # 拡張子
return false if file_extname.empty?
# . を削除して、小文字にする
file_extname.delete!(".").downcase!
@@EXTS.include? file_extname # 含まれている?
end
module_function :check_picture_extname? # 公開
end >>831-832
超詳しくありがとうございます!
ググる用語まで教えていただき感謝です。
Headers はじめて開きました。
ここの情報を引っ張ってきてるんですね。
色々調べてみます。 VSCode の拡張機能の、REST Client を使えばよい
### で区切れば、いくつでも書ける。
カーソルを置いて、右クリックメニューから送信
GET http://localhost:8888/?page=2&pageSize=10 HTTP/1.1
###
POST http://localhost:8888/ HTTP/1.1
content-type: application/json
{
"name": "sample",
"time": "Wed, 21 Oct 2015 18:27:50 GMT"
}
### phpファイルにパスワードを記入しているのですが
安全でしょうか?
もしくはもっと安全な方法はありますか? 質問です。
テキストファイルにキーワードが書いてあり、
それを読み込んで一致する文字列があったらtrueを返します。
しかし、たまに一致箇所があるにも関わらずスルーされる場合があります。
なぜでしょうか?
判定は↓のような感じです。
strpos($str,'キーワード') !== false >>838
再現性のある最小コードをどうぞ
$strとキーワードじゃエスパーじゃないと分からん すみません。
解決しました。
原因は、テスト用のフォルダのパスのままになっていたことと
試運転時のデータが一部使われていた事により
一部検出されていないというおかしな状態になっているということでした。 die();
exit();
exit は言語構造です。 status を指定しない場合は括弧なしでコールできます。
って今知ったわー foreach ($this->_db->query($sql) as $v) {...}
query()やprepare()で準備した文はexecute()必須だと思ってましたが
↑の記述ではexecute()なしでSQL文を実行できているようでした
何故でしょうか? $sqlの内容が 直接実行可能なSQL文だったらそのままで行けるよ ->
=>
がよく混同する。
どれがどの用法かを一発で覚える方法ある?
数ヵ月以上使っていなかったり他言語やってたりすると覚えるのは困難。 >>845
どうも
$sql のSQL文は下記なのですが、直接実行できるときとできない場合の
見分け方ってありますでしょうか?
$sql = "select answer, count(id) as c from answers group by answer";
bindValue() とかをかましているときに execute() 使っているようなので
プレースホルダの置換しなければおk的な感じなのでしょうか? >>847
自己解決しました。
prepare() と execute() がセットで query() は単体でおkのようでした。 >>846
->これはアロー演算子だから
オブジェクトとかクラスとか呼び出したときにメソッドを呼び出すときに使うから
クラス名->メソッドとかで
=>これは普通の演算子以下とか以上とかで使うやつだから >>=>これは普通の演算子以下とか以上とかで使うやつだから
嘘つき >>850
間違ってたわ、=>これは配列で添字で関係持たせるときに使うやつだったわ
謝罪しておきます 最近はfnとセットでアロー関数使うときにも使うけどね >>856
その説明ではわかりません。
まず
・象は鼻は長い
・象の鼻は長い
の違いを教えてください なんでこうプログラマとかUNIX使いってめんどくさいのが多いかね 先にめんどくさいことを片付けるか、後からめんどくさいことにぶち当たるかの、違い 質問いいでしょうか?
ローカル環境XAMPPで動かしています。
外付けHDDから画像を表示させようとしたところ見つからないというエラーが出ました。
[an error occurred while processing this directive] 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 [an error occurred while processing this directive]
リンクをコピーで確認したところURLの前に「http://localhost」が勝手に追加されていました。
これのせいで上手く表示されていないようです。
なんとかして画像を表示させる方法はないでしょうか? >>860
諸々の知識が足りて無さすぎるのでサーバーとはなんぞやxamppとはなんぞやってとこから勉強してどうぞ ウ〜ンやっぱ無理か
一時的にコピーくらいしか思いつかんな
データとして貼り付けるにして多いし重すぎる ドキュメントルート内のどこかからジャンクションやシンボリックリンク張るなり、サーバー設定でaliasすればいいんでね? >>863
フルパスで指定している?
ドライブ名が入っている? >>865
フルパスでやってる
ドライブ跨ぐと駄目なんだろうな 相乗りで質問させてください。
>>867 のリンク先に書いてあるような設定を済ませて、chromeでは〇〇〇.localhostといった
URLで開けるようになったのですが、それ以外のブラウザではエラーが出てしまい開けません。
改善方法はありますでしょうか?
PHPと関係ないかもしれませんが、該当スレも見当たらず…
どうかご回答よろしくお願いいたします。 virtualhostでもいいけどめんどいしalias追加でいいんじゃねえの Windows 10, WSL, Ubuntu 18.04 で、Ruby なら、Linux 側で、
1-liner で、Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、
Windows側から、これでブラウザでアクセスできる
http://localhost:8080
Linux側も、C ドライブ内にあるからかな?
アクセスするサーバーが、どのドライブのどのフォルダ内を、
カレントディレクトリとして起動したか 2ch風の掲示板を作ってます。
datファイルで一行に名前・メール・メッセージと管理用のIDやらを
記述するやり方で、レスアンカーやurlをループ処理の中で出力時に
aタグで囲む方法が思い付きません。
正規表現でメッセージから有無の判定はできましたが、そこから先で詰まってます。
ヒントをください。 >>872
その正規表現を貼ってごらんよ。
それ使えばできるはず。 後方参照がわからんのだろうな
matchじゃなくてreplaceでおk
正規表現でマッチした()の中身を置き換えのとこで$n or \\nで参照できる
例えばこんなん
https://ideone.com/lJv04e >>874
ありがとうございます。
早速試してみます。
何かできそうな気がしてきました! >>874
下記記述で行けました。
本当にありがとうございました(涙)
preg_replace('/>>([0-9]{1,3})/', '<a href="#$1">>>$1</a>', $message);
ちなみにセキュリティに対して理解が浅すぎるのですが、渡ってくる文字列に対して警戒していればおkで
置換でa要素を使ったり、HTMLエンティティ対象の文字列をそのまま書いても大丈夫なのでしょうか? 5chはテキストログで1レス1行が都合が良さそうなのと区切り文字が必要になるので
そのへんの改行(<br>)と区切り(<>)考慮するとエスケープ済みのほうが扱いやすい
ただ欠点としてはログサイズが肥大する
もちろん必要最小限のエスケープでもできるけどめんどくさいので完全再現じゃないが
ログ保存時
$message = preg_replace('/\r?\n/', '<br>', htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'));
出力時
$message = preg_replace(['/>>([0-9]{1,3})/', '%(https?://[^\s&]+)%'], ['<a href="#$1">>>$1</a>', '<a href="$1">$1</a>'], $message);
とかなんじゃないかなと
リンクつける仕様上一旦エスケープしたのを戻す箇所があるので
そこでXSSを成立させないよう注意してコーディングする必要がある
エスケープ済みの文字は<や"のように&がつくので
[^\s&]のとこのように&でぶったぎるのが簡単
ちなみにurlの複数パラメータでも使われる&の扱いは面倒なので適当だけど
>>835のように&でリンク切れてるの見る限り5chも適当なのでおkってことで >>877
詳しくありがとうございます。
5chのログの内容は最初にチェックしてたはずなのに、すっかり忘れてました。
再度確認したところ、エスケープ処理済みな上にタグまで付いてました…
てっきり出力前にエスケープするのがPHPのルールだと思ってたのですが、
まさか事前にエスケープしておくとは…
出力時のpreg_replaceも配列にすれば一回で済むのですね…
レスアンカーとリンクで分けてました
>>835のリンクについては、専ブラで見てたので気づきませんでした。
直リン避けも考慮してhttps://まで見て、後は半角英数なら置換対象に
してしまおう!…って感じで雑に考えてました。
preg_replace('/(h?ttps?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/', '<a href="$1">$1</a>', $replaceMessage);
凄く参考になりました。
どうもです。 文字列と多次元配列の値に対して一括で処理できるメソッドで質問です。
下記メソッドで$hogeに多次元配列が渡ってきたと仮定しまして、
値が配列であれば再起処理でメソッドが再度呼び出されるそうです。
私の考えでは、再起処理で多次元配列の中の値が配列ではなかったときは、
Aの文字列の方に流れるのではと思っていたのですが、実際は@に流れるようです。
多次元配列の中の文字列にis_array()を掛けてもfalseなのですが、どういった理由で
@に流れるのでしょうか?
function test($hoge) {
// 配列の場合
if (is_array($hoge)) {
foreach ($hoge as $key => $value) {
// 再起処理
if (is_array($value)) {
test($value);
}
// @配列の中の値が配列でない場合
else {
...
}
}
return;
}
// A文字列の場合
return;
} @は再帰呼び出しで、Aは再帰の終了条件だね。
配列の中に配列があったときは@が呼ばれるようになってる。
再帰を一度じっくり勉強したほうがいいよ。誤字も含めて。 >>880
誤字失礼しました。
どうにも理解できなくて、再度質問しようと文字に起こしていたところ自己解決できました。
Aは文字列専用の終了条件で@は配列専用の終了条件だったようです。
再帰処理の際に値が文字列なのに、何で配列判定で true が出るのだろう?
というところが疑問だったのですが、
本来であれば配列の中の配列である [] で再帰処理されるところを、その中の値Bで
再帰処理されていると勘違いしておりました。
ご迷惑おかけしました。
$hoge = [
'piyo1',
'piyo2',
[
// B
'piyo3'
]
]; 書き方としては終了条件を早期returnして終了するべき(そうじゃないとひどく読みにくい)
一般化するなら
function apply_recursively($target, callable $callback) {
if (!is_array($target)) {
return $callback($target);
}
return array_map(function ($target) use ($callback) { return apply_recursively($target, $callback); }, $target);
// return array_map(fn($target) => apply_recursively($target, $callback), $target); // -> for PHP >= 7.4.0
} >>879
foreach 直後の if は不要で無条件に test($value) を行い、
Aは else にして @ に書いてた処理を書き、
関数の引数は function hoge(&$value) で参照で受けとるようにし、
foreach も foreach($hoge as &$value) にする。
こうしないと動かなくない? >>883
ごめんまちがい
function のくだりは function test(&$hoge) ね。 phpのechoを使ってルートフォルダからの絶対パスを指定して
ナビ部分のリンク変更をサイト全体に一括で行えるような書き方を教えてください
3年くらい前にやってたんですが
やり方がわからなくなってしまいました >>885
echoにそんな機能ないし、何が聞きたいのか伝わらないと思う。
find(grep)+sedのような、ファイルの中身に特定の文字列があれば、
それを一括で書き換えるようなことをしたいわけでもなさそうだし、
何かナビ用のリンクのリストをincludeしてるなら、
そのリストの中身を書き換えろで終わる話だけど、そんな簡単な話でもなさそうだし。 細かく言いますと
一時期Web製作会社でコーディング業務をしており
html/cssは扱えるのですがphpはヘッダー、ナビ、フッターなど共通部分をincludeフォルダで共通化できる程度しか扱えませんでした
そして自社のドメインのサブドメインでテスト環境を作り、そこでHPを作成して客先の本番サーバにアップロードという工程で納品、保守管理をしていました
その場合、リンク先を絶対パスで書けないので相対パスにする訳ですが
phpで常にルートフォルダを取得して書き出し、それに続けて下層のリンク先を明記するようにしていたんですが
そのやり方を忘れてしまったので教えて欲しいのです それだけ具体的に説明できるんならググった方が早いぞw 2ch風の掲示板を作っており、考え方についてアドバイスをいただきたいです。
ログファイルでレスを記録して、1レス1行で構成されています。
ajaxを用いて遷移なしでの投稿反映と、レスアンカーにホバーすると、該当のレスを引っ張ってくる
ようになっています。
このレスアンカーへのホバーを行うと、当たり前なのかもしれませんが、添付の画像のように
どんどん_ajax.phpのファイルへのアクセス?が増えていってしまい、投稿ならまだしも、
ホバーするだけでPOSTを行うなんて、無駄な処理をさせているのではないか?
と考え出しております。
ログファイルは数百kb程度なので、投稿内容の全てをJS側で配列で保持をしていく方が
無難だったりしますでしょうか?
ttps://f.easyuploader.app/eu-prd/upload/20200412115052_69364c5954346f304857.png >>889
目的次第
少なくとも表示中のレス(=クライアントで保持してるレス)に対するアンカーへのホバーでサーバーにアクセスさせるのは無駄 >>890
ありがとうございます。
やはり無駄でしたか。
おいおい100レスずつ表示とかする予定ですので、表示されているレスと
表示されていないレスとで分岐させてみます。 ->
=>
この使い分けをよく忘れるのですが
覚えておくコツはありますかね?
メインでPHP言語以外をやってるのでたまにPHP書くときよく混乱します。 >>856
「の」はクラス「の」メンバー、
「は」は連想配列のkey「は」これですよ
という意味?
でもこれ以外で->や=>が出てくる場面なかった? >>891
一度取ってきたレスはキャッシュしておけばどうよ。
どのみt 1-1000 みたいのだっやらまとめて全部取ってくることになりそうだが。 >>894
ども。
おっしゃる通りかもしれません。
投稿以外でサーバーに負荷掛けるより、クライアント側で処理した方が
良い気がしてきました。
1回投稿での文字数を制限してしまえばサイズも制御できそうですし。 Ruby なら、0〜1,000 までの配列を作っておいて、
読み込んだレス番号だけは、その文字列を設定していく
p posts = Array.new( 1001 )
出力
[ nil, nil, nil, 続く... ] どうせなら ruby じゃなくて JS で例示してやれよ。
phpのスレでなんなんだけどさ。 RubyならRubyならってよく布教しに来るけどいい加減場違い空気嫁
>>887
URLの話じゃないでしょ?
内部の話なら別に相対パスにしなくても絶対パスでも問題ないんだけど。
その絶対パスがわからんって話?
自スクリプトから見た自分の絶対パスは__FILE__定数でわかる。
サーバのドキュメントルートが知りたいなら$_SERVER['DOCUMENT_ROOT']
ただしこういう環境変数($_SERVERや$_ENV)はあんまり過信しないほうがいいね。 Eclipseで参考書通りに
print “¥n”入れてもコンソールで改行してくれないんだけどなんで? >>900
OSとか実行コードくらい書けないのか
あと円マークがそのまま出てるようなら
正しくは「(日本語環境では円マークに見える』バックスラッシュだから」
を確認しろ Eclipseとかprint ""とかいう表記を見ると
古いか一般のPHP書籍とかかけ離れたもののきがするわ
あんま参考にしないほうがいいかもしれんね OSはMac
eclipseでphp7
<?php
print “hello”;
print “¥n”;
print “world”;
print “¥n”;
?>
Kindle Unlimitedの参考書によるとこれで
hello
world
と出力されるみたいなんだけど実行すると
hello¥nworld¥n
ってなる これを、Ruby で、実行してもエラーになる!
print “\n”;
基本的にプログラミングは、どの言語でも、半角英数字しか使えない。
全角文字のクォーテーション・全角空白なども使えない
\ も、日本語キーボードでは、バックスラッシュキーのこと!
\ という文字を使っちゃいけない!
これなら、Ruby でも改行される。
print "\n" ; rubyさんはあちこちのスレに出張布教してるんですね
>>903
php print 改行
で検索くらい出来ない? 半角で書くべきとこを全角で書いてるのは
動いてるようだから書き込んだときのミスとして
文字コードがおかしいんだろう
文字コード変えるか\nやめてPHP_EOLにしとけば バチスカってmacの専ブラで書き込むとクウォートが全角に、バックスラッシュが円マークに、自動変換される サーバー内で動くプログラミングは可能のことですか?
例えば無限ループで常に動かすプログラムとか 定期実行されるクローラーとかのこと言ってるんじゃないの? 個人的にPHPでサーバ書いてるんでそれはよくやってる
ただPHPに限った話じゃないけどその手のバックグラウンド実行は
普通のレンタルサーバだと一定時間でkillされるだろうね 定数を、成型した変数を代入することで宣言することはできませんか?
外部ファイル(.csv)を読み込み、連想配列$arrayを作成し、
クラス定数CLASS::CONSTをその配列$arrayにしたいのです
グローバル定数としてdefine(CONST, $array)することも試したのですが、いずれも出来ませんでした 定数にはコンパイル時定数と実行時定数(immutable, readonly)とがあるが, PHPは基本的にコンパイル時定数しかサポートしていない
実現したいのは後者の実行時定数なんだろうが, 「php readonly」とかでググれば分かるように言語としてはサポートしていない すみませんできました
defineだと変数渡しで定数を作れました
単にPHP5.6でdefineで定数に配列を入れられないため正常動作しなかったようです
PHP7.3の環境では動作しました
お手数おかけしました CakePHP, Spring Boot などは、Ruby on Rails のコピーだから、
Rails を学んだ方が速いと思う x ドットインストールでCakePHP勉強するお
o ドットインストールでCakePHP勉強するよ
正しい日本語。
最近の日本人は気持ち悪い言葉づかいをする。 >>921
Webアプリの仕組み(裏でどう動いているか)を理解したくて、LaravelかCakePHPかで迷ってCakePHPを勉強しようと思ったんだけどLaravelはどう? >>922
体言止めに句点打つのめちゃくちゃ違和感あるんだが web アプリの作り方を学ぶのは、Ruby が最適!
本当は、Sinatra が良いけど、web 上の教科書が少ないから、
Rails になるかな?
ただし、Rails は、半年ぐらい掛けて学ぶぐらい高機能。
本は、10冊ぐらい出てる
web サイトでは、日本語版・Rails チュートリアルの1つ古いバージョンなら、無料で読めるけど、
あまりに難しいので、初心者は本から始めるのが良い RubyをNGワードに入れるのはデフォなんですかね? 単に使い方を学びたいと言ってるだけなら別にフルスタックでもいいけど
ソースコードレベルで仕組みを理解したいならフルスタックは疲れるだけ
slimあたりのマイクロフレームワークのソースコード読むといい なんで荒らしの相手をするんや。
ホントにRubyが優れとるなら、PHPで書かれた有名ソフトがRubyで書かれなかった理由を提示させるべきや。
WordPressもNextCloudもPHPなんや。Facebookも元はPHPで書かれてた。
PHPerは胸を張って堂々としておけ。小バエが顔の前をうろちょろしても気にするな。 小さなグループのための連絡帳づくりには便利だな
自分も使って現在5人くらいで使っておおむね合格点しかし
「こういう風になってたらもっといいなあ」多数w RubyってPHPと張り合うものだったんだ?
あれはPerlと競合するものだと思ってた PHPはごった煮のテンプレートエンジンってイメージだな。
スクリプトのパースがコードではなくテキスト出力から始まるしな。
そこが他のスクリプトと比べてもweb向きに使い勝手がいいところだと思う。 下記のような、空以外のstringだけを通し、それ以外はnullを返すメソッドを作りたいんですが、
この処理に最適なメソッド名ってありますか? 暫定のfilterStringは何となく違う気がしてます
function filterString($var): ?string
{
return is_string($var) && $var !== '' ? $var : null;
} GCのためにでかいオブジェクトをnullにするのならわかるけど
エラーハンドリング用途でnullじゃない値をnullにして返すってのはbad practice >>936
ありがとうございます
>>938
デフォルト値が必要ないんでnullが都合いいです 各ページa,bからcページへの遷移を各ページのボタンa,bからとしたときに、ページbのボタン名をページaのものにブラウザのデバックモードかなんかで変更した場合に、
ページcから見るとisset(ボタンA)がtrueとなると思いますが、こういうパターンを見分ける方法ってありますでしょうか >>940 難しいと思う
ボタン名をbtn_A,btn_Bみたいにa,bで変えて
cで、aからの遷移だったら… bからの遷移だったら…
と処理わけするのが現実的 と思ったけど、結局リファラも改ざんできちゃうから難しいね
JavaScriptで小細工も出来るけどそれすら改ざんされるのも想定してるなら
まあノーダメならそんな物好きなこと想定する必要はないと思うけど
ダメージあるなら設計変えればいいし ありがと➰。入力された値の正統性を確かめるのって難しいですね。自分しか使わないやつだから気にしないでおきます ページを表示する毎にランダム値を埋めて、submitされたページ名とその値とを検証したらどうかな。 $a = [1, 2, 3];
と言う配列があったとして、そこから
$b[1][2][3] = '何か入れる';
と言う配列を作る簡単な方法はありませんでしょうか? $b[$a[0]][$a[1]][$a[2]] = '何か入れる';
とか? ごめんなさい、質問の仕方が悪かったです
元の配列の長さは可変で、出来上がる配列の深さも深くなっていく感じです
$ary = [1,2,3]; //長さは可変
$val = '何か';
$ret = func($ary, $val);
var_dump($ret);
---
array (size=1)
1 =>
array (size=1)
2 =>
array (size=1)
3 => string '何か' (length=3) そういうあり得ないくらい複雑な何かを実装しようとするときは、
実はやりたいことを実現するもっと簡単な方法があることが多い
配列$bは常に1つの次元に1つの要素しか持たないまま深さだけ深くなってくのは無駄というか意味不明
やりたいこと自体を書いた方がいいと思う 元の配列の値をキーの深さとする配列ができれば、あとはなんとかなるのでその部分だけの質問としたのですが、わかりにくくてすみませんでした
やりたかったことはLaravelのRouteの真似事です
木構造のクラス書いてデータ保持するのも面倒だったので配列でなんとかしようと思いました
ただあまりゴリ押しで書いても見ずらいので既存の関数などで簡潔に書けたらと思い質問した次第です
結局、参照代入をforeahで回すと言う方法で落ち着きました
public static int get($uri, $action)
{
if ($uri == '/') {
$paths[] = '/';
} else {
$paths = explode('/', $uri);
}
$tmp = &static::$routings;
foreach ($paths as $path) {
$tmp = &$tmp[$path];
}
$tmp = $action;
return static::$instance;
} >>947
そのコードで言うところの func は一応実現してて、もっとシンプルな方法があるかを確認したいの?
それともまだ func を実現できてないの?
参照と再帰を使えば簡単なはずだけど、参照とループを使ってもできるはずだよ。 ざっくり
ブラウザがセキュリティのために(あくまでも独自に)設定している、
同一オリジンポリシーというものがある。
同一オリジンってのは同じプロトコル 同じホスト 同じポートのことで、
同一ドメインでもこれらが違ったら別オリジンということになる。
ブラウザはJavaScriptのXMLHttpRequest(XHR)やFetchAPIから、
別オリジンのサイトには意図的にアクセスしないようにしてある。
その制限を超えるのがCORSで、
あるサイトを開いた時、別オリジンのサイトにXHRなどからアクセスしようとしてたら、
ブラウザは追加のOriginヘッダをつけて、その別オリジンに対して確認作業を行う。
そのサイトがAccess-Control-Allow-Originというヘッダを返してこれば、
意図したものと把握し、制限を超えてアクセスすることになる。
Access-Control-Allow-Originは、
よそのサイトのXHRから呼び出し可能なAPIを提供してる時はつけるべきだが、
よくわかってない人が、自サイトの掲示板でつけてしまった場合、
悪意あるサイトにアクセスするだけで、CSRFが成立して、犯罪予告を書いてしまったりする。 CORS は、ブラウザでアクセスする人を保護するもの。
サーバー経由にすれば、クロスドメインでもアクセスできる
自分のPC にサーバーを立てて配信する、一番簡単な方法は、
VSCode の拡張機能のLive Server 肝はあくまでもブラウザの機能ってところだな
それに頼って無策ではいけないよ
実行前最後のプロセスで再ログイン求めるとかやるべき対策はちゃんとやる <?php
の閉じタグをそれが文末にくるときは省略が奨励されてるのは
どういう理由からですか? >>958
閉じタグの後に空行を入れちゃったりすると、それが出力されちゃうからだと思ってる。
ファイルの最後に空行を入れちゃうのは結構やりがちだから。 あれそうだったの?
閉じた直後の改行コードもNG?
>[改行]
[改行]
[EOF]
じゃなくて
>[改行]
[EOF]
もダメで、
>[EOF]
じゃないとダメだとか? 閉じタグ直後の改行1つだけは例外だが閉じない方がミスを減らせる 何故ダメなのかその理由が理解出来ないと
「閉じタグを付けるな」が一人歩きしそう short_open_tag はデフォルト On にしてほしい 逆に言えば、
"PHPを埋め込みで使うなら"閉じタグは必須ってことだな
いちいちそんな判断するなら、付けておけば安心 IDE使ってたらその辺の面倒見てくれるんじゃないの 埋め込みで使う時に閉じタグを書かないってのが不可能なわけで。 ENT_QUOTESのENTとは何の英単語の略でしょうか? なんで汎用性のある言語はCでできてPHPではできないの? 特定言語で出来て、他の言語で出来ない事なんてそんなにない >>974
PHPからWin32やLinuxのシステムコールを呼び出す方法が面倒だし、コスト最小ではないから、C/C++が優位。 例え、PHPで汎用言語を作ったとしても、PHPの実行時モジュールが邪魔なコストになる。 Win32やLinuxのシステムコールを呼び出す方法は
どの言語でも面倒くさいだろう 「汎用性のある言語」の意味するところが分からんとなぁ
「CでできてPHPではできない」も, 「汎用性のある言語」をCやPHPで実装する話なのか, CやPHP自体の汎用性の話なのか分からん
前者なら別にどっちでも書けるけどコンパイルするなら最終的にセルフホスティングするだろうし仮想マシンやインタプリタで実行するなら処理系の速度が重要だからCが選ばれるだろう
後者ならCだって何でも出来るのは確かだけど, 低レベルプログラミングには向いてても例えばWebアプリケーション開発には向いてない
Cは汎用的な「システムプログラミング言語」で, PHPは(今は)汎用的な「スクリプト言語」だからそもそも目的が違うとしか 質問いいでしょうか?
ローカル環境で動かしています。
昨日macのOSを更新したところ、USBからのデータの取得ができなくなりました。
Warning: file_get_contents(URL): failed to open stream: Operation not permitted
対応方法をご存知の方がいらっしゃいましたら教えていただけると幸いです。
URLの打ちミスやphp.iniの「allow_url_fopen = On」も確認済みです。
macOSはバージョン10.15.5です。 >> 981
だめだ
質問の許可を確認してからしたまえ Htmlタグとphpが混在するとソースコードが
見づらく感じるのですが、なにかいいコツはないものでしょうか 今思いついたが、<?php ?>の前後に改行2つ入れると、見やすくなる気がする。 >>984
そもそも今はそういう事をやらない
テンプレートエンジンを使おう PHPそのものがテンプレートエンジンみたいなものじゃん ありがとうございます。
改修なんで選択の余地はないです。
あと、cakephpというフレームワークは
マイナーなんですか? マイナーではないけどLaravelにしといたほうがいい >>991
日本では一番メジャー(だった)
今はLaravelが強いけど
昔からCake使ってる人はテンプレエンジンを使わない傾向があるかな
Cakeにも載せる事はできるんだけどね
Laravelには始めからBladeっていうテンプレートエンジンがついてる >>984
おそらくecho "<html>";
レベルのことしてるんだろうけど
書き方が悪いとしか なぜ人はMacBookProをすすめるのですか?
わたしはずっとWindows使いで新たな学習コストを消費したくないのですが。 ・デバイスとして高品質、見た目も良い
・高解像度ディスプレイが標準のモデルが多い
・デュアルブートが可能で環境選択の幅が広がる
こんなとこじゃない?
使いたくないなら使わなきゃいいじゃん。
学習コストが〜とか言って無駄な書き込みしてる時間的コストはどうでもいいのかな? Windowsでも同じ条件を満たしてるじゃないか。 Macは滅びたほうがいい。
使っている人といない人が混在したら互換性の問題が甚大になる。 そうなるといいね。
ただ、実現性の薄い可能性に思いを巡らす想像コストwに配慮しつつ
自分のやりたいことに戻った方がいいよ。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 554日 21時間 11分 27秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。